IEtlPlainDataConsumer.KeyFieldNames

Синтаксис Fore

KeyFieldNames: String;

Синтаксис Fore.NET

KeyFieldNames: string;

Описание

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

Комментарии

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

Пример Fore

Для выполнения примера в репозитории предполагается наличие задачи 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.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

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

Public Shared Sub Main(Params: StartParams);
Var
    Metabase: IMetabase;
    MObj: IMetabaseObject;
    EtlTask: IEtlTask;

    EtlConsumer: IEtlPlainDataConsumer;
    Fields: IEtlPlainFields;
    Field: IEtlPlainField;
    MBConsumer: IDtMetabaseConsumer;
    Tab: IDatasetModel;
Begin
    Metabase := Params.Metabase;
    MObj := Metabase.ItemById["ETL"].Edit();
    EtlTask := MObj As IEtlTask;
    Tab := Metabase.ItemById["TABLE"].Bind() As IDatasetModel;
    EtlConsumer := EtlTask.Create(EtlObjectType.eotPlainDataMetabaseConsumer) 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.ddtString;
    Field := Fields.Add();
    Field.Id := "Id";
    Field.Name := "Id";
    Field.DataType := DbDataType.ddtInteger;
    Field := Fields.Add();

    Field.Id := "Order";
    Field.Name := "Order";
    Field.DataType := DbDataType.ddtInteger;
    Fields.Save();
    EtlConsumer.KeyFieldNames := "ID;NAME";
    EtlConsumer.Save();
    CreateWX(EtlConsumer, EtlTask);
    MObj.Save();
End Sub;

Public Shared Sub CreateWX(CopyObj: IEtlPlainDataConsumer; etltask: IEtltask);
Var
    WxDataTrans: IWxRectangle;
    WxETLDataTrans: WxETLObject = New WxETLObjectClass();
    OutPoint: GxPointF = New GxPointFClass();
Begin

    WxDataTrans := EtlTask.Workspace.CreateRectangle();
    WxDataTrans.Id := CopyObj.Id;
    WxETLDataTrans.EtlObject := CopyObj;
    WxDataTrans.Style.TextPosition := WxTextPosition.wtpBottom;
    WxDataTrans.Style.PictureMarginTop := -10;
    OutPoint := WxDataTrans.PinPosition;
    OutPoint.Create(2020);
    WxDataTrans.Extension := WxETLDataTrans As IWxShapeExtension;
End Sub CreateWX;

См. также:

IEtlPlainDataConsumer