IMsMetaModelVisualController.CopyScenarioData

Синтаксис Fore

CopyScenarioData(
                 DestScenarioKey: Array;
                 SourceScenarioKey: Integer;
                 EntryKeys: Array;
                 [CopyAll: Boolean = False]

                );

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

CopyScenarioData(
                 DestScenarioKey: System.Array;
                 SourceScenarioKey: uinteger;
                 EntryKeys: System.Array;

                 CopyAll: boolean
                );

Параметры

DestScenarioKey. Массив ключей сценариев-приёмников;

SourceScenarioKey. Ключ сценария-источника;

EntryKeys. Массив ключей копируемых переменных;

CopyAll. Признак того, копировать ли данные всех переменных модели.

Описание

Метод CopyScenarioData копирует данные по сценариям моделирования.

Комментарии

Для корректного копирования данных задайте значение свойства IMsMetaModelVisualController.Problem.

Для копирования данных по сценарию «Факт» используйте ключ «-1».

Параметр EntryKeys должен содержать ключи элементов цепочки расчёта метамодели, которые являются переменными.

Возможные значения CopyAll:

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», содержащего задачу моделирования с идентификатором «WEB_PROBLEM». Задача моделирования должна содержать несколько сценариев моделирования и внутреннюю метамодель.

Добавьте ссылки на системные сборки «Metabase», «Ms».

Sub CopyScenarioData;
Var
    MB: IMetabase;
    MsObj: IMetabaseObject;
    Problem: IMsProblem;
    ProbScen: IMsProblemScenarios;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    DestScen: IMsScenario;
    DestScenKeys, VarsKeys: Array[1Of Integer;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := MB.ItemById("MODEL_SPACE").Bind;
    // Получаем задачу моделирования
    Problem := MB.ItemByIdNamespace("WEB_PROBLEM", MsObj.Key).Bind As IMsProblem;
    // Получаем сценарии задачи моделирования
    ProbScen := Problem.Scenarios;
    // Получаем 1-й сценарий в задаче моделирования 
    DestScen := ProbScen.Item(0);
    DestScenKeys[0] := (DestScen As IMetabaseObject).Key;
    // Получаем метамодель  
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Задаем задачу моделирования
    MetaVisual.Problem := Problem;
    // Получаем ключ 1-й переменной в цепочке расчёта   
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item(i);
        If ChainEl.Type = MsCalculationChainEntryType.Variable Then
            VarsKeys[0] := ChainEl.Key;
            Break;
        End If;
    End For;
    // Копируем данные 1-й переменной по сценарию Факт на 1-й сценарий
    MetaVisual.CopyScenarioData(DestScenKeys, -1, VarsKeys);
End Sub CopyScenarioData;

Результат выполнения примера: данные первой входной переменной в цепочке расчёта метамодели будут скопированы по сценарию «Факт» на первый сценарий в задаче моделирования.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MsObj: IMetabaseObject;
    Problem: IMsProblem;
    ProbScen: IMsProblemScenarios;
    Meta: IMsMetaModel;
    MetaVisual: IMsMetaModelVisualController;
    DestScen: IMsScenario;
    DestScenKeys, VarsKeys: Array[1Of integer;
    ChainEnts: IMsCalculationChainEntries;
    ChainEl: IMsCalculationChainEntry;
    i: Integer;
Begin
    MB := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := MB.ItemById["MODEL_SPACE"].Bind();
    // Получаем задачу моделирования
    Problem := MB.ItemByIdNamespace["WEB_PROBLEM", MsObj.Key].Bind() As IMsProblem;
    // Получаем сценарии задачи моделирования
    ProbScen := Problem.Scenarios;
    // Получаем 1-й сценарий в задаче моделирования 
    DestScen := ProbScen.Item[0];
    DestScenKeys[0] := (DestScen As IMetabaseObject).Key As integer;
    // Получаем метамодель  
    Meta := Problem.MetaModel;
    MetaVisual := Meta.VisualController;
    // Задаем задачу моделирования
    MetaVisual.Problem := Problem;
    // Получаем ключ 1-й переменной в цепочке расчёта   
    ChainEnts := Meta.CalculationChain;
    For i := 0 To ChainEnts.Count - 1 Do
        ChainEl := ChainEnts.Item[i];
        If ChainEl.Type = MsCalculationChainEntryType.mccetVariable Then
            VarsKeys[0] := ChainEl.Key As integer;
            Break;
        End If;
    End For;
    // Копируем данные 1-й переменной по сценарию Факт на 1-й сценарий
    MetaVisual.CopyScenarioData(DestScenKeys, (-1As uinteger, VarsKeys, False);
End Sub;

См. также:

IMsMetaModelVisualController