При создании и работе с метамоделью следует учитывать следующие особенности:
класс объекта «Метамодель» - MetabaseObjectClass.KE_CLASS_MSMETAMODEL;
обязательно необходимо указывать родительский контейнер, так как метамодель может располагаться только внутри контейнера.
Для работы с моделью через язык Fore предназначен интерфейс IMsMetaModel. Используя его свойства и методы можно сформировать цепочку расчета и задать параметры метамодели.
Для работы с цепочкой расчета предназначен интерфейс IMsCalculationChainEntries. Используя его методы, в цепочку расчета можно добавить следующие элементы:
Папка. Предназначена для упорядочивания структуры цепочки расчета. Интерфейс IMsCalculationChainFolder;
Модель. Наименьшая единица расчета. Модель, доступная для использования внутри всего контейнера моделирования. Интерфейс IMsCalculationChainModel;
Внутренняя модель. Наименьшая единица расчета. Модель, существующая и доступная для использования только внутри метамодели. Интерфейс IMsCalculationChainModel;
Метамодель. Существующая цепочка расчета, добавленная в метамодель. Интерфейс IMsCalculationChainMetaModel;
Цикл. Управляющая конструкция, предназначенная для организации многократного расчета указанных элементов цепочки. Интерфейс IMsCalculationChainIterator;
Условие расчета цепочки. Управляющая конструкция, обеспечивающее расчет определенных элементов цепочки только при выполнении некоторого условия. Интерфейс IMsCalculationChainBranch.
Для метамодели можно задать параметры, которые будут влиять на расчет моделей, входящих в цепочку. Для работы с параметрами метамодели предназначен интерфейс IMsModelParam.
Для расчета всей цепочки метамодели с учетом последовательности элементов, циклов, условий и параметров предназначена задача моделирования.
После создания модели следует создать метамодель, содержащую модель «Сальдо торгового баланса, млрд.долл.США» для расчета.
Добавьте ссылки на системные сборки: Metabase, Ms, .
Sub UserProc;
Var
MB: IMetabase;
KMDesc: IMetabaseObjectDescriptor;
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
Meta: IMsMetaModel;
Model: IMsModel;
Root: IMsCalculationChainEntries;
Begin
MB := MetabaseClass.Active;
KMDesc := MB.ItemById("MODEL_SPACE");
// Создаем метамодель
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSMETAMODEL;
CrInfo.Id := "META_MODEL_BALANCE";
CrInfo.Name := "Метамодель для расчета сальдо";
CrInfo.Parent := KMDesc;
MObj := MB.CreateObject(CrInfo).Edit;
Meta := MObj As IMsMetaModel;
// Добавляем в цепочку расчета модель «Сальдо торгового баланса, млрд.долл.США»
Model := MB.ItemByIdNamespace("BALANCE_MODEL", KMDesc.Key).Bind As IMsModel;
Root := Meta.CalculationChain;
Root.AddModel(Model);
MObj.Save;
Debug.WriteLine("Создана метамодель '" + MObj.Name + "' с идентификатором '" + MObj.Id + "'");
End Sub UserProc;
После выполнения модуля будет создана метамодель «Метамодель для расчета сальдо» с идентификатором META_MODEL_BALANCE, информация об этом будет выведена в окно консоли.
Следующим шагом будет создание и расчет задачи моделирования.
См. также: