Команда EditChainEntry

Назначение

Открытие диалога для настройки многомерного цикла или диалога для настройки измерения многомерного цикла.

Параметры использования

Параметры команды передаются в свойстве IUiCommandExecutionContext.Data в виде массива типа Variant, элементы которого содержат значения:

Тип значения Описание
Элемент 1: IMsMetaModel Метамодель, содержащая многомерный цикл.
Элемент 2: IMsCalculationChainEntry Элемент цепочки расчёта, являющийся многомерным циклом.
Элемент 3: IMsDimIteratorDimension Измерение многомерного цикла.
Элемент 4: String Может принимать только значение compact. Признак того, что должен отображаться сокращённый вид диалога для настройки фильтрации измерения.

Особенности применения

Отображаемый диалог зависит от того, какие элементы массива заданы. Если заданы:

Пример

Для выполнения примера предполагается наличие формы, содержащей кнопку с идентификатором Button1 и три компонента RadioButton с идентификаторами RadioButton1, RadioButton2, RadioButton3. В компоненте RadioButton1 свойство Checked имеет значение True. Свойство Text для компонентов RadioButton имеет следующие значения:

В репозитории предполагается наличие контейнера моделирования с идентификатором 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 установлен:

См. также:

IUiCommandTarget.Execute