MetaType class
MetaType includes common types, and you can extend it with UI-friendly types. For example, instead of using one type of string, Business Meta-Model has Short String, Long String, HTML, Email, Phone and number. You can create a new MetaType based on system type or create a custom one.
Business Foundation (BF) lets you use a number of different meta types for your .NET applications. You can use the included meta-types or implement a custom meta-type.
Default meta-types
Call the RegisteredTypes property of the MetaClassManager class to get all registered meta-types. The following table shows ready-to-use BF meta-types in Name (system type) – description.
- Guid (Guid) – A globally unique identifier (GUID).
- DateTime (DateTime) – An instant in time, typically expressed as a date and time of day.
- Date (DateTime) – An instant in date.
- Integer (Integer) – A 32-bit signed integer.
- Float (Double) – A double-precision floating-point number.
- Currency (Currency) – A currency number.
- CheckboxBoolean (Boolean) – A Boolean value with check box.
- DropDownBoolean (Boolean) – A Boolean value with drop-down.
- Text (String) – Text of fixed length. Maximum length is 4096 chars.
- EMail (String) – An e-mail string.
- Url (String) – A URL string.
- LongText (String) – A long text.
- Html (String) – An HTML string.
- File (File) – A file (name, length, content type, stream).
- Image (File) – An image file.
- IntegerPercent (Integer) – A 32-bit signed integer percent.
- FloatPercent (Double) – A double-precision floating-point percent.
- Duration (Integer) – A 32-bit signed integer duration value.
Create a meta type based on system type
You can create a new meta-type based on system type. You can find a complete list of system types in the McDataType enumerators.
To create a meta-type, such as Geolocation based on the String system type, open the edit scope and add a new MetaFieldType object to the MetaClassManager.RegisteredTypes collection.
The following example creates a Geolocation meta-type based on the String system type:
// Open Meta model edit scope
using (MetaClassManagerEditScope scope = DataContext.Current.MetaModel.BeginEdit())
{
// Add a new meta type
MetaFieldType geoLocation = new MetaFieldType("Geolocation", "Geolocation", McDataType.String);
DataContext.Current.MetaModel.RegisteredTypes.Add(geoLocation);
// Save Changes
scope.SaveChanges();
}Or, add a new record to the mcmd_MetaFieldType table and restart the application.
INSERT INTO mcmd_MetaFieldType ([Name], [FriendlyName], [McDataType])
VALUES ('Geolocation', 'Geolocation', 6)After registration, you can add a geolocation field to the meta-class. Using the meta-type name, you can load a new geolocation view and edit the UI control.
Create a custom meta type
When implementing a custom meta-type, you need to create the Meta-field installer and Meta-field property binder. When you create a meta-field, BF calls the meta-field installer to process meta-field into SQL columns. When you load an entity object, BF calls the meta-object property binder to convert values from an SQL column to a meta-field value.
To create a custom Meta-field installer, you create a class that implements the IMetaFieldInstaller interface, and implement the following methods.
IMetaFieldInstaller interface methods
- AssignDataSource – Create a new columns in the SQL database from meta-field
- AssignValidators – Assign default validators
- UpdateDataSource – Update SQL columns from updated meta-field
- UpdateValidators – Update validators
- RemoveDataSource – Remove columns from SQL database
- RemoveValidators – Remove validators
To create a custom Meta-object property binder, create a class that implements the IMetaObjectPropertyBinder interface, and implement the following methods.
IMetaObjectPropertyBinder interface methods
- PreLoad – Load value from SQL row and save to meta field property.
- PostLoad – Fill properties by other.
- PreSave – Save value to SQL row.
- PostSave – Fill properties by other.
- Delete – Clean up if meta field is removing.
- InitTableConfig – Initialize additional SQL relations. You should register the custom meta-field installer and meta-object property binder in the appsettings.json Commerce section.
"Commerce": {
"MetaObjectTypeOptions": {
"Types": [{
"Name": "CustomType",
"Installer": "",
"Binder": ""
}]
}
}