Eriksson Beam API
Search Results for

    Show / Hide Table of Contents

    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:

    Property FileManager Behavior
    CloseErikssonBeamOnClientDisconnect Ignored - FileManager manages lifecycle
    FilesToOpen Initial files to open (can be empty)
    ExecutablePath Required - Path to ErikssonBeam.exe
    LicenseKey Required - API authorization key

    See Also

    • ErikssonBeamLauncher - Single-session launching
    • Project Management - File operations
    • Best Practices - Batch processing tips
    • Edit this page
    In this article
    Back to top Generated by DocFX