---
title: Extend meta-models
slug: commerce-connect-14/docs/extending-meta-models
docTags: 
createdAt: 2026-07-23T10:25:32.050Z
---

You can extend meta-models through the use of Modules, which is part of the meta-model that provides the main entry point in the client for extensibility objects. Install modules in the system and activate them from the meta-class.

A module consists of the following:

- A module manifest. Defines information about the module and references to module the configuration.
- A module configuration. The .NET class that implemented the IModuleConfigurator interface.

The Module Manager loads and calls the Module Configurator methods when a module is activated, deactivated, installed or uninstalled. Each module should implement the Module Configurator.

:::hint{type="info"}
**Note**
You can modify a meta-model only in Design mode. See the MetaClassManager class section.
:::

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

## Default modules

The following modules are default: **Change Tracking**, **History** and **Localization**.

### Change Tracking

Change Tracking adds new fields to a meta-class and registers the user and the date and time of modification. After activation, the Change Tracking module adds these meta-fields:

- **Created**. Updates this field when a new meta-object is created.
- **Modified**. Updates this field when a meta-object is modified.
- **CreatorId**. Copies the current user meta-information from DataContext to this field when a new meta-object is created.
- **ModifierId**. Copies the current user meta-information from DataContext to this field when a meta-object is modified.

To get the module manifest, call the CreateModuleManifest of the ChangeTrackingManager class.

### History

**History** saves meta-object modifications to the history meta-class. After activation, the History module creates a meta-class named \[MetaClassName]\\\_History, and creates a copy of the entity object if the selected field is modified. The \[MetaClassName]\\\_History meta-class has an ObjectId field that has the original primary key value.

- Call CreateModuleManifest of the HistoryManager class to get the module manifest.
- Call SetSelectedFields of the HistoryManager class, passing the meta-class, to set the collection of selected fields.
- Call GetSelectedFields of the HistoryManager class, passing the meta-class, to get the collection of selected fields.

You can read the history of the entity object from the \[MetaClassName]\_History meta-class.

### Localization

The **Localization** module localizes field values.

Do the following to define available languages after installation:

- Call GetInstalledLanguages of the LocalizationManager class to get installed languages.
- Call InstallLanguage of the LocalizationManager class passing the culture info Name, to install a new language.
- Call UninstallLanguage of the LocalizationManager class passing the culture info Name, to uninstall a language.

After activation, define the localizable field. The localization module creates a new field named \[FieldName]\_\[ThreeLetterWindowsLanguageName], which reads or saves localizable values. If the value is null, you should use the original field to get a value. When you add a new language, the localization module automatically creates new fields.

- Call GetLocalizableFields of the LocalizationManager to get localizable fields.
- Call ActivateFieldLocalization of the LocalizationManager, passing the meta-class and meta-field, to activate field localization.
- Call DeactivateFieldLocalization of the LocalizationManager, passing meta-class and meta-field, to deactivate field localization.

## Install a module

- To install a new module, call Install of the ModuleManager class, passing the module manifest and attributes.

## Activate a module

- To activate a module in the meta-class, call Activate of the ModuleManager class, passing the module manifest and meta-class.

## Deactivate a module

- To deactivate a module, call Deactivate of the ModuleManager class, passing the module manifest and meta-class.

## Uninstall a module

- To uninstall a module, call Uninstall of the ModuleManager class, passing the module manifest.
