Models: IMsCalculationChainEntries;
Models: Prognoz.Platform.Interop.Ms.IMsCalculationChainEntries;
Свойство Models возвращает модели, входящие в систему уравнений.
Для добавления модели в систему используйте метод IMsCalculationChainSystem.AddModel, для удаления модели из системы - метод IMsCalculationChainSystem.RemoveModel.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», содержащим задачу моделирования с идентификатором «PROBLEM» и метамодель с идентификатором «METAMODEL».
Добавьте ссылки на системные сборки «Metabase», «Ms».
Sub ArrangeModels;
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Meta: IMsMetaModel;
CalcChain, Models: IMsCalculationChainEntries;
ChainEntry, Model: IMsCalculationChainEntry;
i, j: Integer;
CalcSystem: IMsCalculationChainSystem;
Begin
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
MsObj := mb.ItemById("MODEL_SPACE");
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace("PROBLEM", MsObj.Key).Edit As IMsProblem;
// Получаем метамодель
//Meta := Problem.MetaModel;
Meta := mb.ItemByIdNamespace("METAMODEL", MsObj.Key).Edit As IMsMetaModel;
CalcChain := Meta.CalculationChain;
// Выполняем автоматическое построение цепочки расчёта
CalcChain.ArrangeModels(MsArrangeMode.CreateSystems, Problem);
// Если в результате автоматического построения была создана
// система уравнений, то выводим в окно консоли наименование моделей,
// включенных в систему уравнений
For i := 0 To CalcChain.Count - 1 Do
ChainEntry := CalcChain.Item(i);
If ChainEntry.Type = MsCalculationChainEntryType.System Then
CalcSystem := ChainEntry As IMsCalculationChainSystem;
Models := CalcSystem.Models;
For j := 0 To Models.Count - 1 Do
Model := Models.Item(j);
Debug.WriteLine(Model.Name);
End For;
End If;
End For;
// Сохраняем изменения
(Meta As IMetabaseObject).Save;
(Problem As IMetabaseObject).Save;
End Sub ArrangeModels;
Результат выполнения примера: для метамодели «METAMODEL» будет выполнено автоматическое построение цепочки расчёта. Если в результате была создана система уравнений, то в окно консоли будут выведены наименования моделей, входящих в систему. Периоды расчёта системы будут взяты из задачи «PROBLEM».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Problem: IMsProblem;
Meta: IMsMetaModel;
CalcChain, Models: IMsCalculationChainEntries;
ChainEntry, Model: IMsCalculationChainEntry;
i, j: Integer;
CalcSystem: IMsCalculationChainSystem;
Begin
mb := Params.Metabase;
// Получаем контейнер моделирования
MsObj := mb.ItemById["MODEL_SPACE"];
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace["PROBLEM", MsObj.Key].Edit() As IMsProblem;
// Получаем метамодель
//Meta := Problem.MetaModel;
Meta := mb.ItemByIdNamespace["METAMODEL", MsObj.Key].Edit() As IMsMetaModel;
CalcChain := Meta.CalculationChain;
// Выполняем автоматическое построение цепочки расчёта
CalcChain.ArrangeModels(MsArrangeMode.mamCreateSystems, Problem);
// Если в результате автоматического построения была создана
// система уравнений, то выводим в окно консоли наименование моделей,
// включенных в систему уравнений
For i := 0 To CalcChain.Count - 1 Do
ChainEntry := CalcChain.Item[i];
If ChainEntry.Type = MsCalculationChainEntryType.mccetSystem Then
CalcSystem := ChainEntry As IMsCalculationChainSystem;
Models := CalcSystem.Models;
For j := 0 To Models.Count - 1 Do
Model := Models.Item[j];
System.Diagnostics.Debug.WriteLine(Model.Name);
End For;
End If;
End For;
// Сохраняем изменения
(Meta As IMetabaseObject).Save();
(Problem As IMetabaseObject).Save();
End Sub;
См. также: