Открытие диалога для настройки многомерного цикла или диалога для настройки измерения многомерного цикла.
Параметры команды передаются в свойстве IUiCommandExecutionContext.Data в виде массива типа Variant, элементы которого содержат значения:
Тип значения | Описание |
Элемент 1: IMsMetaModel | Метамодель, содержащая многомерный цикл. |
Элемент 2: IMsCalculationChainEntry | Элемент цепочки расчёта, являющийся многомерным циклом. |
Элемент 3: IMsDimIteratorDimension | Измерение многомерного цикла. |
Элемент 4: String | Может принимать только значение compact. Признак того, что должен отображаться сокращённый вид диалога для настройки фильтрации измерения. |
Отображаемый диалог зависит от того, какие элементы массива заданы. Если заданы:
первые два элемента. Отображается диалог настройки многомерного цикла;
первые три элемента. Отображается диалог настройки измерения многомерного цикла, указанного в третьем элементе. Диалог полный и содержит вкладки: «Фильтр», «Связанные измерения», «Источники данных»;
все элементы. Отображается диалог настройки измерения многомерного цикла, указанного в третьем элементе. Диалог сокращённый и содержит только вкладку «Фильтр».
Для выполнения примера предполагается наличие формы, содержащей кнопку с идентификатором Button1 и три компонента RadioButton с идентификаторами RadioButton1, RadioButton2, RadioButton3. В компоненте RadioButton1 свойство Checked имеет значение True. Свойство Text для компонентов RadioButton имеет следующие значения:
RadioButton1. Многомерный цикл;
RadioButton2. Настройка измерения (полная);
RadioButton3. Настройка измерения (сокращённая).
В репозитории предполагается наличие контейнера моделирования с идентификатором MS_PLUGIN, содержащего метамодель с идентификатором META_DIMITERATOR. Данная метамодель содержит только многомерный цикл, рассчитываемый по нескольким измерениям.
Добавьте ссылки на системные сборки: Fore, Metabase, Ms, UI.
Пример является обработчиком события OnClick для кнопки Button1.
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
mb: IMetabase;
msKey: Integer;
meta: IMsMetaModel;
chainEntry: IMsCalculationChainEntry;
dimIter: IMsCalculationChainMultiDimIterator;
target: IUiCommandTarget;
context: IUiCommandExecutionContext;
arg: array Of Variant;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем модель
msKey := mb.GetObjectKeyById("MS_PLUGIN");
meta := mb.ItemByIdNamespace("META_DIMITERATOR", msKey).Edit As IMsMetaModel;
// Получаем многомерный цикл
chainEntry := meta.CalculationChain.Item(0);
dimIter := chainEntry As IMsCalculationChainMultiDimIterator;
// Получаем плагин Ms
target := WinApplication.Instance.GetPluginTarget("Ms");
// Создаём контекст для выполнения команды
context := target.CreateExecutionContext;
// Создаём массив параметров команды
arg := New Variant[4];
arg[0] := meta;
arg[1] := chainEntry;
// Если установлен переключатель RadioButton2,
// то в массив добавляется элемент с измерением многомерного цикла
If RadioButton2.Checked Then
arg[2] := dimIter.Dimensions.Item(0);
End If;
// Если установлен переключатель RadioButton2,
// то в массив добавляется элемент с измерением многомерного цикла
// и элемент, указывающий на компактный вид диалога
If RadioButton3.Checked Then
arg[2] := dimIter.Dimensions.Item(0);
arg[3] := "compact";
End If;
// Передаём массив параметров команды
context.Data := arg;
// Выполняем команду
target.Execute("EditChainEntry", context);
End Sub Button1OnClick
Imports Prognoz.Platform.Interop.Fore;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Ui;
…
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
mb: IMetabase;
msKey: uinteger;
meta: IMsMetaModel;
chainEntry: IMsCalculationChainEntry;
dimIter: IMsCalculationChainMultiDimIterator;
target: IUiCommandTarget;
WinApp: WinApplicationClassClass = New WinApplicationClassClass();
RunContext: ForeRuntimeContext;
context: IUiCommandExecutionContext;
arg: array Of object;
Begin
// Получаем текущий репозиторий
mb := Self.Metabase;
// Получаем модель
msKey := mb.GetObjectKeyById("MS_PLUGIN");
meta := mb.ItemByIdNamespace["META_DIMITERATOR", msKey].Edit() As IMsMetaModel;
// Получаем многомерный цикл
chainEntry := meta.CalculationChain.Item[0];
dimIter := chainEntry As IMsCalculationChainMultiDimIterator;
// Получаем плагин Ms
RunContext := (mb As IForeServices).GetRuntime().Context;
target := WinApp.Instance[RunContext].GetPluginTarget("Ms");
// Создаём контекст для выполнения команды
context := target.CreateExecutionContext();
// Создаём массив параметров команды
arg := New object[4];
arg[0] := meta;
arg[1] := chainEntry;
// Если установлен переключатель RadioButton2,
// то в массив добавляется элемент с измерением многомерного цикла
If RadioButton2.Checked Then
arg[2] := dimIter.Dimensions.Item[0];
End If;
// Если установлен переключатель RadioButton2,
// то в массив добавляется элемент с измерением многомерного цикла
// и элемент, указывающий на компактный вид диалога
If RadioButton3.Checked Then
arg[2] := dimIter.Dimensions.Item[0];
arg[3] := "compact";
End If;
// Передаём массив параметров команды
context.Data := arg;
// Выполняем команду
target.Execute("EditChainEntry", context, RunContext);
End Sub;
В результате выполнения примера при нажатии на кнопку Button1 поведение будет зависеть от того, какой из переключателей RadioButton установлен:
RadioButton1. Отобразится диалог настройки многомерного цикла;
RadioButton2. Отобразится полный диалог настройки для первого измерения многомерного цикла;
RadioButton3. Отобразится сокращённый диалог настройки для первого измерения многомерного цикла.
См. также: