Переменная ETLTaskRunId возвращает идентификатор запуска задачи ETL, который будет записываться в журнал. В дальнейшем для журнала имеется возможность группировать операции, относящиеся к конкретному запуску задачи.
Для получения глобальной переменой необходимо в свойствах задачи ETL, которая использует обработчик событий, указать журнал, необходимый для записи сообщений при загрузке, иначе переменная будет возвращать значение «-1».
Рассмотрим пример получения переменной ETLTaskRunId в событии OnStartTask обработчика событий задачи ETL.
Добавьте ссылки на системные сборки: Collections, Etl, Ui.
Class EventsClass: EtlTaskExecutionEvents
// Событие, возникающее при запуске задачи ETL
Public Sub OnStartTask(Task: IEtlTask);
Var
App: IApplication;
Glob: IApplicationGlobals;
v: Variant;
Begin
App := WinApplication.Instance As IApplication;
Glob := App.Globals;
v := Glob.Item("ETLTaskRunId");
WinApplication.InformationBox("Событие OnStartTask" + #13 + #10 +
"Количество объектов задачи ETL = " + Task.Count.ToString + #13 + #10 +
"Идентификатор запуска задачи ETL - " + v);
End Sub OnStartTask;
// Событие, возникающее при завершении задачи ETL
Public Sub OnEndTask(Task: IEtlTask; Duration, TotalRec, ErrorRec: Integer);
Begin
WinApplication.InformationBox("Событие OnEndTask" + #13 + #10 +
"Количество объектов задачи ETL = " + Task.Count.ToString + #13 + #10 +
"Прогресс выполнения задачи = " + Duration.ToString + #13 + #10 +
"Количество записей на входе = " + TotalRec.ToString + #13 + #10 +
"Количество пропущенных записей на выходе = " + ErrorRec.ToString);
End Sub OnEndTask;
// Событие, возникающее при запуске блока задачи ETL
Public Sub OnStartBlock(Task: IEtlTask; Object: IEtlObject);
Begin
WinApplication.InformationBox("Событие OnStartBlock" + #13 + #10 +
"Наименование объекта задачи ETL - " + Task.Item(0).Name + #13 + #10 +
"Идентификатор объекта задачи ETL - " + Object.Id);
End Sub OnStartBlock;
// Событие, возникающее при завершении блока задачи ETL
Public Sub OnEndBlock(Task: IEtlTask; Object: IEtlObject; Duration: Integer; TotalRecIn, TotalRecOut, ErrorRec: IDictionary);
Begin
WinApplication.InformationBox("Событие OnEndBlock" + #13 + #10 +
"Наименование объекта задачи ETL - " + Task.Item(0).Name + #13 + #10 +
"Идентификатор объекта задачи ETL - " + Object.Id + #13 + #10 +
"Прогресс выполнения задачи = " + Duration.ToString + #13 + #10 +
"Количество записей на входе = " + TotalRecIn.Count.ToString + #13 + #10 +
"Количество записей на входе = " + TotalRecOut.Count.ToString + #13 + #10 +
"Количество пропущенных записей на выходе = " + ErrorRec.Count.ToString);
End Sub OnEndBlock;
// Событие, возникающее в процессе выполнения задачи ETL
Public Sub OnProgress(Task: IEtlTask; Progress: Integer);
Begin
WinApplication.InformationBox("Событие OnProgress" + #13 + #10 +
"Наименование объекта задачи ETL - " + Task.Item(0).Name + #13 + #10 +
"Прогресс выполнения задачи = " + Progress.ToString);
End Sub OnProgress;
// Событие, возникающее при возникновении ошибки блока задачи ETL
Public Sub OnError(Task: IEtlTask; Object: IEtlObject; Excep: IException);
Begin
WinApplication.InformationBox("Событие OnError" + #13 + #10 +
"Наименование объекта задачи ETL - " + Task.Item(0).Name + #13 + #10 +
"Идентификатор объекта задачи ETL - " + Object.Id + #13 + #10 +
"Текст ошибки - " + Excep.Message);
End Sub OnError;
End Class EventsClass;
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Etl;
Imports Prognoz.Platform.Interop.ForeCollections;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Ui;
Imports System.Windows.Forms;
…
Public Class EventsClass: EtlTaskExecutionEvents
// Событие, возникающее при запуске задачи ETL
Public Sub OnStartTask(Task: IEtlTask);
Var
App: IApplication;
Glob: IApplicationGlobals;
v: object;
WinApplication: WinApplicationClassClass = New WinApplicationClassClass();
Begin
App := WinApplication.Instance[Null] As IApplication;
Glob := App.Globals;
v := Glob.Item["ETLTaskRunId"];
MessageBox.Show("Событие OnStartTask" + "u000d\u000a" +
"Количество объектов задачи ETL = " + Task.Count.ToString() + "u000d\u000a" +
"Идентификатор запуска задачи ETL - " + v);
End Sub OnStartTask;
// Событие, возникающее при завершении задачи ETL
Public Sub OnEndTask(Task: IEtlTask; Duration, TotalRec, ErrorRec: Integer);
Begin
MessageBox.Show("Событие OnEndTask" + "u000d\u000a" +
"Количество объектов задачи ETL = " + Task.Count.ToString() + "u000d\u000a" +
"Прогресс выполнения задачи = " + Duration.ToString() + "u000d\u000a" +
"Количество записей на входе = " + TotalRec.ToString() + "u000d\u000a" +
"Количество пропущенных записей на выходе = " + ErrorRec.ToString());
End Sub OnEndTask;
// Событие, возникающее при запуске блока задачи ETL
Public Sub OnStartBlock(Task: IEtlTask; Object: IEtlObject);
Begin
MessageBox.Show("Событие OnStartBlock" + "u000d\u000a" +
"Наименование объекта задачи ETL - " + Task.Item[0].Name + "u000d\u000a" +
"Идентификатор объекта задачи ETL - " + Object.Id);
End Sub OnStartBlock;
// Событие, возникающее при завершении блока задачи ETL
Public Sub OnEndBlock(Task: IEtlTask; Object: IEtlObject; Duration: integer; TotalRecIn, TotalRecOut, ErrorRec: IDictionary);
Begin
MessageBox.Show("Событие OnEndBlock" + "u000d\u000a" +
"Наименование объекта задачи ETL - " + Task.Item[0].Name + "u000d\u000a" +
"Идентификатор объекта задачи ETL - " + Object.Id + "u000d\u000a" +
"Прогресс выполнения задачи = " + Duration.ToString() + "u000d\u000a" +
"Количество записей на входе = " + TotalRecIn.Count.ToString() + "u000d\u000a" +
"Количество записей на входе = " + TotalRecOut.Count.ToString() + "u000d\u000a" +
"Количество пропущенных записей на выходе = " + ErrorRec.Count.ToString());
End Sub OnEndBlock;
// Событие, возникающее в процессе выполнения задачи ETL
Public Sub OnProgress(Task: IEtlTask; Progress: Integer);
Begin
MessageBox.Show("Событие OnProgress" + "u000d\u000a" +
"Наименование объекта задачи ETL - " + Task.Item[0].Name + "u000d\u000a" +
"Прогресс выполнения задачи = " + Progress.ToString());
End Sub OnProgress;
// Событие, возникающее при возникновении ошибки блока задачи ETL
Public Sub OnError(Task: IEtlTask; Object: IEtlObject; Excep: Exception);
Begin
MessageBox.Show("Событие OnError" + "u000d\u000a" +
"Наименование объекта задачи ETL - " + Task.Item[0].Name + "u000d\u000a" +
"Идентификатор объекта задачи ETL - " + Object.Id + "u000d\u000a" +
"Текст ошибки - " + Excep.Message);
End Sub OnError;
End Class EventsClass;
См. также: