IEtlPlainDataCopy.EventId

Синтаксис

EventId: String;

EventId: String;

Описание

Свойство EventId определяет идентификатор события, которое будет вызвано при возникновении ошибки выполнения задачи ETL.

Комментарии

Для определения способа обработки ошибок, которые могут возникнуть при загрузке данных, используйте свойство IEtlPlainDataCopy.ActionOnProblem.

Список пользовательских событий формируется в коллекции IMetabaseCustomExtender.Events.

Пример

Для выполнения примера предполагается наличие:

"Key","Country Name","Owner"

512,"Afghanistan",3

914,"Albania",1

612,"Algeria",2

Также в репозитории добавлено пользовательское событие с идентификатором «CUSTOM_EVENT».

Добавьте ссылки на системные сборки Metabase, Etl, Dt, Db, Andy, Drawing.

Sub UserProc;
Var
    MB: IMetabase;
    Task: IEtlTask;
    CopyObj: IEtlPlainDataCopy;
    FProvider: IDtTextProvider;
    Tab: IDatasetModel;
    FConsumer: IDtMetabaseConsumer;
    ProvFields, ConsFields: IDtFieldDefinitions;
    i: Integer;
    WxConsumer: IWxRectangle;
    WxETLConsumer: IWxEtlObject;
Begin
    MB := MetabaseClass.Active;
    Task := MB.ItemById(
"ETL").Edit As IEtlTask;
    
// Создание объекта, копирующего данные
    CopyObj := Task.Create(EtlObjectType.PlainDataCopy) As IEtlPlainDataCopy;
    CopyObj := CopyObj.Edit;
    
// Настройка параметров источника данных
    FProvider := New DtTextProvider.Create As IDtTextProvider;
    FProvider.File := 
"C:\ETL_imp.txt";
    FProvider.DelimitedColumnDelimiter := 
",";
    FProvider.HeaderRow := 
1;
    FProvider.FormatType := DtTextFormatType.Delimited;
    FProvider.RangeHasHeader := 
True;
    FProvider.RangeFirstRow := 
1;
    COpyObj.Provider := FProvider;
    
// Настройка параметров приёмника данных
    FConsumer := New DtMetabaseConsumer.Create;
    Tab := MB.ItemById(
"TBL").Edit As IDatasetModel;
    FConsumer.Dataset := Tab;
    CopyObj.Consumer := FConsumer;
    
// Привязка данных источника и приёмника
    ProvFields := FProvider.Fields;
    ConsFields := FConsumer.Fields;
    CopyObj.AutoLink;
    
For i := 0 To ProvFields.Count - 1 Do
        
If Not CopyObj.IsLinked(ProvFields.Item(i).Name, ConsFields.Item(i).Name) Then
            CopyObj.AddLink(ProvFields.Item(i).Name, ConsFields.Item(i).Name);
        
End If;
    
End For;
    
// Очистка приёмника данных
    CopyObj.ClearConsumer := True;
    
// Обработка ошибок
    CopyObj.ActionOnProblem := EtlActionOnProblem.DiscardRecordsInTransaction;
    CopyObj.SaveInvalidRecs := 
True;
    CopyObj.InvalidRecsFileName := 
"Errors";
    CopyObj.UseStopLimit := 
True;
    CopyObj.StopLimit := 
2;
    CopyObj.CommitCount := 
10;
    CopyObj.EventId := 
"CUSTOM_EVENT";
    
// Сохранение объекта, копирующего данные
    CopyObj.Save;
    
// Создание визуального объекта
    WxConsumer := Task.Workspace.CreateRectangle;
    WxETLConsumer := 
New WxEtlObject.Create;
    WxETLConsumer.EtlObject := CopyObj;
    WxConsumer.Style.TextPosition := WxTextPosition.Bottom;
    WxConsumer.Style.PictureMarginTop := -
10;
    WxConsumer.PinPosition := 
