Add: IMsModelParam;
Add: Prognoz.Platform.Interop.Ms.IMsModelParam;
Метод Add добавляет параметр в коллекцию.
Для удаления определенного параметра из коллекции используйте методы IMsModelParams.Remove и IMsModelParams.RemoveByKey, для удаления всех параметров - метод IMsModelParams.Clear.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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.
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;
См. также: