Использование глобальной переменной ETLTaskRunId

Переменная ETLTaskRunId возвращает идентификатор запуска задачи ETL, который будет записываться в журнал. В дальнейшем для журнала имеется возможность группировать операции, относящиеся к конкретному запуску задачи.

Для получения глобальной переменой необходимо в свойствах задачи ETL, которая использует обработчик событий, указать журнал, необходимый для записи сообщений при загрузке, иначе переменная будет возвращать значение «-1».

Рассмотрим пример получения переменной ETLTaskRunId в событии OnStartTask обработчика событий задачи ETL.

Пример Fore

Добавьте ссылки на системные сборки: 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.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[NullAs 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;

См. также:

Примеры