DMEEditor Examples

Initialize and Open DataSource

var editor = new DMEEditor();

// Add connection
var props = new ConnectionProperties
{
    ConnectionName = "MyDB",
    DatabaseType = DataSourceType.SqlLite,
    ConnectionString = "Data Source=./app.db"
};
editor.ConfigEditor.AddDataConnection(props);

// Open datasource
var state = editor.OpenDataSource("MyDB");
if (state != ConnectionState.Open)
    throw new Exception("Failed to open datasource");

// Get datasource
var ds = editor.GetDataSource("MyDB");
var entities = ds.GetEntitesList();

Query Data

// Get all records
var allData = ds.GetEntity("Customers", new List<AppFilter>());

// Filtered query
var filtered = ds.GetEntity("Customers", new List<AppFilter>
{
    new AppFilter { FieldName = "Country", Operator = "=", FilterValue = "USA" },
    new AppFilter { FieldName = "Status", Operator = "=", FilterValue = "Active" }
});

// Execute SQL
var result = ds.RunQuery("SELECT * FROM Orders WHERE Total > 1000");

ETL Examples

Simple Data Copy

var source = editor.GetDataSource("SourceDB");
var target = editor.GetDataSource("TargetDB");

source.Openconnection();
target.Openconnection();

var copier = new ETLDataCopier(editor);
var result = await copier.CopyDataAsync(
    source, "Customers",
    target, "Customers",
    progress: new Progress<PassedArgs>(p =>
        Console.WriteLine($"Progress: {p.Messege}")));

Console.WriteLine($"Copied {result.RecordsProcessed} records");

Field Mapping

var mapping = new Dictionary<string, string>
{
    ["OldName"] = "NewName",
    ["OldEmail"] = "Email",
    ["PhoneNumber"] = "Phone"
};

var entityCopy = new ETLEntityCopyHelper(editor);
var result = await entityCopy.CopyEntityAsync(
    source, "LegacyCustomers",
    target, "Customers",
    fieldMapping: mapping);

Data Import Examples

Basic Import

using var importer = new DataImportManager(editor);

importer.SourceDataSourceName = "ExternalCRM";
importer.SourceEntityName = "Contacts";
importer.DestDataSourceName = "MainDB";
importer.DestEntityName = "Customers";

// Configure
importer.LoadDestEntityStructure();
var result = await importer.RunImportAsync(
    progress: new Progress<PassedArgs>(p =>
        Console.WriteLine($"Importing: {p.Messege}")),
    token: CancellationToken.None,
    transformation: null,
    batchSize: 1000);

Console.WriteLine($"Imported {result.RecordsProcessed} records");

Import with Transformation

var transform = new DataImportTransformationHelper();
transform.AddFieldMapping("FirstName", "Name");
transform.AddFieldMapping("LastName", "Surname");
transform.AddComputedField("FullName", row => $"{row["FirstName"]} {row["LastName"]}");

var result = await importer.RunImportAsync(
    progress: progressReporter,
    token: CancellationToken.None,
    transformation: transform,
    batchSize: 500);

Field Mapping Examples

Create Entity Map

var (errInfo, mapping) = MappingManager.CreateEntityMap(
    editor,
    srcEntityName: "Contacts",
    srcDataSourceName: "ExternalCRM",
    destEntityName: "Customers",
    destDataSourceName: "MainDB");

if (errInfo.Flag == Errors.Ok)
{
    // Auto-match by convention
    MappingManager.AutoMapByConvention(mapping, NameMatchMode.Exact);

    // Manual adjustments
    mapping.EntityFields[0].FieldMapping.Add(new Mapping_rep_fields
    {
        FromFieldName = "Phone",
        ToFieldName = "PhoneNumber",
        ToFieldType = "string"
    });

    // Save
    MappingManager.SaveEntityMap(editor, mapping);
}

Apply Mapping

var mappedData = MappingManager.ApplyMap(
    editor,
    mapping,
    sourceData,
    destDataSource: "MainDB");

Default Values Examples

Configure Defaults

DefaultsManager.Initialize(editor);

// Set static default
DefaultsManager.SetDefaultValue("MainDB", "Customers", "Status", "Active");

// Set rule-based default
DefaultsManager.SetDefaultRule("MainDB", "Customers", "CreatedDate",
    "TODAY()");

// Set conditional default
DefaultsManager.SetDefaultRule("MainDB", "Customers", "Discount",
    "IF(Country='USA', 0.10, 0.05)");

// Save
DefaultsManager.SaveDefaults("MainDB");

Apply Defaults During Import

var config = new DataImportConfiguration
{
    ApplyDefaults = true,
    DefaultValueResolver = DefaultsManager.ResolveDefaultValue
};

importer.SetImportConfiguration(config);

Data Sync Examples

Basic Sync

var syncManager = new BeepSyncManager(editor);

var schema = new DataSyncSchema
{
    SourceDataSourceName = "SourceDB",
    DestinationDataSourceName = "TargetDB",
    SourceEntityName = "Customers",
    DestinationEntityName = "Customers",
    SourceSyncDataField = "CustomerId",
    DestinationSyncDataField = "CustomerId",
    SyncType = "Incremental",
    SyncDirection = "SourceToDestination"
};

// Add field mappings
schema.MappedFields.Add(new FieldSyncData
{
    SourceField = "Name",
    DestinationField = "CustomerName"
});

syncManager.AddSyncSchema(schema);
var result = await syncManager.SyncDataAsync(schema,
    progress: new Progress<PassedArgs>(p =>
        Console.WriteLine($"Syncing: {p.Messege}")));

Console.WriteLine($"Synced {result.RecordsProcessed} records");

Conflict Resolution

var config = new SyncConfig
{
    SourceConnection = "SourceDB",
    TargetConnection = "TargetDB",
    ConflictResolution = ConflictResolutionStrategy.Timestamp,
    EnableCDC = true,
    BatchSize = 1000
};

var result = await syncManager.ExecuteSync(config);

Forms Manager Examples

Setup Form with Master-Detail

var formsManager = new FormsManager(editor);

// Register master block
formsManager.RegisterBlock(
    blockName: "Orders",
    dataSourceName: "MyDB",
    entityName: "Orders",
    primaryKey: "OrderId");

// Register detail block
formsManager.RegisterBlock(
    blockName: "OrderLines",
    dataSourceName: "MyDB",
    entityName: "OrderLines",
    primaryKey: "LineId");

// Create master-detail relation
formsManager.CreateMasterDetailRelation(
    masterBlock: "Orders",
    detailBlock: "OrderLines",
    masterField: "OrderId",
    detailField: "OrderId");

// Open form
formsManager.OpenForm("OrderEntry");

Navigate and Edit

// Navigate records
formsManager.FirstRecord("Orders");
formsManager.NextRecord("Orders");
formsManager.PreviousRecord("Orders");
formsManager.LastRecord("Orders");

// Enter insert mode
formsManager.EnterInsert("Orders");
formsManager.SetFieldValue("Orders", "CustomerId", "CUST001");
formsManager.SetFieldValue("Orders", "OrderDate", DateTime.Now);

// Commit
var result = formsManager.Commit("Orders");
if (result.Flag != Errors.Ok)
    Console.WriteLine($"Error: {result.Message}");