Creating an Application to Load Your Meta Data Model
This section describes example code that shows you how you can create an application to load your meta data model into the MDS repository.
In this example each Create call is treated as a separate statement.
Installed in the sample folder is an example file which shows how all model data can be coded in an array and a generic program which loops through the array to use Create to create the model, class, property and relationship descriptions.
HRESULT CreateAutoWorldModel()
{
HRESULT result;
CMetaAIM model;
CMetaClassDesc *AutoCorpClass = NULL;
CMetaClassDesc *AutoDevisionClass = NULL;
CMetaClassDesc *AutoClass = NULL;
CMetaClassDesc *AutoExClass = NULL;
CMetaClassDesc *BaseTruckClass = NULL;
CMetaClassDesc *TruckClass = NULL;
CMetaClassDesc *SportUteClass = NULL;
CMetaClassDesc *VanClass = NULL;
CMetaPropertyDesc *pProp = NULL;
CMetaRelationshipDesc *pCorpHasDivRel = NULL;
CMetaRelationshipDesc *pDivMakesAutosRel = NULL;
CMetaRelationshipDesc *pDivMakesTrucksRel = NULL;
MetaObjectIDVector RelsToProp;
MetaObjectIDVector superClasses;
result = model.CreateMDSModel(
NMAUTOWORLD, // Name
_T("Model for Auto Industry"), //Description
MODELGUID_AW // GUID
);
if (SUCCEEDED(result))
{
// Create Auto Class Description
result = model.CreateMDSClassDesc2(
AutoClass, // return object
NMAUTO, //Name
_T("Class of Autos"), //Description
MD_UNIQUE, // UniqueNamesFlag
CLSGUID_Auto, // GUID
NULLLOID, // use default owner
NULLLOID, // use default security profile
false , // a root class
false, // abstract class
superClasses
);
}
// Create DivisionMakesAutos Relationship Description
if (SUCCEEDED(result))
{
result = model.CreateMDSRelationshipDesc(
pDivMakesAutosRel, // Relationship object
NMDIVMAKESAUTOS, //Name
_T("Relationship that links autos to divisions"), //Description
AutoDevisionClass->GetObjectID(), // Orig Classid
AutoClass->GetObjectID(), // Dest Classid
MD_NULL, // UniqueNames Flag
MD_PROPDEL, // Propagate Delete Flag
RELGUID_DivMakesAutos, // GUID
NULLLOID, // use default owner
NULLLOID // use default security profile
);
}
if (AutoDevisionClass)
delete AutoDevisionClass;
if (AutoClass)
delete AutoClass;
if (pProp)
delete pProp;
if (pDivMakesAutosRel)
delete pDivMakesAutosRel;
return (result);
}