SetStub(pStub: IVariableStub);
SetStub(pStub: Prognoz.Platform.Interop.Cubes.IVariableStub);
pStub. Источник данных, содержащий ряд, проверяемый на пустоту.
Метод SetStub устанавливает источник данных, который содержит ряд, проверяемый на пустоту.
Для получения среза, соответствующего проверяемому ряду используйте свойство IMsBranchConditionNotEmpty.Slice.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». Данный контейнер должен содержать метамодель с идентификатором «METAMODEL_BRANCH» и модели с идентификаторами «MODEL_LINEAR» и «MODEL_TSLS».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
MetaModel: IMsMetaModel;
Chain, DefaultContents: IMsCalculationChainEntries;
Branch: IMsCalculationChainBranch;
Case_1, Case_default: IMsModel;
CaseList: IMsBranchCaseList;
CaseItem: IMsBranchCase;
BranchConditions: IMsBranchConditions;
ConditionNotEmpty: IMsBranchConditionNotEmpty;
Transform: IMsFormulaTransform;
Output: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем метамодель
MetaModel := mb.ItemByIdNamespace("METAMODEL_BRANCH", MsKey).Edit As IMsMetaModel;
// Получаем цепочку расчета метамодели
Chain := MetaModel.CalculationChain;
// Очищаем цепочку расчета метамодели
Chain.Clear;
// Создаем вершину условия
Branch := Chain.AddBranch("Условие");
// Получаем цепочку расчета по умолчанию, которая рассчитывается,
// если не выполнилась ни одна ветка условия
DefaultContents := Branch.DefaultContents;
// Получаем модель «MODEL_LINEAR»
Case_default := mb.ItemByIdNamespace("MODEL_LINEAR", MsKey).Bind As IMsModel;
// Добавляем модель «MODEL_LINEAR» в цепочку расчета по умолчанию
DefaultContents.AddModel(Case_default);
// Получаем коллекцию веток условия
CaseList := Branch.CaseList;
// Добавляем ветку условия
CaseItem := CaseList.Add;
// Получаем модель «MODEL_TSLS»
Case_1 := mb.ItemByIdNamespace("MODEL_TSLS", MsKey).Bind As IMsModel;
// Указываем, что данная модель должна быть рассчитана, если выполняется данная ветка условия
CaseItem.Contents.AddModel(Case_1);
// Получаем коллекцию условий расчета ветки
BranchConditions := CaseItem.Conditions;
// Добавляем условие расчета ветки: указанный ряд должен содержать данные
ConditionNotEmpty := BranchConditions.Add(MsBranchConditionType.NotEmpty) As IMsBranchConditionNotEmpty;
// Получаем моделируемую переменную в модели «MODEL_TSLS»
Transform := Case_1.Transform;
Output := Transform.Outputs.Item(0);
// Указываем, что источник данных моделируемой переменной
// содержит ряд, проверяемый на наличие данных
ConditionNotEmpty.SetStub(Output.VariableStub);
// Получаем срез данных, соответствующий ряду, который будет проверяться на наличие данных
Slice := ConditionNotEmpty.Slice;
// Устанавливаем отметку, аналогичную отметке моделируемой переменной
Slice.Selection := Output.Slices.Item(0).Selection;
// Сохраняем изменения
(MetaModel As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера в цепочке расчета метамодели будет создано условие: если моделируемая переменная модели «MODEL_TSLS» не является пустой, то будет рассчитана данная модель, иначе - модель «MODEL_LINEAR».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
MetaModel: IMsMetaModel;
Chain, DefaultContents: IMsCalculationChainEntries;
Branch: IMsCalculationChainBranch;
Case_1, Case_default: IMsModel;
CaseList: IMsBranchCaseList;
CaseItem: IMsBranchCase;
BranchConditions: IMsBranchConditions;
ConditionNotEmpty: IMsBranchConditionNotEmpty;
Transform: IMsFormulaTransform;
Output: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем контейнер моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем метамодель
MetaModel := mb.ItemByIdNamespace["METAMODEL_BRANCH", MsKey].Edit() As IMsMetaModel;
// Получаем цепочку расчета метамодели
Chain := MetaModel.CalculationChain;
// Очищаем цепочку расчета метамодели
Chain.Clear();
// Создаем вершину условия
Branch := Chain.AddBranch("Условие");
// Получаем цепочку расчета по умолчанию, которая рассчитывается,
// если не выполнилась ни одна ветка условия
DefaultContents := Branch.DefaultContents;
// Получаем модель «MODEL_LINEAR»
Case_default := mb.ItemByIdNamespace["MODEL_LINEAR", MsKey].Bind() As IMsModel;
// Добавляем модель «MODEL_LINEAR» в цепочку расчета по умолчанию
DefaultContents.AddModel(Case_default);
// Получаем коллекцию веток условия
CaseList := Branch.CaseList;
// Добавляем ветку условия
CaseItem := CaseList.Add();
// Получаем модель «MODEL_TSLS»
Case_1 := mb.ItemByIdNamespace["MODEL_TSLS", MsKey].Bind() As IMsModel;
// Указываем, что данная модель должна быть рассчитана, если выполняется данная ветка условия
CaseItem.Contents.AddModel(Case_1);
// Получаем коллекцию условий расчета ветки
BranchConditions := CaseItem.Conditions;
// Добавляем условие расчета ветки: указанный ряд должен содержать данные
ConditionNotEmpty := BranchConditions.Add(MsBranchConditionType.mbctNotEmpty) As IMsBranchConditionNotEmpty;
// Получаем моделируемую переменную в модели «MODEL_TSLS»
Transform := Case_1.Transform;
Output := Transform.Outputs.Item[0];
// Указываем, что источник данных моделируемой переменной
// содержит ряд, проверяемый на наличие данных
ConditionNotEmpty.SetStub(Output.VariableStub);
// Получаем срез данных, соответствующий ряду, который будет проверяться на наличие данных
Slice := ConditionNotEmpty.Slice;
// Устанавливаем отметку, аналогичную отметке моделируемой переменной
Slice.Selection := Output.Slices.Item[0].Selection;
// Сохраняем изменения
(MetaModel As IMetabaseObject).Save();
End Sub;
См. также: