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
LauncherandClientreferences 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:
- When
OpenFilesis called, it may restart Eriksson Beam - Old
LauncherandClientreferences become invalid - 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