Assign(Preiod: IMsDatePeriod);
Assign(Preiod: Prognoz.Platform.Interop.Ms.MsDatePeriod);
Preiod. Копируемый период.
Метод Assign копирует параметры указанного периода в текущий период.
Данный метод позволяет полностью скопировать параметры периода, включая внутренние свойства.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу прогнозирования с идентификатором «PROBLEM_COPIED».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
CrInfo: IMetabaseObjectCreateInfo;
ProblemCopied, ProblemCopy: IMsProblem;
i: Integer;
CalcSettCopied, CalcSettCopy: IMsProblemCalculationSettings;
PeriodCopied, PeriodCopy: IMsModelPeriod;
OutputPeriodCopied, OutputPeriodCopy: IMsDatePeriod;
ProblemCalc: IMsProblemCalculation;
Begin
mb := metabaseClass.Active;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем копируемую задачу
ProblemCopied := mb.ItemByIdNamespace("PROBLEM_COPIED", MsKey).Edit As IMsProblem;
// Создаем объект для задачи-копии
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM;
CrInfo.Id := MB.GenerateId("PROBLEM_COPY", MsKey);
CrInfo.Name := "Задача моделирования (копия)";
CrInfo.Parent := ProblemCopied.MetabaseObject.Parent;
ProblemCopy := MB.CreateObject(CrInfo).Edit As IMsProblem;
// Копируем метамодель
ProblemCopy.MetaModel := ProblemCopied.MetaModel;
// Копируем параметры задачи
ProblemCopy.Details := ProblemCopied.Details;
// Копируем сценарии
For i := 0 To ProblemCopied.Scenarios.Count - 1 Do
ProblemCopy.Scenarios.AddScenario(ProblemCopied.Scenarios.Item(i));
End For;
// Копируем параметры периода выгрузки данных
CalcSettCopied := ProblemCopied.CreateCalculationSettings;
OutputPeriodCopied := CalcSettCopied.OutputPeriod As IMsDatePeriod;
CalcSettCopy := ProblemCopy.CreateCalculationSettings;
OutputPeriodCopy := CalcSettCopy.OutputPeriod As IMsDatePeriod;
OutputPeriodCopy.Assign(OutputPeriodCopied);
// Копируем периоды расчета задачи
PeriodCopied := CalcSettCopied.Period;
PeriodCopy := CalcSettCopy.Period;
PeriodCopy.Assign(PeriodCopied);
// Сохраняем копию
(ProblemCopy As IMetabaseObject).Save;
// Выполняем расчет задачи-копии
ProblemCalc := ProblemCopy.Calculate(CalcSettCopy);
ProblemCalc.Run;
End Sub UserProc;
В результате выполнения примера будет скопирована задача «PROBLEM_COPIED». Созданная копия будет рассчитана.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
CrInfo: IMetabaseObjectCreateInfo;
ProblemCopied, ProblemCopy: IMsProblem;
i: Integer;
CalcSettCopied, CalcSettCopy: IMsProblemCalculationSettings;
PeriodCopied, PeriodCopy: IMsModelPeriod;
OutputPeriodCopied, OutputPeriodCopy: IMsDatePeriod;
ProblemCalc: IMsProblemCalculation;
Begin
mb := Params.Metabase;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем копируемую задачу
ProblemCopied := mb.ItemByIdNamespace["PROBLEM_COPIED", MsKey].Edit() As IMsProblem;
// Создаем объект для задачи-копии
CrInfo := MB.CreateCreateInfo();
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM As integer;
CrInfo.Id := MB.GenerateId("PROBLEM_COPY", MsKey);
CrInfo.Name := "Задача моделирования (копия)";
CrInfo.Parent := ProblemCopied.MetabaseObject.Parent;
ProblemCopy := MB.CreateObject(CrInfo).Edit() As IMsProblem;
// Копируем метамодель
ProblemCopy.MetaModel := ProblemCopied.MetaModel;
// Копируем параметры задачи
ProblemCopy.Details := ProblemCopied.Details;
// Копируем сценарии
For i := 0 To ProblemCopied.Scenarios.Count - 1 Do
ProblemCopy.Scenarios.AddScenario(ProblemCopied.Scenarios.Item[i]);
End For;
// Копируем параметры периода выгрузки данных
CalcSettCopied := ProblemCopied.CreateCalculationSettings();
OutputPeriodCopied := CalcSettCopied.OutputPeriod As IMsDatePeriod;
CalcSettCopy := ProblemCopy.CreateCalculationSettings();
OutputPeriodCopy := CalcSettCopy.OutputPeriod As IMsDatePeriod;
OutputPeriodCopy.Assign(OutputPeriodCopied As MsDatePeriod);
// Копируем периоды расчета задачи
PeriodCopied := CalcSettCopied.Period;
PeriodCopy := CalcSettCopy.Period;
PeriodCopy.Assign(PeriodCopied);
// Сохраняем копию
(ProblemCopy As IMetabaseObject).Save();
// Выполняем расчет задачи-копии
ProblemCalc := ProblemCopy.Calculate(CalcSettCopy);
ProblemCalc.Run();
End Sub;
См. также: