IMsMetaModelVisualController.GetVariableValues

Синтаксис Fore

GetVariableValues(
                  Slice: IMsFormulaTransformSlice;
                  EntryKey: Integer;
                  ScenarioKeys: Array;
                  CleanIdentification: Boolean;
                  Calculation: IMsMethodCalculation;
                  Coord: IMsFormulaTransformCoord;
                  FillType: MsFillBoundType;
                  Transform: IMsFormulaTransform;
                  Var Dates: Array;
                  Var FilledDates: Array;
                  Var FilledCount: Integer;
                  Var Level: Integer;
                  Var Result: Array);

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

GetVariableValues(
                  Slice: Prognoz.Platform.Interop.Ms.IMsFormulaTransformSlice;
                  EntryKey: integer;
                  ScenarioKeys: System.Array;
                  CleanIdentification: boolean;
                  Calculation: Prognoz.Platform.Interop.Ms.IMsMethodCalculation;
                  Coord: Prognoz.Platform.Interop.Ms.IMsFormulaTransformCoord;
                  FillType: Prognoz.Platform.Interop.Ms.MsFillBoundType;
                  Transform: Prognoz.Platform.Interop.Ms.MsFormulaTransform;
                  var Dates: System.Array;
                  var FilledDates:System.Array;
                  var FilledCount: integer;
                  var Level: integer;
                  var Result: System.Array);

Параметры

Slice. Срез переменной;

EntryKey. Ключ переменной;

ScenarioKeys. Массив ключей сценариев моделирования;

CleanIdentification. Признак того, очищать ли период идентификации;

Calculation. Параметры расчёта модели, содержащей переменную;

Coord. Параметры координаты переменной;

FillType. Период получения данных;

Transform. Параметры модели, содержащей переменную;

Dates. Массив дат для значений переменной;

FilledDates. Массив признаков того, содержит ли переменная значение на определенную дату;

FilledCount. Количество непустых значений переменной;

Level. Календарная динамика переменной;

Result. Значения переменной.

Описание

Метод GetVariableValues возвращает значения переменной с указанием дат по заданным сценариям.

Комментарии

Возможные значения параметра CleanIdentification:

Метод возвращает результат выполнения в параметрах Dates, FilledDates, FilledCount, Level, Result. Каждый элемент в массиве Dates соответствует элементам в массивах FilledDates и Result.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащим задачу моделирования с идентификатором «MODEL_RESETTEST_WEB». Данная задача должна содержать внутреннюю метамодель, в цепочке расчёта которой присутствует хотя бы одна модель.

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

Sub UserProc;
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i: Integer;
    Model: IMsModel;
    Transform: IMsFormulaTransform;
    Vars: IMsFormulaTransformVariables;
    OutputVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    VarKey: Integer;
    Coord: IMsFormulaTransformCoord;
    Calc: IMsMethodCalculation;
    ScenKeys: Array Of Integer;
    Dates: Array Of DateTime;
    FilledDates: Array Of Boolean;
    FilledCount: Integer;
    Level: Integer;
    Result: Array Of Double;
Begin
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MS");
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("MODEL_RESETTEST_WEB", MsObj.Key).Bind As IMsProblem;
    // Получаем метамодель
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Получаем 1-ю модель в цепочке расчёта
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item(i);
        If ChainEl.Type = MsCalculationChainEntryType.Model Then
            Model := (ChainEl As IMsCalculationChainModel).Model;
            Break;
        End If;
    End For;
    // Получаем входную переменную модели
    Transform := Model.Transform;
    Vars := Transform.Outputs;
    OutputVar := Vars.Item(0);
    VarKey := OutputVar.Key;
    Slice := OutputVar.Slices.Item(0);
    // Получаем параметры метода расчета модели
    Coord := Transform.CreateCoord(OutputVar);
    // Задаем параметры периода расчёта модели
    Calc := Transform.CreateCalculation;
    Calc.Period.IdentificationStartDate := model.Transform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Transform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Transform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Transform.Period.ForecastEndDate;
    // Создаем массив ключей сценариев и указываем там сценарий «Факт»
    ScenKeys := New Integer[1];
    ScenKeys[0] := -1;
    // Получаем значения входной переменной 
    MetaVisual.GetVariableValues(Slice, VarKey, ScenKeys, True, Calc, Coord,
        MsFillBoundType.EndForecast, Transform, Dates, FilledDates, FilledCount, Level, Result);
    // Выводим значения в окно консоли  
    For i := 0 To Dates.Length - 1 Do
        Debug.Write(Dates[i]);
        Debug.Write(" - ");
        Debug.WriteLine(Result[i])
    End For;
End Sub UserProc;

В результате выполнения примера в окно консоли будут выведены значения входной переменной для первой модели в цепочке расчета задачи.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i: Integer;
    Model: IMsModel;
    Transform: MsFormulaTransform;
    Vars: IMsFormulaTransformVariables;
    OutputVar: IMsFormulaTransformVariable;
    Slice: IMsFormulaTransformSlice;
    VarKey: uinteger;
    Coord: IMsFormulaTransformCoord;
    Calc: IMsMethodCalculation;
    ScenKeys: Array Of integer;
    Dates: System.Array;
    FilledDates: System.Array;
    FilledCount: Integer;
    Level: Integer;
    Result: System.Array;
Begin
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MS"];
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["MODEL_RESETTEST_WEB", MsObj.Key].Bind() As IMsProblem;
    // Получаем метамодель
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Получаем 1-ю модель в цепочке расчёта
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item[i];
        If ChainEl.Type = MsCalculationChainEntryType.mccetModel Then
            Model := (ChainEl As IMsCalculationChainModel).Model;
            Break;
        End If;
    End For;
    // Получаем входную переменную модели
    Transform := Model.Transform;
    Vars := Transform.Outputs;
    OutputVar := Vars.Item[0];
    VarKey := OutputVar.Key;
    Slice := OutputVar.Slices.Item[0];
    // Получаем параметры метода расчета модели
    Coord := Transform.CreateCoord(OutputVar);
    // Задаем параметры периода расчёта модели
    Calc := Transform.CreateCalculation();
    Calc.Period.IdentificationStartDate := model.Transform.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Transform.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Transform.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Transform.Period.ForecastEndDate;
    // Создаем массив ключей сценариев и указываем там сценарий «Факт»
    ScenKeys := New Integer[1];
    ScenKeys[0] := -1;
    // Получаем значения входной переменной 
    MetaVisual.GetVariableValues(Slice, VarKey As integer, ScenKeys, False, Calc, Coord,
        MsFillBoundType.fbtEndForecast, Transform, Var Dates, Var FilledDates, Var FilledCount, Var Level, Var Result);
    // Выводим значения в окно консоли  
    For i := 0 To Dates.Length - 1 Do
        System.Diagnostics.Debug.Write(Dates[i]);
        System.Diagnostics.Debug.Write(" - ");
        System.Diagnostics.Debug.WriteLine(Result[i])
    End For;
End Sub;

См. также:

IMsMetaModelVisualController