IMsMetaModelVisualController.GetVariableData

Синтаксис Fore

GetVariableData(Slice: IMsFormulaTransformSlice;
                EntryKey: Integer;
                Calculation: IMsMethodCalculation;
                Coord: IMsFormulaTransformCoord;
                FillType: MsFillBoundType;
                Var IdentificationStartDate: DateTime;
                Var ForecastEndDate: DateTime;
                [Transform: IMsFormulaTransform = Null;]
                [UseInversion: Boolean = False]): Array;

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

GetVariableData(Slice: Prognoz.Platform.Interop.Ms.IMsFormulaTransformSlice;
                EntryKey: integer;
                Calculation: Prognoz.Platform.Interop.Ms.IMsMethodCalculation;
                Coord: Prognoz.Platform.Interop.Ms.IMsFormulaTransformCoord;
                FillType: Prognoz.Platform.Interop.Ms.MsFillBoundType;
                Var IdentificationStartDate: System.DateTime;
                Var ForecastEndDate: System.DateTime;
                Transform: MsFormulaTransform;
                UseInversion: Boolean): Syatem.Array;

Параметры

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

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

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

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

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

IdentificationStartDate. Возвращает дату начала расчёта;

ForecastEndDate. Возвращает дату окончания расчёта;

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

UseInversion. Определяет, применять ли к данным переменной преобразование, установленное для неё.

Описание

Метод GetVariableData возвращает данные переменной по заданным параметрам.

Комментарии

Параметр FillType определяет период получения данных следующим образом: начало получения данных всегда совпадает с периодом идентификации, окончание получения данных задается перечислением MsFillBoundType.

Параметр UseInversion актуален, если для переменной установлено какое-либо преобразование. Допустимые значения параметра:

Пример Fore

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

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

Sub GetData;
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;
    StartDate, EndDate: DateTime;
    Data: Array Of Double;
Begin
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MODEL_SPACE");
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("WEB_PROBLEM", 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.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Period.ForecastEndDate;
    // Получаем данные переменной
    Data := MetaVisual.GetVariableData(Slice, VarKey, Calc, Coord,
        MsFillBoundType.EndIdentify, StartDate, EndDate, Transform, False);
    Debug.WriteLine("Начало расчёта: " + StartDate.ToString);
    Debug.WriteLine("Окончание расчёта: " + EndDate.ToString);
    For i := 0 To Data.Length - 1 Do
        Debug.WriteLine(Data[i]);
    End For;
End Sub GetData;

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

Пример 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;
    StartDate, EndDate: System.DateTime;
    Data: System.Array;
Begin
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MODEL_SPACE"];
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["WEB_PROBLEM", 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.Period.IdentificationStartDate;
    Calc.Period.IdentificationEndDate := model.Period.IdentificationEndDate;
    Calc.Period.ForecastStartDate := model.Period.ForecastStartDate;
    Calc.Period.ForecastEndDate := model.Period.ForecastEndDate;
    // Получаем данные переменной
    Data := MetaVisual.GetVariableData(Slice, VarKey As integer, Calc, Coord,
        MsFillBoundType.fbtEndIdentify, Var StartDate, Var EndDate, Transform, False);
    System.Diagnostics.Debug.WriteLine("Начало расчёта: " + StartDate.ToString());
    System.Diagnostics.Debug.WriteLine("Окончание расчёта: " + EndDate.ToString());
    For i := 0 To Data.Length - 1 Do
        System.Diagnostics.Debug.WriteLine(Data[i]);
    End For;
End Sub;

См. также:

IMsMetaModelVisualController