IEtlPlainDataConsumer.KeyFieldNames

Синтаксис

KeyFieldNames: String;

Описание

Свойство KeyFieldNames определяет поля для идентификации одинаковых записей в источнике и приемнике.

Комментарии

Свойству следует передавать строку, содержащую идентификаторы полей через точку с запятой. Данное свойство актуально, только если приемник данных настроен на таблицу репозитория. Ниже рассмотрен пример использования идентификации записей. Источник и приемник настроены на две одинаковые по структуре таблицы репозитория соответственно. Каждая таблица имеет три поля: «Код», «Наименование» и «Порядок». Для приемника обновление записей установлено по полям «Код» и «Наименование». При таких настройках, если в таблице-источнике у существующей записи изменится значение поля «Порядок», при этом неизменными останутся значения в полях «Код» и «Наименование», то после загрузки данных в таблице приемнике у соответствующей записи (значения «Код» и «Наименование» совпадают со значениями в источнике) изменится только значение «Порядок». Если же для приемника не установить обновление записей по полям «Код» и «Наименование», то после загрузки данных в таблице приемнике появится новая запись.

Пример

Для выполнения примера в репозитории предполагается наличие задачи ETL с идентификатором «ETL» и таблицы с идентификатором «Тable», которая будет приемником данных.

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

Sub  UserProc;
Var
    Metabase: IMetabase;
    MObj: IMetabaseObject;
    EtlTask: IEtlTask;
    EtlConsumer: IEtlPlainDataConsumer;
    Fields: IEtlPlainFields;
    Field: IEtlPlainField;
    MBConsumer: IDtMetabaseConsumer;
    Tab: IDatasetModel;
Begin
    Metabase := MetabaseClass.Active;
    MObj := Metabase.ItemById(
"ETL" ).Edit;

    EtlTask := MObj  As  IEtlTask;
    Tab := Metabase.ItemById(
"TABLE").Bind As  IDatasetModel;
    EtlConsumer := EtlTask.Create(EtlObjectType.PlainDataMetabaseConsumer) 
As  IEtlPlainDataConsumer;
    EtlConsumer := EtlConsumer.Edit;
    EtlConsumer.ClearConsumer := 
False ;
    EtlConsumer.Id := 
"MB_Consumer" ;
    EtlConsumer.Name := 
"Приемник данных репозитория" ;
    MBConsumer := EtlConsumer.Consumer 
As  IDtMetabaseConsumer;
    MBConsumer.Dataset := Tab;
    Fields := EtlConsumer.PlainInput.Fields;
    Fields := Fields.Edit;

    Field := Fields.Add;
    Field.Id := 
"Name" ;
    Field.Name := 
"Name" ;
    Field.DataType := DbDataType.String;
    Field := Fields.Add;
    Field.Id := 
"Id" ;
    Field.Name := 
"Id" ;
    Field.DataType := DbDataType.Integer;
    Field := Fields.Add;
    Field.Id := 
"Order" ;
    Field.Name := 
"Order" ;
    Field.DataType := DbDataType.Integer;
    Fields.Save;

    EtlConsumer.KeyFieldNames :=  "ID;NAME" ;
    EtlConsumer.Save;
    CreateWX(EtlConsumer, EtlTask);
    MObj.Save;
End Sub  UserProc;

Sub  CreateWX(CopyObj: IEtlPlainDataConsumer; etltask: IEtltask);
Var
    WxDataTrans: IWxRectangle;
    WxETLDataTrans: IWxEtlObject;
Begin
    WxDataTrans := EtlTask.Workspace.CreateRectangle;
    WxDataTrans.Id := CopyObj.Id;

    WxETLDataTrans :=  New  WxEtlObject.Create;
    WxETLDataTrans.EtlObject := CopyObj;
    WxDataTrans.Style.TextPosition := WxTextPosition.Bottom;
    WxDataTrans.Style.PictureMarginTop := -
10 ;
    WxDataTrans.PinPosition := 
New GxPointF.Create(2020 );
    WxDataTrans.Extension := WxETLDataTrans 
As  IWxShapeExtension;
End Sub CreateWX;

После выполнения примера (UserProc) для задачи ETL будет создан приемник данных репозитория, для которого настроено обновление записей по полям Id и Name.

См. также:

IEtlPlainDataConsumer