IMsModelParams.Add

Синтаксис Fore

Add: IMsModelParam;

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

Add: Prognoz.Platform.Interop.Ms.IMsModelParam;

Описание

Метод Add добавляет параметр в коллекцию.

Комментарии

Для удаления определенного параметра из коллекции используйте методы IMsModelParams.Remove и IMsModelParams.RemoveByKey, для удаления всех параметров - метод IMsModelParams.Clear.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE». Контейнер должен содержать метамодель с идентификатором «METAMODEL», рассчитываемую задачей с идентификатором «PROBLEM». Цепочка расчёта метамодели должна содержать модель детерминированного уравнения с идентификатором «MODEL».

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

Sub ParamsAdd;
Var
    mb: IMetabase;
    Ms: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    MetaModel: IMsMetaModel;
    Model: IMsModel;
    MMParams: IMsModelParams;
    Param: IMsModelParam;
    CalcSett: IMsProblemCalculationSettings;
    Calc: IMsProblemCalculation;
    Method: IMsDeterministicTransform;
    ParamsVals: IMsModelParamValues;
Begin
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    Ms := mb.ItemById("MODEL_SPACE");
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace("METAMODEL", Ms.Key).Edit As IMsMetaModel;
    // Задаем параметры метамодели
    MMParams := MetaModel.Params;
    MMParams.Clear;
    // Добавляем параметр, определяющий нижнюю границу значений
    Param := MMParams.Add;
    Param.Name := "MIN_VALUE";
    Param.Id := "MIN_VALUE";
    Param.Tag := "Значение по умолчанию отсутствует";
    Param.Hidden := True;
    Param.DataType := DbDataType.Integer;
    Param.ParamType := TsParamType.Simple;
    // Добавляем параметр, определяющий верхнюю границу значений
    Param := MMParams.Add;
    Param.Name := "MAX_VALUE";
    Param.Id := "MAX_VALUE";
    Param.Tag := "Значение по умолчанию отсутствует";
    Param.Hidden := True;
    Param.DataType := DbDataType.Integer;
    Param.ParamType := TsParamType.Simple;
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save;
    // Получаем модель
    Model := mb.ItemByIdNamespace("MODEL", Ms.Key).Edit As IMsModel;
    Method := Model.Transform.FormulaItem(0).Method As IMsDeterministicTransform;
    // Задаем выражение для расчёта модели, основанное на значениях параметров
    Method.Expression.AsString := "RandBetween({MIN_VALUE}, {MAX_VALUE})";
    // Сохраняем изменения в модели
    (Model As IMetabaseObject).Save;
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("PROBLEM", Ms.Key).Edit As IMsProblem;
    // Задаем параметры расчёта задачи
    CalcSett := Problem.CreateCalculationSettings;
    // Задаем значения параметров
    ParamsVals := CalcSett.ParamValues;
    ParamsVals.FindById("MIN_VALUE").Value := -100;
    ParamsVals.FindById("MAX_VALUE").Value := 100;
    CalcSett.FactIncluded := True;
    // Выполняем расчёт
    Calc := Problem.Calculate(CalcSett);
    Calc.Run;
End Sub ParamsAdd;

После выполнения примера в метамодели «METAMODEL» созданы два параметра. На основе данных параметров задана формула расчёта модели «MODEL». Выполнен расчёт цепочки метамодели. Перед расчётом заданы значения параметров.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Transform;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    Ms: IMetabaseObjectDescriptor;
    Problem: IMsProblem;
    MetaModel: IMsMetaModel;
    Model: IMsModel;
    MMParams: IMsModelParams;
    Param: IMsModelParam;
    CalcSett: IMsProblemCalculationSettings;
    Calc: IMsProblemCalculation;
    Method: IMsDeterministicTransform;
    ParamsVals: IMsModelParamValues;
Begin
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    Ms := mb.ItemById["MODEL_SPACE"];
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace["METAMODEL", Ms.Key].Edit() As IMsMetaModel;
    // Задаем параметры метамодели
    MMParams := MetaModel.Params;
    MMParams.Clear();
    // Добавляем параметр, определяющий нижнюю границу значений
    Param := MMParams.Add();
    Param.Name := "MIN_VALUE";
    Param.Id := "MIN_VALUE";
    Param.Tag := "Значение по умолчанию отсутствует";
    Param.Hidden := True;
    Param.DataType := DbDataType.ddtInteger;
    Param.ParamType := TsParamType.tsptSimple;
    // Добавляем параметр, определяющий верхнюю границу значений
    Param := MMParams.Add();
    Param.Name := "MAX_VALUE";
    Param.Id := "MAX_VALUE";
    Param.Tag := "Значение по умолчанию отсутствует";
    Param.Hidden := True;
    Param.DataType := DbDataType.ddtInteger;
    Param.ParamType := TsParamType.tsptSimple;
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save();
    // Получаем модель
    Model := mb.ItemByIdNamespace["MODEL", Ms.Key].Edit() As IMsModel;
    Method := Model.Transform.FormulaItem[0].Method As IMsDeterministicTransform;
    // Задаем выражение для расчёта модели, основанное на значениях параметров
    Method.Expression.AsString := "Randbetween({MIN_VALUE}, {MAX_VALUE})";
    // Сохраняем изменения в модели
    (Model As IMetabaseObject).Save();
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["Problem", Ms.Key].Edit() As IMsProblem;
    // Задаем параметры расчёта задачи
    CalcSett := Problem.CreateCalculationSettings();
    // Задаем значения параметров
    ParamsVals := CalcSett.ParamValues;
    ParamsVals.FindById("MIN_VALUE").Value := -100;
    ParamsVals.FindById("MAX_VALUE").Value := 100;
    CalcSett.FactIncluded := True;
    // Выполняем расчёт
    Calc := Problem.Calculate(CalcSett);
    Calc.Run();
End Sub;

См. также:

IMsModelParams