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);
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:
True. Очищать период идентификации;
False. Не очищать период идентификации.
Метод возвращает результат выполнения в параметрах Dates, FilledDates, FilledCount, Level, Result. Каждый элемент в массиве Dates соответствует элементам в массивах FilledDates и Result.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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.
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;
См. также: