DimOpenStubParamValues: IMsDimOpenStubParamValues;
DimOpenStubParamValues: Prognoz.Platform.Interop.Ms.IMsDimOpenStubParamValues;
Свойство DimOpenStubParamValues возвращает коллекцию параметров, используемых при открытии объектов с параметрическими измерениями.
Параметры для открытия параметрических измерений поддерживаются только для внутренних моделей, включенных в метамодель.
Для выполнения примера в репозитории предполагается наличие:
контейнера моделирования с идентификатором «MS», содержащего метамодель с идентификатором «METAMODEL»;
параметрического справочника с идентификатором «DIM», содержащего строковый параметр с идентификатором «PARAM1»;
параметрических кубов с идентификаторами «CUBE_IN», «CUBE_OUT» содержащих строковый параметр с идентификатором «PARAM1». Кубы должны содержать календарное измерение и управляющее измерение, основанное на справочнике «DIM».
Добавьте ссылки на системные сборки «Cubes», «Dimensions», «Metabase», «Ms».
Sub UserProc;
Var
mb: IMetabase;
ms: IMetabaseObjectDescriptor;
MetaModel: IMsMetaModel;
Dimension: IDimensionModel;
CubeIn, CubeOut: IMetabaseObject;
StParams: IMsDimOpenStubParamValues;
StubParam: IMsDimOpenStubParamValue;
Param: IMsDimOpenParamValue;
ChainEntries: IMsCalculationChainEntries;
ChainModel: IMsCalculationChainModel;
Model: IMsModel;
Trans: IMsFormulaTransform;
Vars: IMsFormulaTransformVariables;
Stub: IVariableStub;
SelectionFact: IDimSelectionSetFactory;
Selection: IDimSelectionSet;
DimSel: IDimSelection;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
ParamValues: IMetabaseObjectParamValues;
Formula: IMsFormula;
Determ: IMsDeterministicTransform;
TermX1: IMsFormulaTerm;
Begin
mb := MetabaseClass.Active;
// Получаем метамодель
ms := mb.ItemById("MS");
MetaModel := mb.ItemByIdNamespace("METAMODEL", ms.Key).Edit As IMsMetaModel;
// Получаем параметрический справочник
Dimension := mb.ItemById("DIM").Bind As IDimensionModel;
// Получаем входной куб
CubeIn := mb.ItemById("CUBE_IN").Bind;
// Получаем выходной куб
CubeOut := mb.ItemById("CUBE_OUT").Bind;
// Добавляем параметры в метамодель и задаем их значения
StParams := MetaModel.DimOpenStubParamValues;
StParams.Clear;
// Параметр для выходного куба
StubParam := StParams.Add(CubeOut.Key);
StubParam.StubValues := CubeOut.Params.CreateEmptyValues;
StubParam.StubValues.FindById("PARAM1").Value := "1";
Param := StubParam.Values.Add(Dimension);
Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
Param.Values.FindById("PARAM1").Value := "1";
// Параметр входного куба
StubParam := StParams.Add(CubeIn.Key);
StubParam.StubValues := CubeIn.Params.CreateEmptyValues;
StubParam.StubValues.FindById("PARAM1").Value := "1";
Param := StubParam.Values.Add(Dimension);
Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
Param.Values.FindById("PARAM1").Value := "1";
// Создаем в метамодели внутреннюю модель
ChainEntries := MetaModel.CalculationChain;
ChainModel := ChainEntries.AddExclusiveModel;
Model := ChainModel.EditModel;
Trans := Model.Transform;
// Добавляем выходную переменную
Vars := Trans.Outputs;
Stub := CubeOut As IVariableStub;
ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
ParamValues.FindById("PARAM1").Value := "1";
SelectionFact := New DimSelectionSetFactory.Create;
Selection := SelectionFact.CreateDimSelectionSet;
// Задаем отметку
DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
DimSel.SelectElement(0, False);
// Настраиваем расчёт модели
Slice := Vars.Add(Stub).Slices.Add(Selection);
Selector := Model.Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Model.Transform.Transform(Selector);
Formula.Level := DimCalendarLevel.Year;
// Настраиваем детерминированное уравнение
(Model As IMetabaseObject).Name := "Детерминированное уравнение";
Formula.Kind := MsFormulaKind.Deterministic;
Determ := Formula.Method As IMsDeterministicTransform;
// Добавляем входную переменную
Vars := Trans.Inputs;
Stub := CubeIn As IVariableStub;
ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues;
ParamValues.FindById("PARAM1").Value := "1";
SelectionFact := New DimSelectionSetFactory.Create;
Selection := SelectionFact.CreateDimSelectionSet;
// Задаем отметку
DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
DimSel.SelectElement(0, False);
// Задаем формулу
Slice := Vars.Add(Stub).Slices.Add(Selection);
TermX1 := Determ.Operands.Add(Slice);
Determ.Expression.AsString := "10 -" + TermX1.TermToInnerText + " * 3.14";
// Сохраняем изменения в метамодели
(MetaModel As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера в метамодель будет добавлена внутренняя модель, рассчитываемая методом «Детерминированное уравнение». Входная переменная модели - куб «CUBE_IN», выходная - куб «CUBE_OUT». В метамодель будут добавлены параметры для управления параметрами данных кубов.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
ms: IMetabaseObjectDescriptor;
MetaModel: IMsMetaModel;
Dimension: IDimensionModel;
CubeIn, CubeOut: IMetabaseObject;
StParams: IMsDimOpenStubParamValues;
StubParam: IMsDimOpenStubParamValue;
Param: IMsDimOpenParamValue;
ChainEntries: IMsCalculationChainEntries;
ChainModel: IMsCalculationChainModel;
Model: IMsModel;
Trans: IMsFormulaTransform;
Vars: IMsFormulaTransformVariables;
Stub: IVariableStub;
SelectionFact: IDimSelectionSetFactory;
Selection: IDimSelectionSet;
DimSel: IDimSelection;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
ParamValues: IMetabaseObjectParamValues;
Formula: IMsFormula;
Determ: IMsDeterministicTransform;
TermX1: IMsFormulaTerm;
Begin
mb := Params.Metabase;
// Получаем метамодель
ms := mb.ItemById["MS"];
MetaModel := mb.ItemByIdNamespace["METAMODEL", ms.Key].Edit() As IMsMetaModel;
// Получаем параметрический справочник
Dimension := mb.ItemById["DIM"].Bind() As IDimensionModel;
// Получаем входной куб
CubeIn := mb.ItemById["CUBE_IN"].Bind();
// Получаем выходной куб
CubeOut := mb.ItemById["CUBE_OUT"].Bind();
// Добавляем параметры в метамодель и задаем их значения
StParams := MetaModel.DimOpenStubParamValues;
StParams.Clear();
// Параметр для выходного куба
StubParam := StParams.Add(CubeOut.Key);
StubParam.StubValues := CubeOut.Params.CreateEmptyValues();
StubParam.StubValues.FindById("PARAM1").Value := "1";
Param := StubParam.Values.Add(Dimension);
Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
Param.Values.FindById("PARAM1").Value := "1";
// Параметр входного куба
StubParam := StParams.Add(CubeIn.Key);
StubParam.StubValues := CubeIn.Params.CreateEmptyValues();
StubParam.StubValues.FindById("PARAM1").Value := "1";
Param := StubParam.Values.Add(Dimension);
Param.Values := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
Param.Values.FindById("PARAM1").Value := "1";
// Создаем в метамодели внутреннюю модель
ChainEntries := MetaModel.CalculationChain;
ChainModel := ChainEntries.AddExclusiveModel();
Model := ChainModel.EditModel;
Trans := Model.Transform;
// Добавляем выходную переменную
Vars := Trans.Outputs;
Stub := CubeOut As IVariableStub;
ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
ParamValues.FindById("PARAM1").Value := "1";
SelectionFact := New DimSelectionSetFactory.Create();
Selection := SelectionFact.CreateDimSelectionSet();
// Задаем отметку
DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
DimSel.SelectElement(0, False);
// Настраиваем расчёт модели
Slice := Vars.Add(Stub).Slices.Add(Selection);
Selector := Model.Transform.CreateSelector();
Selector.Slice := Slice;
Formula := Model.Transform.Transform[Selector];
Formula.Level := DimCalendarLevel.dclYear;
// Настраиваем детерминированное уравнение
(Model As IMetabaseObject).Name := "Детерминированное уравнение";
Formula.Kind := MsFormulaKind.mfkDeterministic;
Determ := Formula.Method As IMsDeterministicTransform;
// Добавляем входную переменную
Vars := Trans.Inputs;
Stub := CubeIn As IVariableStub;
ParamValues := (Dimension As IMetabaseObject).Params.CreateEmptyValues();
ParamValues.FindById("PARAM1").Value := "1";
SelectionFact := New DimSelectionSetFactory.Create();
Selection := SelectionFact.CreateDimSelectionSet();
// Задаем отметку
DimSel := Selection.Add((Dimension As IMetabaseObject).Open(ParamValues) As IDimInstance);
DimSel.SelectElement(0, False);
// Задаем формулу
Slice := Vars.Add(Stub).Slices.Add(Selection);
TermX1 := Determ.Operands.Add(Slice);
Determ.Expression.AsString := "10 -" + TermX1.TermToInnerText() + " * 3.14";
// Сохраняем изменения в метамодели
(MetaModel As IMetabaseObject).Save();
End Sub;
См. также: