Callback: IMsProblemCalculationCallback;
Свойство Callback определяет объект для обработки событий, происходящих во время расчёта задачи.
При расчёте задачи возможны следующие события:
сработала точка останова;
возникла ошибка;
расчёт завершен;
подготавливается расчёт;
начат новый шаг расчёта;
выполнен шаг расчёта;
возникло предупреждение;
подготовка к сохранению данных;
сохранение данных.
Для выполнения примера предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», содержащего задачу моделирования с идентификатором «PROBLEM».
Добавьте ссылки на системные сборки «Metabase», «Ms». Также в примере используется класс MCallback, описание которого приведено в IMsProblemCalculationCallback.OnWarning.
Sub ProblemCalc;
Var
mb: IMetabase;
MsKey: Integer;
Problem: IMsProblem;
Calculation: IMsProblemCalculation;
CallBack: MCallback;
CalcSettings: IMsProblemCalculationSettings;
Begin
mb := MetabaseClass.Active;
// Получаем задачу моделирования
MsKey := mb.GetObjectKeyById("MODEL_SPACE");
Problem := mb.ItemByIdNamespace("PROBLEM", MsKey).Bind As IMsProblem;
// Задаем параметры расчёта задачи
CalcSettings := Problem.CreateCalculationSettings;
CalcSettings.FactIncluded := True;
CalcSettings.BreakOnError := True;
Calculation := Problem.Calculate(CalcSettings);
// Задаем обработчик событий
CallBack := New MCallback.Create;
Calculation.Callback := CallBack;
// Выполняем расчёт
Calculation.Run;
End Sub ProblemCalc;
После выполнения примера задача будет рассчитана. Если возникнет ошибка, то расчет будет остановлен. Обработчиком событий, возникающих при расчете задачи, является класс MCallback.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Metabase;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
Problem: IMsProblem;
Calculation: IMsProblemCalculation;
CallBack: MCallback;
CalcSettings: IMsProblemCalculationSettings;
Begin
mb := Params.Metabase;
// Получаем задачу моделирования
MsKey := mb.GetObjectKeyById("MODEL_SPACE");
Problem := mb.ItemByIdNamespace["PROBLEM", MsKey].Bind() As IMsProblem;
// Задаем параметры расчёта задачи
CalcSettings := Problem.CreateCalculationSettings();
CalcSettings.FactIncluded := True;
CalcSettings.BreakOnError := True;
Calculation := Problem.Calculate(CalcSettings);
// Задаем обработчик событий
CallBack := New MCallback.Create();
Calculation.Callback := CallBack;
// Выполняем расчёт
Calculation.Run();
End Sub;
См. также: