Add(Selection: IDimSelection): IMsTransformObject;
Add(Selection: Prognoz.Platform.Interop.Dimension.IDimSelection): Prognoz.Platform.Interop.Ms.IMsTransformObject;
Selection. Added selection.
The AddSelection method adds selection to the collection.
To add object to the collection, use the IMsTransformObjectList.Add method.
Executing the example requires that the repository contains a modeling container with the MS identifier containing a metamodel with the META_OBJLIST identifier and models with the DEFAULT_MODEL, MODEL_LINEAR identifiers. The repository must also contain the MDM dictionary with the MDM_DICT_OL identifier located out of the MDM repository.
Add links to the Dimensions, Metabase, Ms system assemblies.
Sub UserProc;
Var
mb: IMetabase;
msKey: Integer;
pMetaModel: IMsMetaModel;
pDimInstance: IDimInstance;
pSelection: IDimSelection;
paramMeta: IMsModelParam;
params: IMsModelParams;
calcChain: IMsCalculationChainEntries;
branch: IMsCalculationChainBranch;
cas: IMsBranchCase;
model: IMsModel;
CondEx: IMsBranchConditionExpression;
desc: IMetabaseObjectDescriptor;
trObj: IMsTransformObject;
Begin
// Get current repository
mb := MetabaseClass.Active;
// Get modelling container key
msKey := mb.GetObjectKeyById("MS");
// Get metamodel
pMetaModel := mb.ItemByIdNamespace("META_OBJLIST", msKey).Edit As IMsMetaModel;
// Get metamodel parameters collection
params := pMetaModel.Params;
// Clear collection
params.Clear;
// Add a new parameter
paramMeta := params.Add;
// Set parameter name
paramMeta.Name := "COUNTRY";
// Get MDM dictionary
desc := mb.ItemById("MDM_DICT_OL");
// Specify that dictionary values determine parameter values
paramMeta.LinkedObject := desc.Bind;
// Get metamodel calculation chain
calcChain := pMetaModel.CalculationChain;
// Clear calculation chain
calcChain.Clear;
// Create a condition in calculation chain
branch := calcChain.AddBranch("Condition");
// Get the model
model := mb.ItemByIdNamespace("DEFAULT_MODEL", msKey).Bind As IMsModel;
// Specify that this model is calculated if any condition branch is not executed
branch.DefaultContents.AddModel(model);
// Determine cycle parameter
branch.Parameter := paramMeta;
// Add condition branch
cas := branch.CaseList.Add;
// Set model which will be calculated on executing this condition branch
model := mb.ItemByIdNamespace("MODEL_LINEAR", msKey).Bind As IMsModel;
cas.Contents.AddModel(model);
// Add condition to calculate branch
CondEx := cas.Conditions.Add(MsBranchConditionType.Expression) As IMsBranchConditionExpression;
// Get MDM dictionary instance
pDimInstance := desc.Open(Null) As IDimInstance;
// Create a selection in this dictionary
pSelection := pDimInstance.CreateSelection;
// Select element
pSelection.SelectElement(1, False);
//Add MDM dictionary selection to the collection of objects used to calculate condition branch
trObj := condex.Transform.ObjectList.AddSelection(pSelection);
// Specify branch calculation condition
condex.Expression.AsString := "{COUNTRY}=@__" + trObj.Key.ToString;
// Save metamodel
(pMetaModel As IMetabaseObject).Save;
End Sub UserProc;
After executing the example the parameter which value is determined by the MDM_DICT_OL dictionary element is created in the metamodel. The cycle depending on this parameter is also added to the metamodel: if parameter value matches the second dictionary element, the MODEL_LINEAR is calculated, otherwise the DEFAULT_MODEL model is calculated.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
msKey: uinteger;
pMetaModel: IMsMetaModel;
pDimInstance: IDimInstance;
pSelection: IDimSelection;
paramMeta: IMsModelParam;
paramsMeta: IMsModelParams;
calcChain: IMsCalculationChainEntries;
branch: IMsCalculationChainBranch;
cas: IMsBranchCase;
model: IMsModel;
CondEx: IMsBranchConditionExpression;
desc: IMetabaseObjectDescriptor;
trObj: IMsTransformObject;
Begin
// Get current repository
mb := Params.Metabase;
// Get modelling container key
msKey := mb.GetObjectKeyById("MS");
// Get metamodel
pMetaModel := mb.ItemByIdNamespace["META_OBJLIST", msKey].Edit() As IMsMetaModel;
// Get metamodel parameters collection
paramsMeta := pMetaModel.Params;
// Clear collection
paramsMeta.Clear();
// Add a new parameter
paramMeta := paramsMeta.Add();
// Set parameter name
paramMeta.Name := "COUNTRY";
// Get MDM dictionary
desc := mb.ItemById["MDM_DICT_OL"];
// Specify that dictionary values determine parameter values
paramMeta.LinkedObject := desc.Bind();
// Get metamodel calculation chain
calcChain := pMetaModel.CalculationChain;
// Clear calculation chain
calcChain.Clear();
// Create a condition in calculation chain
branch := calcChain.AddBranch("Condition");
// Get the model
model := mb.ItemByIdNamespace["DEFAULT_MODEL", msKey].Bind() As IMsModel;
// Specify that this model is calculated if any condition branch is not executed
branch.DefaultContents.AddModel(model);
// Determine cycle parameter
branch.Parameter := paramMeta;
// Add condition branch
cas := branch.CaseList.Add();
// Set model which will be calculated on executing this condition branch
model := mb.ItemByIdNamespace["MODEL_LINEAR", msKey].Bind() As IMsModel;
cas.Contents.AddModel(model);
// Add condition to calculate branch
CondEx := cas.Conditions.Add(MsBranchConditionType.mbctExpression) As IMsBranchConditionExpression;
// Get MDM dictionary instance
pDimInstance := desc.Open(Null) As IDimInstance;
// Create a selection in this dictionary
pSelection := pDimInstance.CreateSelection();
// Select element
pSelection.SelectElement(1, False);
//Add MDM dictionary selection to the collection of objects used to calculate condition branch
trObj := condex.Transform.ObjectList.AddSelection(pSelection);
// Specify branch calculation condition
condex.Expression.AsString := "{COUNTRY}=@__" + trObj.Key.ToString();
// Save metamodel
(pMetaModel As IMetabaseObject).Save();
End Sub;
See also: