Eriksson Beam API
Search Results for

    Show / Hide Table of Contents

    Pushing Data

    Send modified beam design data back to Eriksson Beam using PushBeamDesignerAsync.

    Basic Usage

    // Pull first (required!)
    var design = await client.PullBeamDesignerAsync("project");
    
    // Make modifications
    design.DesignCriteria.ProjectInformation.DesignerName = "Jane Doe";
    design.DesignCriteria.ProjectInformation.Date = DateTime.Now;
    
    // Push changes back
    await client.PushBeamDesignerAsync("project", design);
    

    Method Signature

    public async Task PushBeamDesignerAsync(string beamProject, BeamDesign designer)
    

    Parameters

    Parameter Type Description
    beamProject string Project identifier
    designer BeamDesign Modified design object

    Project Identifier

    Value Behavior
    "" Uses single open project. Throws if multiple are open.
    "ProjectName" Matches by file name without extension
    @"C:\path\file.ebf" Matches by full file path

    Critical: Always Pull First

    Never create a BeamDesign directly. Push updates every field, including ones you didn't set.

    // WRONG - causes data loss!
    var design = new BeamDesign();  // All fields have default values (0, empty, etc.)
    design.DesignCriteria.ProjectInformation.DesignerName = "Jane";
    await client.PushBeamDesignerAsync("project", design);
    // Result: ALL data is overwritten with defaults!
    
    // CORRECT - preserves existing data
    var design = await client.PullBeamDesignerAsync("project");  // Gets current values
    design.DesignCriteria.ProjectInformation.DesignerName = "Jane";
    await client.PushBeamDesignerAsync("project", design);
    // Result: Only DesignerName changes, everything else preserved
    

    Critical: Batch Changes

    Push operations are expensive. Always batch modifications:

    // WRONG - slow, 4 separate pushes
    design.Property1 = value1;
    await client.PushBeamDesignerAsync("project", design);
    design.Property2 = value2;
    await client.PushBeamDesignerAsync("project", design);
    design.Property3 = value3;
    await client.PushBeamDesignerAsync("project", design);
    design.Property4 = value4;
    await client.PushBeamDesignerAsync("project", design);
    
    // CORRECT - fast, single push
    design.Property1 = value1;
    design.Property2 = value2;
    design.Property3 = value3;
    design.Property4 = value4;
    await client.PushBeamDesignerAsync("project", design);  // All at once
    

    What Gets Updated

    When you push, every field in the BeamDesign is sent to Eriksson Beam:

    • ConcreteExtents (entire section definition)
    • DesignCriteria (all settings, materials, load combinations)
    • StructuralModel (all loading, bearing, dapped ends)
    • Reinforcement (all prestress, rebar, transverse, WWR)

    There is no way to push partial updates. The entire object is serialized and applied.

    Server-Side Validation

    Eriksson Beam validates pushed data:

    • Invalid values may be rejected
    • Out-of-range values may be clamped
    • Missing required data may cause errors
    try
    {
        await client.PushBeamDesignerAsync("project", design);
    }
    catch (ServerErrorException ex)
    {
        if (ex.Response.ResponseCode == ResponseCode.InvalidRequest)
        {
            Console.WriteLine($"Validation failed: {ex.Response.ErrorMessage}");
        }
    }
    

    Error Handling

    try
    {
        await client.PushBeamDesignerAsync("project", design);
        Console.WriteLine("Push successful");
    }
    catch (ServerErrorException ex)
    {
        // Server rejected the push
        Console.WriteLine($"Push failed: {ex.Response.ErrorMessage}");
        Console.WriteLine($"Response code: {ex.Response.ResponseCode}");
    }
    catch (ArgumentNullException ex)
    {
        // Null beamProject or design parameter
        Console.WriteLine($"Invalid parameter: {ex.ParamName}");
    }
    catch (ErikssonBeamNotRunningException)
    {
        // Connection lost during operation
        Console.WriteLine("Connection lost");
    }
    catch (OperationCanceledException)
    {
        // Timeout exceeded
        Console.WriteLine("Operation timed out");
    }
    

    Common Validation Errors

    Error Cause Resolution
    Project not found Invalid project identifier Check GetOpenBeamProjects() for valid names
    Validation failure Invalid property values Check error message for specific field
    License error Invalid/expired license Verify license key

    Complete Example

    using System;
    using System.Threading.Tasks;
    using ErikssonBeam.API.BeamClient;
    using ErikssonBeam.API.BeamDesigner;
    
    class UpdateProjectInfo
    {
        static async Task UpdateDesignerInfo(
            ErikssonBeamClient client,
            string projectName,
            string designerName,
            string clientName)
        {
            Console.WriteLine($"Updating project '{projectName}'...");
    
            // 1. Pull current state
            var design = await client.PullBeamDesignerAsync(projectName);
    
            // 2. Display current values
            var info = design.DesignCriteria.ProjectInformation;
            Console.WriteLine($"  Current designer: {info.DesignerName}");
            Console.WriteLine($"  Current client: {info.ClientName}");
    
            // 3. Modify values
            info.DesignerName = designerName;
            info.ClientName = clientName;
            info.Date = DateTime.Now;
    
            // 4. Push changes
            try
            {
                await client.PushBeamDesignerAsync(projectName, design);
                Console.WriteLine("  Update successful!");
            }
            catch (ServerErrorException ex)
            {
                Console.WriteLine($"  Update failed: {ex.Response.ErrorMessage}");
            }
        }
    
        static async Task Main()
        {
            var launcherArgs = new ErikssonBeamLauncherArgs
            {
                LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
                ExecutablePath = @"C:\Program Files\Eriksson Software\Eriksson Beam\ErikssonBeam.exe",
                FilesToOpen = new[] { @"C:\Projects\MyBeam.ebf" },
                CloseErikssonBeamOnClientDisconnect = true
            };
    
            using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(launcherArgs);
    
            await UpdateDesignerInfo(
                launcher.Client,
                "MyBeam",
                "Jane Doe",
                "ACME Corporation"
            );
        }
    }
    

    Modifying Different Section Types

    When modifying ConcreteExtents, cast to the specific type:

    var design = await client.PullBeamDesignerAsync("project");
    
    switch (design.ConcreteExtents)
    {
        case TBeam tBeam:
            tBeam.Length = 240;  // inches
            tBeam.Width = 48;
            break;
    
        case IBeam iBeam:
            iBeam.Length = 360;
            iBeam.Height = 36;
            break;
    
        // Handle other types...
    }
    
    await client.PushBeamDesignerAsync("project", design);
    

    To change the section type entirely:

    var design = await client.PullBeamDesignerAsync("project");
    
    // Replace with a new section type
    design.ConcreteExtents = new IBeam
    {
        Length = 360,
        Height = 36,
        // Set all required properties...
    };
    
    await client.PushBeamDesignerAsync("project", design);
    

    Performance Considerations

    • Push operations typically take 200-1000ms
    • The entire design is serialized and transmitted
    • Eriksson Beam UI updates after receiving push
    • Consider user experience if running many pushes

    See Also

    • Pulling Data - Retrieve data first
    • Data Model Overview - BeamDesign structure
    • Best Practices - Performance tips
    • Edit this page
    In this article
    Back to top Generated by DocFX