Каждая метамодель может содержать различный набор параметров, которые позволяют управлять расчётом метамодела, использоваться в формулах и иметь какое-либо ещё назначение. Коллекция параметров описывается интерфейсом IMsModelParams, но при открытии задачи с помощью метода Open/OpenWithParam в метамодель может быть передана коллекция значений параметров, описываемая интерфейсом IMetabaseObjectParamValues. Для этого параметры предварительно должны быть созданы в метаданных метамодели или задачи, между параметрами может быть настроено управление. Пример представлен в описании свойства IMsModelParam.ObjectParam.
В данном примере описан процесс получения параметров метамодели, задание их значений и дальнейшее открытие задачи с параметрами. Для выполнения примера предполагается наличие контейнера моделирования с идентификатором CONT_MODEL. В контейнере создана задача с идентификатором PROBLEM. Метамодель и задача в своей структуре имеют параметры с идентификаторами PARAM_INT и PARAM_STR.
Sub UserProc;
Var
Mb: IMetabase;
Problem: IMsProblem;
pDesc: IMetabaseObjectDescriptor;
pParamValues: IMetabaseObjectParamValues;
pCalcSett: IMsProblemCalculationSettings;
pCalc: IMsProblemCalculation;
Begin
Mb := MetabaseClass.Active;
pDesc := Mb.ItemByIdNamespace("PROBLEM", Mb.GetObjectKeyById("CONT_MODEL"));
//Параметры метамодели
pParamValues := ((pDesc.EditTemporary As IMsProblem).MetaModel As IMetabaseObject).ParamValues;
// Установка значений параметров
pParamValues.FindById("PARAM_INT").Value := 100;
pParamValues.FindById("PARAM_STR").Value := "X";
//Открытие задачи с параметрами
Problem := pDesc.Open(pParamValues) As IMsProblem;
//Расчёт задачи
pCalcSett := problem.CreateCalculationSettings;
pCalc := problem.Calculate(pCalcSett);
pCalc.Run;
End Sub UserProc;
При выполнении примера будет получена коллекция параметров метамодели, для параметров будут заданы значения. С параметрами будет открыта задача, при этом значения параметров будут переданы в метамодель. После этого будет произведён расчёт задачи.
См. также: