IMsBranchConditionInSelection.ParameterAsSelection

Синтаксис Fore

ParameterAsSelection: IMsModelParam;

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

ParameterAsSelection: Prognoz.Platform.Interop.Ms.IMsModelParam;

Описание

Свойство ParameterAsSelection определяет параметр, задающий отметку.

Комментарии

Если одновременно заданы свойства ParameterAsSelection и IMsBranchConditionInSelection.Selection, то будет учитываться значение того свойства, которое задано последним.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащим метамодель с идентификатором «METAMODEL_BRANCH_PARAM» и модели с идентификаторами «MODEL_BRANCH_PARAM_SEL», «MODEL_BRANCH_PARAM_DEFAULT». Источником данных для контейнера моделирования должна быть база данных временных рядов, содержащая атрибут временных рядов с идентификатором «CITY». Данный атрибут должен являться ссылкой на справочник.

Добавьте ссылки на системные сборки: Cubes, Dal, Dimensions, Metabase, Ms, Rds, Transform.

Sub UserProc;
Var
    mb: IMetabase;
    MsObj, Dict: IMetabaseObjectDescriptor;
    pMetaModel: IMsMetaModel;
    Chain, pDefaultContents: IMsCalculationChainEntries;
    MetaParams: IMsModelParams;
    param1, param2: IMsModelParam;
    TSDB: IRubricator;
    Atrs: IMetaAttributes;
    pBranch: IMsCalculationChainBranch;
    Case_1, Case_default: IMsModel;
    pCase: IMsBranchCase;
    pCaseList: IMsBranchCaseList;
    pBranchConditions: IMsBranchConditions;
    pCondSel: IMsBranchConditionInSelection;
    pDimInstance: IDimInstance;
    pSelection: IDimSelection;
