ErikssonBeamFileManager

ErikssonBeamFileManager

Manage batch file operations with automatic Eriksson Beam lifecycle handling.

When to Use

  • Processing many files that may not all fit in memory
  • Need to open/close files dynamically during a session
  • Want automatic handling of Eriksson Beam restarts
  • Building file-centric automation workflows

Important Notes

Warning: The Launcher and Client references change when files are opened. Always access them through the FileManager, never cache these references.

// DON'T cache these references
var client = fileManager.Launcher.Client;  // May become invalid!

// DO access them each time
var design = await fileManager.Launcher.Client.PullBeamDesignerAsync();

Basic Usage

var args = new ErikssonBeamLauncherArgs
{
    LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
    ExecutablePath = @"C:\Program Files\Eriksson Software\Eriksson Beam\ErikssonBeam.exe",
    FilesToOpen = Array.Empty<string>(),  // Can start with no files
    CloseErikssonBeamOnClientDisconnect = true  // This value is ignored
};

using var fileManager = await ErikssonBeamFileManager.Initialize(args);

// Open some files
await fileManager.OpenFiles(new[] { @"C:\Projects\beam1.ebf", @"C:\Projects\beam2.ebf" });

// Work with files
var design = await fileManager.Launcher.Client.PullBeamDesignerAsync("beam1");
// Modify and push...

// Open more files (existing files are closed by default)
await fileManager.OpenFiles(new[] { @"C:\Projects\beam3.ebf" });

Initialization

Always use the static Initialize method:

// Correct
var fileManager = await ErikssonBeamFileManager.Initialize(args);

// Incorrect - don't use constructor directly
// var fileManager = new ErikssonBeamFileManager(args);  // Not supported

Opening Files

Basic File Opening

await fileManager.OpenFiles(new[]
{
    @"C:\Projects\beam1.ebf",
    @"C:\Projects\beam2.ebf"
});

Keeping Previously Opened Files

By default, opening files closes any previously opened files. To keep them:

// Open initial files
await fileManager.OpenFiles(new[] { @"C:\Projects\beam1.ebf" });

// Add more files while keeping beam1.ebf open
await fileManager.OpenFiles(
    new[] { @"C:\Projects\beam2.ebf" },
    keepOpenedFiles: true
);

Creating Files

Create new blank project files:

// Create new files (won't open them)
await fileManager.CreateFiles(new[]
{
    @"C:\Projects\new1.ebf",
    @"C:\Projects\new2.ebf"
});

// Then open them if needed
await fileManager.OpenFiles(new[] { @"C:\Projects\new1.ebf" });

Lifecycle Behavior

The FileManager automatically handles Eriksson Beam restarts:

  1. When OpenFiles is called, it may restart Eriksson Beam
  2. Old Launcher and Client references become invalid
  3. New references are created automatically

This is why you must always access through the FileManager:

// Safe pattern
using var fileManager = await ErikssonBeamFileManager.Initialize(args);

await fileManager.OpenFiles(files1);
var design1 = await fileManager.Launcher.Client.PullBeamDesignerAsync();

await fileManager.OpenFiles(files2);  // May restart Eriksson Beam
var design2 = await fileManager.Launcher.Client.PullBeamDesignerAsync();  // Still works

Complete Example

using System;
using System.IO;
using System.Threading.Tasks;
using ErikssonBeam.API.BeamClient;

class BatchFileProcessor
{
    static async Task ProcessAllFilesInDirectory(string directory)
    {
        var files = Directory.GetFiles(directory, "*.ebf");

        if (files.Length == 0)
        {
            Console.WriteLine("No .ebf files found");
            return;
        }

        var args = new ErikssonBeamLauncherArgs
        {
            LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
            ExecutablePath = @"C:\Program Files\Eriksson Software\Eriksson Beam\ErikssonBeam.exe",
            FilesToOpen = Array.Empty<string>()
        };

        using var fileManager = await ErikssonBeamFileManager.Initialize(args);

        // Process files in batches of 5
        const int batchSize = 5;

        for (int i = 0; i < files.Length; i += batchSize)
        {
            var batch = files.Skip(i).Take(batchSize).ToArray();
            Console.WriteLine($"Processing batch {i / batchSize + 1}...");

            await fileManager.OpenFiles(batch);

            foreach (var file in batch)
            {
                var fileName = Path.GetFileNameWithoutExtension(file);

                try
                {
                    var design = await fileManager.Launcher.Client.PullBeamDesignerAsync(fileName);

                    // Update timestamp
                    design.DesignCriteria.ProjectInformation.Date = DateTime.Now;

                    await fileManager.Launcher.Client.PushBeamDesignerAsync(fileName, design);
                    await fileManager.Launcher.Client.SaveProject(fileName, file, true);

                    Console.WriteLine($"  Processed: {fileName}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"  Error processing {fileName}: {ex.Message}");
                }
            }
        }

        Console.WriteLine($"Completed processing {files.Length} files");
    }
}

Error Handling

try
{
    using var fileManager = await ErikssonBeamFileManager.Initialize(args);
    await fileManager.OpenFiles(files);
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"File not found: {ex.FileName}");
}
catch (ErikssonBeamNotRunningException ex)
{
    Console.WriteLine($"Failed to start Eriksson Beam: {ex.Message}");
}

Configuration Notes

Some ErikssonBeamLauncherArgs properties behave differently with FileManager:

PropertyFileManager Behavior
CloseErikssonBeamOnClientDisconnectIgnored - FileManager manages lifecycle
FilesToOpenInitial files to open (can be empty)
ExecutablePathRequired - Path to ErikssonBeam.exe
LicenseKeyRequired - API authorization key

See Also