IMsBranchConditionExpression.Transform

Синтаксис Fore

Transform: IMsFormulaTransform;

Синтаксис Fore.NET

Transform: Prognoz.Platform.Interop.Ms.IMsFormulaTransform;

Описание

Свойство Transform возвращает параметры настройки сложного условия расчёта.

Комментарии

По умолчанию параметры содержат одну формулу с годовой динамикой. Для её получения используйте свойство IMsFormulaTransform.FormulaItem. После формирования формулы она будет автоматически разобрана и установлена в свойство IMsBranchConditionExpression.Expression.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», в котором содержатся модели с идентификаторами «USER_MODEL», «DEFAULT_MODEL» и метамодель с идентификатором «USER_META_MODEL». Метамодель должна содержать целочисленный параметр с наименованием «indicator_param».

Добавьте ссылки на системные сборки «Dimensions», «Metabase», «Ms».

Sub UserTransformation;
Var
    pMetabase: IMetabase;
    pMSKey: Integer;
    pMeta: IMsMetaModel;
    pBranch: IMsCalculationChainBranch;
    pModel_a, pModel_b: IMsModel;
    pCase: IMsBranchCase;
    pCond: IMsBranchConditionExpression;
    pTransf: IMsFormulaTransform;
    pMethod: IMsDeterministicTransform;
    
Begin
    pMetabase := MetabaseClass.Active;
    //Получаем ключ контейнера моделирования
    pMSKey := pMetabase.GetObjectKeyById("MODEL_SPACE");
    // Получаем метамодель
    pMeta := pMetabase.ItemByIdNamespace("USER_META_MODEL", pMSKey).Edit As IMsMetaModel;
    // Очищаем цепочку расчёта метамодели
    pMeta.CalculationChain.Clear;
    // Создаем условие расчёта метамодели
    pBranch := pMeta.CalculationChain.AddBranch("Условие расчёта");
    // Задаем календарную динамику условия
    pBranch.Level := DimCalendarLevel.Year;
    // Получаем модель «DEFAULT_MODEL»
    pModel_a := pMetabase.ItemByIdNamespace("DEFAULT_MODEL", pMSKey).Bind As IMsModel;
    // Добавляем модель в условие
    pBranch.DefaultContents.AddModel(pModel_a);
    // Получаем модель «USER_MODEL»
    pModel_b := pMetabase.ItemByIdNamespace("USER_MODEL", pMSKey).Bind As IMsModel;
    // Создаем новую ветку условия
    pCase := pBranch.CaseList.Add;
    // Добавляем модель «USER_MODEL» в новую ветку
    pCase.Contents.AddModel(pModel_b);
    // Создаем условие расчёта ветки
    pCond := pCase.Conditions.Add(MsBranchConditionType.Expression) As IMsBranchConditionExpression;
    pTransf := pCond.Transform;
    pMethod := pTransf.FormulaItem(0).Method As IMsDeterministicTransform;
    pMethod.Expression.AsString := "{indicator_param[t]} = 3";
    // Сохраняем метамодель 
    (pMeta As IMetabaseObject).Save;
End Sub UserTransformation;

После выполнения примера в метамодель будет добавлено условие расчета: значение параметра метамодели должно быть равно трем. При расчете задачи трансформации будет проверяться условие: если оно выполняется, то рассчитывается модель «USER_MODEL», если не выполняется - модель «DEFAULT_MODEL».

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    pMetabase: IMetabase;
    pMSKey: uinteger;
    pMeta: IMsMetaModel;
    pBranch: IMsCalculationChainBranch;
    pModel_a, pModel_b: IMsModel;
    pCase: IMsBranchCase;
    pCond: IMsBranchConditionExpression;
    pTransf: IMsFormulaTransform;
    pMethod: IMsDeterministicTransform;
Begin
    pMetabase := Params.Metabase;
    //Получаем ключ контейнера моделирования
    pMSKey := pMetabase.GetObjectKeyById("MODEL_SPACE");
    // Получаем метамодель
    pMeta := pMetabase.ItemByIdNamespace["USER_META_MODEL", pMSKey].Edit() As IMsMetaModel;
    // Очищаем цепочку расчёта метамодели
    pMeta.CalculationChain.Clear();
    // Создаем условие расчёта метамодели
    pBranch := pMeta.CalculationChain.AddBranch("Условие расчёта");
    // Задаем календарную динамику условия
    pBranch.Level := DimCalendarLevel.dclYear;
    // Получаем модель «DEFAULT_MODEL»
    pModel_a := pMetabase.ItemByIdNamespace["DEFAULT_MODEL", pMSKey].Bind() As IMsModel;
    // Добавляем модель в условие
    pBranch.DefaultContents.AddModel(pModel_a);
    // Получаем модель «USER_MODEL»
    pModel_b := pMetabase.ItemByIdNamespace["USER_MODEL", pMSKey].Bind() As IMsModel;
    // Создаем новую ветку условия
    pCase := pBranch.CaseList.Add();
    // Добавляем модель «USER_MODEL» в новую ветку
    pCase.Contents.AddModel(pModel_b);
    // Создаем условие расчёта ветки
    pCond := pCase.Conditions.Add(MsBranchConditionType.mbctExpression) As IMsBranchConditionExpression;
    pTransf := pCond.Transform;
    pMethod := pTransf.FormulaItem[0].Method As IMsDeterministicTransform;
    pMethod.Expression.AsString := "{indicator_param[t]} = 3";
    // Сохраняем метамодель 
    (pMeta As IMetabaseObject).Save();
End Sub;

См. также:

IMsBranchConditionExpression