New GxPointF.Create(5050);
    WxConsumer.Extension := WxETLConsumer 
As IWxShapeExtension;
    
// Сохранение объекта задачи ETL
    (Task As IMetabaseObject).Save;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Etl;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Andy;
Imports Prognoz.Platform.Interop.Drawing;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Task: IEtlTask;
    CopyObj: IEtlPlainDataCopy;
    FProvider: IDtTextProvider;
    Tab: IDatasetModel;
    FConsumer: IDtMetabaseConsumer;
    ProvFields, ConsFields: IDtFieldDefinitions;
    i: Integer;
    WxConsumer: IWxRectangle;
    WxETLConsumer: IWxEtlObject;
    OutPoint: GxPointF = 
New GxPointFClass();
Begin
    MB := Params.Metabase;
    Task := MB.ItemById[
"ETL"].Edit() As IEtlTask;
    
// Создание объекта, копирующего данные
    CopyObj := Task.Create(EtlObjectType.eotPlainDataCopy) As IEtlPlainDataCopy;
    CopyObj := CopyObj.Edit();
    
// Настройка параметров источника данных
    FProvider := New DtTextProvider.Create() As IDtTextProvider;
    FProvider.File := 
"C:\temp\ETL_imp.txt";
    FProvider.DelimitedColumnDelimiter := 
",";
    FProvider.HeaderRow := 
1;
    FProvider.FormatType := DtTextFormatType.tftDelimited;
    FProvider.RangeHasHeader := 
True;
    FProvider.RangeFirstRow := 
1;
    COpyObj.Provider := FProvider;
    
// Настройка параметров приёмника данных
    FConsumer := New DtMetabaseConsumer.Create();
    Tab := MB.ItemById[
"TBL"].Edit() As IDatasetModel;
    FConsumer.Dataset := Tab;
    CopyObj.Consumer := FConsumer;
    
// Привязка данных источника и приёмника
    ProvFields := FProvider.Fields;
    ConsFields := FConsumer.Fields;
    CopyObj.AutoLink();
    
For i := 0 To ProvFields.Count - 1 Do
        
If Not CopyObj.IsLinked(ProvFields.Item[i].Name, ConsFields.Item[i].Name) Then
            CopyObj.AddLink(ProvFields.Item[i].Name, ConsFields.Item[i].Name);
        
End If;
    
End For;
    
// Очистка приёмника данных
    CopyObj.ClearConsumer := True;
    
// Обработка ошибок
    CopyObj.ActionOnProblem := EtlActionOnProblem.aopDiscardRecordsInTransaction;
    CopyObj.SaveInvalidRecs := 
True;
    CopyObj.InvalidRecsFileName := 
"Errors";
    CopyObj.UseStopLimit := 
True;
    CopyObj.StopLimit := 
2;
    CopyObj.CommitCount := 
10;
    CopyObj.EventId := 
"CUSTOM_EVENT";
    
// Сохранение объекта, копирующего данные
    CopyObj.Save();
    
// Создание визуального объекта
    WxConsumer := Task.Workspace.CreateRectangle();
    WxETLConsumer := 
New WxEtlObject.Create();
    WxETLConsumer.EtlObject := CopyObj;
    WxConsumer.Style.TextPosition := WxTextPosition.wtpBottom;
    WxConsumer.Style.PictureMarginTop := -
10;
    OutPoint := WxConsumer.PinPosition;
    OutPoint.Create(
5050);
    WxConsumer.Extension := WxETLConsumer 
As IWxShapeExtension;
    
// Сохранение объекта задачи ETL
    (Task As IMetabaseObject).Save();
End Sub;

В результате выполнения примера в задаче ETL будет создан новый объект, осуществляющий копирование данных. Копирование будет осуществляться из текстового файла в таблицу репозитория. Для объекта «Копирование данных» будут заданы настройки:

См. также:

IEtlPlainDataCopy