Type: MsBranchConditionType;
Свойство Type возвращает тип условия.
Для выполнения примера предполагается наличие в репозитории контейнера моделирования с идентификатором «CONT_MODEL». В данном контейнере должна содержаться метамодель с идентификатором «METAMODEL» и модели с идентификаторами «DEFAULT», «MODEL_1» и «MODEL_2». Также в репозитории должен находиться справочник с идентификатором «D_SOURCE», содержащий группу элементов с идентификатором «DICT_GROUP».
Sub Main;
Var
pMetaModel: IMsMetaModel;
pBranch: IMsCalculationChainBranch;
pBranchConditions: IMsBranchConditions;
pCase: IMsBranchCase;
pCaseList: IMsBranchCaseList;
Chain, pDefaultContents: IMsCalculationChainEntries;
pCondSelect: IMsBranchConditionInSelection;
pCondGroup: IMsBranchConditionInGroup;
pCondScalar: IMsBranchConditionScalar;
Case_1, Case_2, Case_default: IMsModel;
mb: IMetabase;
pModelSpace: IMetabaseObjectDescriptor;
param:IMsModelParam;
pDimInstance: IDimInstance;
pSelection: IDimSelection;
params:IMsModelParams;
Begin
mb := MetabaseClass.Active;
pModelSpace := mb.ItemById("CONT_MODEL");
pMetaModel := mb.ItemByIdNamespace("METAMODEL", pModelSpace.Key).Edit As IMsMetaModel;
Chain := pMetaModel.CalculationChain;
Chain.Clear;
// Задаем параметр метамодели
params:=pMetaModel.Params;
params.Clear;
param:=params.Add;
param.DataType := DbDataType.Integer;
param.DefaultValue := 1;
param.Hidden := True;
param.Id := "T_ID";
param.Name := "ID";
param.LinkedObject := mb.ItemById("D_SOURCE");
// Создаем вершину условия
pBranch := Chain.AddBranch("Branch");
pBranch.Parameter := Param;
pDefaultContents := pBranch.DefaultContents;
Case_default := mb.ItemByIdNamespace("DEFAULT", pModelSpace.Key).Bind As IMsModel;
pDefaultContents.AddModel(Case_default);
// Создаем первую ветку условия
pCaseList := pBranch.CaseList;
pCase := pCaseList.Add;
Case_1 := mb.ItemByIdNamespace("MODEL_1", pModelSpace.Key).Bind As IMsModel;
pCase.Contents.AddModel(Case_1);
pBranchConditions := pCase.Conditions;
pCondScalar := pBranchConditions.Add(MsBranchConditionType.Scalar) As IMsBranchConditionScalar;
pCondScalar.ComparisonOperator := MsBranchConditionComparisonOperator.Equal;
pCondScalar.Value := 6;
pCondGroup := pBranchConditions.Add(MsBranchConditionType.InGroup) As IMsBranchConditionInGroup;
pDimInstance := mb.ItemById("D_SOURCE").Open(Null) As IDimInstance;
pCondGroup.ElementGroup := mb.ItemByIdNamespace("DICT_GROUP", pDimInstance.Key).Bind As IDimElementGroup;
pCondGroup.Negation := False;
pCondGroup.ConditionJoin := OrmLogicalOperator.Or_;
// Создаем вторую ветку условия
pCase := pCaseList.Add;
Case_2 := mb.ItemByIdNamespace("MODEL_2", pModelSpace.Key).Bind As IMsModel;
pCase.Contents.AddModel(Case_2);
pBranchConditions := pCase.Conditions;
pCondSelect := pBranchConditions.Add(MsBranchConditionType.InSelection) As IMsBranchConditionInSelection;
pSelection := pDimInstance.CreateSelection;
pSelection.DeselectAll;
pSelection.SelectElement(2, False);
pCondSelect.Negation := False;
pCondSelect.Selection := pSelection;
(pMetaModel As IMetabaseObject).Save;
End Sub Main;
После выполнения примера для метамодели будет задан параметр, ссылающийся на справочник, и условие, основанное на значении данного параметра. Условие состоит в следующем: если значение параметра равно шести или входит в группу элементов справочника, тогда будет рассчитываться модель «MODEL_1»; если значение параметра входит в отметку справочника, то будет рассчитываться модель «MODEL_2»; если ни одно из данных условий не выполняется, то будет рассчитываться модель «DEFAULT».
См. также: