IMsCalculationChainSystem.Models

Синтаксис Fore

Models: IMsCalculationChainEntries;

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

Models: Prognoz.Platform.Interop.Ms.IMsCalculationChainEntries;

Описание

Свойство Models возвращает модели, входящие в систему уравнений.

Комментарии

Для добавления модели в систему используйте метод IMsCalculationChainSystem.AddModel, для удаления модели из системы - метод IMsCalculationChainSystem.RemoveModel.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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.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;

См. также:

IMsCalculationChainSystem