Begin
    // Получаем текущий репозиторий
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MS");
    // Получаем метамодель
    pMetaModel := mb.ItemByIdNamespace("METAMODEL_BRANCH_PARAM", MsObj.Key).Edit As IMsMetaModel;
    // Получаем базу данных временных рядов, используемую для хранения
    // данных контейнера моделирования
    TSDB := (MsObj.Bind As IMsModelSpace).Rubricator As IRubricator;
    // Получаем атрибуты временных рядов
    Atrs := TSDB.Facts.Attributes;
    // Получаем справочник, на который ссылается атрибут CITY
    Dict := Atrs.FindById("CITY").ValuesObject;
    pDimInstance := Dict.Open(NullAs IDimInstance;
    // Получаем и очищаем цепочку расчета метамодели
    Chain := pMetaModel.CalculationChain;
    Chain.Clear;
    // Получаем и очищаем параметры метамодели
    MetaParams := pMetaModel.Params;
    MetaParams.Clear;
    // Добавляем первый параметр, ссылающийся на справочник
    param1 := MetaParams.Add;
    param1.DataType := DbDataType.Integer;
    param1.Hidden := True;
    param1.Id := "P_CITY";
    param1.Name := "Город";
    param1.ParamType := TsParamType.Selection;
    // Указываем, что справочник, который будет определять значения параметра
    param1.LinkedObject := Dict;
    // Задаем отметку параметра 
    pSelection := pDimInstance.CreateSelection;
    pSelection.SelectElement(1False);
    Param1.DefaultValue := pSelection;
    // Добавляем второй параметр, ссылающийся на справочник
    param2 := MetaParams.Add;
    param2.DataType := DbDataType.Integer;
    param2.Hidden := True;
    param2.Id := "P_CITY_SEL";
    param2.Name := "Город (отметка)";
    param2.ParamType := TsParamType.Selection;
    // Указываем, что справочник, который будет определять значения параметра
    param2.LinkedObject := Dict;
    // Задаем отметку параметра 
    pSelection.DeselectAll;
    pSelection.SelectElement(2False);
    param2.DefaultValue := pSelection;
    // Создаем вершину условия
    pBranch := Chain.AddBranch("Условие");
    pBranch.Parameter := param1;
    // Создаем ветку, которая выполняется, если не выполнится ни одна другая ветка  
    pDefaultContents := pBranch.DefaultContents;
    // Указываем модель, которая будет рассчитана в данной ветке
    Case_default := mb.ItemByIdNamespace("MODEL_BRANCH_PARAM_DEFAULT", MsObj.Key).Bind As IMsModel;
    pDefaultContents.AddModel(Case_default);
    // Создаем первую ветку условия
    pCaseList := pBranch.CaseList;
    pCase := pCaseList.Add;
    // Указываем модель, которая будет рассчитана в данной ветке
    Case_1 := mb.ItemByIdNamespace("MODEL_BRANCH_PARAM_SEL", MsObj.Key).Bind As IMsModel;
    pCase.Contents.AddModel(Case_1);
    // Создаем условие расчета ветки
    pBranchConditions := pCase.Conditions;
    // Задаем тип условия расчета ветки: вхождение в отметку элементов
    pCondSel := pBranchConditions.Add(MsBranchConditionType.InSelection) As IMsBranchConditionInSelection;
    // Указываем, что условие управляется параметром, являющимся отметкой
    pCondSel.ParameterAsSelection := Param2;
    // Сохраняем метамодель
    (pMetaModel As IMetabaseObject).Save;
End Sub UserProc;

В результате выполнения примера в метамодель будет добавлено условие и два параметра. Оба параметра ссылаются на справочник. Условие состоит из двух веток. Первая ветка параметрическая и рассчитывается, если значение параметра входит в заданную отметку. Вторая ветка рассчитывается, если предыдущая ветка не была рассчитана.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Rds;
Imports Prognoz.Platform.Interop.Transform;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsObj, Dict: IMetabaseObjectDescriptor;
    pMetaModel: IMsMetaModel;
    Chain, pDefaultContents: IMsCalculationChainEntries;
    MetaParams: IMsModelParams;
    param1, param2: IMsModelParam;
    TSDB: IRubricator;
    Atrs: IMetaAttributes;
    pBranch: IMsCalculationChainBranch;
    Case_1, Case_default: IMsModel;
    pCase: IMsBranchCase;
    pCaseList: IMsBranchCaseList;
    pBranchConditions: IMsBranchConditions;
    pCondSel: IMsBranchConditionInSelection;
    pDimInstance: IDimInstance;
    pSelection: IDimSelection;
Begin
    // Получаем текущий репозиторий
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MS"];
    // Получаем метамодель
    pMetaModel := mb.ItemByIdNamespace["METAMODEL_BRANCH_PARAM", MsObj.Key].Edit() As IMsMetaModel;
    // Получаем базу данных временных рядов, используемую для хранения
    // данных контейнера моделирования
    TSDB := (MsObj.Bind() As IMsModelSpace).Rubricator As IRubricator;
    // Получаем атрибуты временных рядов
    Atrs := TSDB.Facts.Attributes;
    // Получаем справочник, на который ссылается атрибут CITY
    Dict := Atrs.FindById("CITY").ValuesObject;
    pDimInstance := Dict.Open(NullAs IDimInstance;
    // Получаем и очищаем цепочку расчета метамодели
    Chain := pMetaModel.CalculationChain;
    Chain.Clear();
    // Получаем и очищаем параметры метамодели
    MetaParams := pMetaModel.Params;
    MetaParams.Clear();
    // Добавляем первый параметр, ссылающийся на справочник
    param1 := MetaParams.Add();
    param1.DataType := DbDataType.ddtInteger;
    param1.Hidden := True;
    param1.Id := "P_CITY";
    param1.Name := "Город";
    param1.ParamType := TsParamType.tsptSelection;
    // Указываем, что справочник, который будет определять значения параметра
    param1.LinkedObject := Dict;
    // Задаем отметку параметра 
    pSelection := pDimInstance.CreateSelection();
    pSelection.SelectElement(1False);
    Param1.DefaultValue := pSelection;
    // Добавляем второй параметр, ссылающийся на справочник
    param2 := MetaParams.Add();
    param2.DataType := DbDataType.ddtInteger;
    param2.Hidden := True;
    param2.Id := "P_CITY_SEL";
    param2.Name := "Город (отметка)";
    param2.ParamType := TsParamType.tsptSelection;
    // Указываем, что справочник, который будет определять значения параметра
    param2.LinkedObject := Dict;
    // Задаем отметку параметра 
    pSelection.DeselectAll();
    pSelection.SelectElement(2False);
    param2.DefaultValue := pSelection;
    // Создаем вершину условия
    pBranch := Chain.AddBranch("Условие");
    pBranch.Parameter := param1;
    // Создаем ветку, которая выполняется, если не выполнится ни одна другая ветка  
    pDefaultContents := pBranch.DefaultContents;
    // Указываем модель, которая будет рассчитана в данной ветке
    Case_default := mb.ItemByIdNamespace["MODEL_BRANCH_PARAM_DEFAULT", MsObj.Key].Bind() As IMsModel;
    pDefaultContents.AddModel(Case_default);
    // Создаем первую ветку условия
    pCaseList := pBranch.CaseList;
    pCase := pCaseList.Add();
    // Указываем модель, которая будет рассчитана в данной ветке
    Case_1 := mb.ItemByIdNamespace["MODEL_BRANCH_PARAM_SEL", MsObj.Key].Bind() As IMsModel;
    pCase.Contents.AddModel(Case_1);
    // Создаем условие расчета ветки
    pBranchConditions := pCase.Conditions;
    // Задаем тип условия расчета ветки: вхождение в отметку элементов
    pCondSel := pBranchConditions.Add(MsBranchConditionType.mbctInSelection) As IMsBranchConditionInSelection;
    // Указываем, что условие управляется параметром, являющимся отметкой
    pCondSel.ParameterAsSelection := Param2;
    // Сохраняем метамодель
    (pMetaModel As IMetabaseObject).Save();
End Sub;

См. также:

IMsBranchConditionInSelection