HomeGuidesAPI Reference
Submit Documentation FeedbackJoin Developer CommunityOptimizely GitHubOptimizely NuGetLog In

Exporting and importing meta-models

This topic describes how to export and import meta-models from and to Business Foundation.

You can export and import meta-models. You also can compare two meta-models, which is useful during these operations.

The following classes are available in the Mediachase.BusinessFoundation.Data.Meta.Schema namespace.

Exporting meta-models

Export a meta-model to a file with the MetaModelGenerator class. By default, MetaModelGenerator exports all elements; use the SelectedElements property of the MetaModelGenerator class to export custom elements.

Example: Exporting a meta-model to a file

// Create MetaModelGenerator
    MetaModelGenerator generator = new MetaModelGenerator();
    // Use generator.SelectedElements to export custom elements
    try
      {
        // Open DataContext
        DataContext.Current = new DataContext(connectionString);
        // Load Save Commands
        SchemaDocument schema = new SchemaDocument();
        schema.LoadDefault();
        generator.Schema = schema;
        // Load Save Commands
        XmlDocument xmlOutput = generator.Generate();
        xmlOutput.Save(filePath);
      }
    catch (Exception ex)
      {
      }

Comparing meta-models

Before you import a meta-model, you should compare meta-models and create synchronization commands. You can export and compare an existing meta-model with the one you are about to import before importing it.

Example: Compare two meta-models and create synchronization script

try
      {
        // Load Imported Meta-Model
        List<ModuleManifest> installedModules = new List<ModuleManifest>();
        XmlDocument xmlSrcMetaModel = new XmlDocument();
        xmlSrcMetaModel.Load(srcMetaModelPath);
    
        // Load Modules From Source Meta-Model
        foreach (XmlNode xmlManifestNode in
          xmlSrcMetaModel.SelectNode("//mediachase.businessFoundation.data.meta/description/moduleManifests/moduleManifest"))
          {
            ModuleManifest manifest = McXmlSerializer.GetObject<ModuleManifest>(xmlManifestNode.OuterXml);
            installedModules.Add(manifest);
          }
    
        // Load SchemaDocument
        SchemaDocument schema = new SchemaDocument();
        schema.LoadDefault(installedModules.ToArray());
    
        // Load Original Meta-model
        XmlDocument xmlDestMetaModel = new XmlDocument();
        xmlDestMetaModel.Load(destMetaModelPath);
    
        // Compare two Meta-models
        SyncCommand\[] syncCommands = MetaModelSync.FindModifications(schema, xmlSrcMetaModel, xmlDestMetaModel);
    
        // Save sync commands to file
        McXmlSerializer.SaveObjectToFile<SyncCommand\[\]>(outputSyncFilePath, syncCommands);
      }
    catch (Exception ex)
      {
      }

Importing meta-models

When importing a meta-model, follow these steps.

  1. Export the original meta-model.
  2. Compare it with the meta-model to be imported.
  3. Create synchronization commands (described in the previous section).
  4. Execute the synchronization commands.

Example: Loading and executing synchronization commands

try
      {
        // Open DataContext
        DataContext.Current = new DataContext(connectionString);
    
        // Load Sync Commands
        SchemaDocument schema = new SchemaDocument();
        schema.LoadDefault();
    
        // Load Sync Commands
        SyncCommand\[] syncCommands =
        McXmlSerializer.GetObjectFromFile<SyncCommand\[]>(filePath);
    
        // Apply Sync Command
        using (TransactionScope tran = DataContext.Current.BeginTransaction())
          {
            MetaModelSync.Execute(schema, syncCommands);
            tran.Commit();
          }
      }
    catch (Exception ex)
      {
      }

What’s Next