DimOpenParams: IMsDimOpenParamValue;
DimOpenParams: Prognoz.Platform.Interop.Ms.IMsDimOpenParamValue;
Свойство DimOpenParams определяет значение параметра, с которым открывается измерение, по которому задана отметка для расчёта цикла.
Для установки отметки, используемой для расчёта цикла, используйте свойство IMsCalculationChainIterator.Selection.
Для выполнения примера в репозитории предполагается наличие:
контейнера моделирования с идентификатором «MS_PARAM», содержащего метамодель с идентификатором «META_MODEL»;
справочника с идентификатором «DICT_PARAM», содержащего целочисленный параметр с идентификатором «COUNTRY_PARAM»;
стандартного куба с идентификатором «CUBE_PARAM», содержащего параметр с идентификатором «COUNTRY» и измерение, основанное на справочнике «DICT_PARAM». Параметр «COUNTRY» управляет параметром «COUNTRY_PARAM».
Добавьте ссылки на системные сборки: «Ms», «Metabase», «Dimensions», «Cubes», «Dal».
Sub UserProc;
Var
mb: IMetabase;
msKey, cubeKey: Integer;
metaModel: IMsMetaModel;
stubParamValue: IMsDimOpenStubParamValue;
dimOpenParamValue: IMsDimOpenParamValue;
openParams: IMetabaseObjectParamValues;
dimInstance: IDimInstance;
iteratorSelection: IDimSelection;
iterator: IMsCalculationChainIterator;
param: IMsModelParam;
dDescr: IMetabaseObjectDescriptor;
Begin
mb := MetabaseClass.Active;
// Получаем метамодель
msKey := mb.ItemById("MS_PARAM").Key;
metaModel := mb.ItemByIdNamespace("META_MODEL", msKey).Edit As IMsMetaModel;
// Очищаем цепочку расчёта метамодели
metaModel.CalculationChain.Clear;
// Очищаем значения параметров измерений, используемых для расчёта метамодели
metaModel.DimOpenStubParamValues.Clear;
// Очищаем параметры метамодели
metaModel.Params.Clear;
// Создаём новый параметр, ссылающийся на справочник DICT_PARAM
param := metaModel.Params.Add;
param.DataType := DbDataType.Integer;
param.LinkedObject := mb.ItemById("DICT_PARAM");
param.DefaultValue := Null;
param.Hidden := True;
{ Создаем новое значение параметра для изменения источника данных,
используемого для расчёта метамодели}
cubeKey := mb.ItemById("CUBE_PARAM").Key;
stubParamValue := metaModel.DimOpenStubParamValues.Add(cubeKey);
stubParamValue.StubValues := mb.Item(cubeKey).Bind.ParamValues;
// Добавляем значение параметра измерния, используемого для расчёта метамодели
dDescr := mb.ItemById("DICT_PARAM");
dimOpenParamValue := stubParamValue.Values.add(dDescr.Bind As IDimensionModel);
// Задаем значение для параметра справочника DICT_PARAM
dimOpenParamValue.Values.FindById("COUNTRY_PARAM").Value := 17724;
// Задаем значение для параметра источника данных
stubParamValue.StubValues.FindById("COUNTRY").Value := 17724;
// Получаем отметку измерения с учетом значения параметра
openParams := dDescr.Bind.ParamValues;
openParams.FindById("COUNTRY_PARAM").Value := 17724;
dimInstance := dDescr.Open(openParams) As IDimInstance;
iteratorSelection := dimInstance.CreateSelection;
iteratorSelection.SelectAll;
// Создаем цикл метамодели
iterator := metaModel.CalculationChain.AddIterator("Цикл 'Справочник с параметром'");
// Задаем отметку
iterator.Selection := iteratorSelection;
// Устанавливаем параметр
iterator.Parameter := param;
// Передаем параметр для открытия измерения, по которому сделана отметка, в цикл
iterator.DimOpenParams := dimOpenParamValue;
// Сохраняем метамодель
(metaModel As IMetabaseObject).Save;
End Sub UserProc;
Результат выполнения примера: в метамодели «META_MODEL» создан цикл и задано значение параметра, с которым открывается измерение, по которому задана отметка для расчёта цикла.
Необходимые требования и результат выполнения примера Fore.NET совпадают с необходимыми требованиями и результатом выполнения примера Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
msKey, cubeKey: uinteger;
metaModel: IMsMetaModel;
stubParamValue: IMsDimOpenStubParamValue;
dimOpenParamValue: IMsDimOpenParamValue;
openParams: IMetabaseObjectParamValues;
dimInstance: IDimInstance;
iteratorSelection: IDimSelection;
iterator: IMsCalculationChainIterator;
param: IMsModelParam;
dDescr: IMetabaseObjectDescriptor;
Begin
mb := Params.Metabase;
// Получаем метамодель
msKey := mb.ItemById["MS_PARAM"].Key;
metaModel := mb.ItemByIdNamespace["META_MODEL", msKey].Edit() As IMsMetaModel;
// Очищаем цепочку расчёта метамодели
metaModel.CalculationChain.Clear();
// Очищаем значения параметров измерений, используемых для расчёта метамодели
metaModel.DimOpenStubParamValues.Clear();
// Очищаем параметры метамодели
metaModel.Params.Clear();
// Создаём новый параметр, ссылающийся на справочник DICT_PARAM
param := metaModel.Params.Add();
param.DataType := DbDataType.ddtInteger;
param.LinkedObject := mb.ItemById["DICT_PARAM"];
param.DefaultValue := Null;
param.Hidden := True;
{ Создаем новое значение параметра для изменения источника данных,
используемого для расчёта метамодели}
cubeKey := mb.ItemById["CUBE_PARAM"].Key;
stubParamValue := metaModel.DimOpenStubParamValues.Add(cubeKey);
stubParamValue.StubValues := mb.Item[cubeKey].Bind().ParamValues;
// Добавляем значение параметра измерния, используемого для расчёта метамодели
dDescr := mb.ItemById["DICT_PARAM"];
dimOpenParamValue := stubParamValue.Values.add(dDescr.Bind() As IDimensionModel);
// Задаем значение для параметра справочника DICT_PARAM
dimOpenParamValue.Values.FindById("COUNTRY_PARAM").Value := 17724;
// Задаем значение для параметра источника данных
stubParamValue.StubValues.FindById("COUNTRY").Value := 17724;
// Получаем отметку измерения с учетом значения параметра
openParams := dDescr.Bind().ParamValues;
openParams.FindById("COUNTRY_PARAM").Value := 17724;
dimInstance := dDescr.Open(openParams) As IDimInstance;
iteratorSelection := dimInstance.CreateSelection();
iteratorSelection.SelectAll();
// Создаем цикл метамодели
iterator := metaModel.CalculationChain.AddIterator("Цикл 'Справочник с параметром'");
// Задаем отметку
iterator.Selection := iteratorSelection;
// Устанавливаем параметр
iterator.Parameter := param;
// Передаем параметр для открытия измерения, по которому сделана отметка, в цикл
iterator.DimOpenParams := dimOpenParamValue;
// Сохраняем метамодель
(metaModel As IMetabaseObject).Save();
End Sub;
См. также: