IDtCubeConsumer.Loader

Синтаксис Fore

Loader: Object;

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

Loader: Object;

Описание

Свойство Loader возвращает параметры загрузчика данных в куб.

Комментарии

Свойство возвращает параметры загрузчика, описываемого интерфейсом ICubeLoaderFromSource. В полученном загрузчике необходимо произвести следующие настройки:

Пример Fore

Для выполнения примера предполагается наличие в репозитории задачи ETL с идентификатором «ETL_Task». В задаче создан источник с идентификатором «PLAINDATAMETABASEPROVIDER1». Также в репозитории имеется папка «F_Cubes» и база данных «DB».

Sub UserProc;
Var
    MB: IMetabase;
    ETLTask: IEtlTask;
    EtlConsumer: IEtlPlainDataConsumer;
    EtlProvider: IEtlPlainDataProvider;
    ConsumerIn: IEtlPlainInput;
    ProviderOut: IEtlPlainOutput;
    DtCube: IDtCubeConsumer;
    Loader: ICubeLoaderFromSource;
    Link: IEtlPlainLink;
    Shapes: IWxShapes;
Begin
    MB := MetabaseClass.Active;
    ETLTask := MB.ItemById("ETL_Task").Edit As IEtlTask;
    //Создание нового приёмника - приёмник куб
    EtlConsumer := ETLTask.Create(EtlObjectType.PlainDataCubeConsumer) As IEtlPlainDataConsumer;
    EtlConsumer := EtlConsumer.Edit;
    EtlConsumer.ClearConsumer := True;
    EtlConsumer.Id := "CUBE_Consumer";
    EtlConsumer.Name := "Приёмник-Куб";
    //Создаем визуальный объект приёмника
    CreateWX(ETLTask, EtlConsumer, 00);
    //Настраиваем приёмник
    DtCube := EtlConsumer.Consumer As IDtCubeConsumer;
    //Информация о создаваемом кубе
    Loader := DtCube.Loader As ICubeLoaderFromSource;
    Loader.Type := CubeLoaderType.Cube;
    Loader.Database := MB.ItemById("DB").Open(NullAs IDatabaseInstance;
    Loader.Parent := MB.ItemById("F_Cubes").Bind;
    //Источник, с которым будет связан приёмник
    EtlProvider := ETLTask.FindById("PLAINDATAMETABASEPROVIDER1"As IEtlPlainDataProvider;
    Loader.Init(EtlProvider.Provider);
    //Сопоставление полей источника и приёмника
    ConsumerIn := EtlConsumer.PlainInput;
    ProviderOut := EtlProvider.PlainOutput;
    FillFields(ConsumerIn.Fields, ProviderOut.Fields);
    //Сохранение приёмника
    EtlConsumer.Save;
    //Создание связи
    Link := CreateLink(ETLTask, ProviderOut, ConsumerIn);
    //Создание визуальных связей
    Shapes := ETLTask.Workspace.Shapes;
    CreateWXLink(ETLTask, Shapes.FindById(EtlProvider.Id), Shapes.FindById(EtlConsumer.Id), Link);
    //Сохранение задачи
    (ETLTask As IMetabaseObject).Save;
End Sub UserProc;
//Создание визуального объекта
Sub CreateWX(ETLTask: IEtlTask; ETLObject: IEtlObject; XPosition: Integer; YPosition: Integer);
Var
    WxRect: IWxRectangle;
    WxETLObj: IWxEtlObject;
Begin
    WxRect := ETLTask.Workspace.CreateRectangle;
    WxRect.Id := ETLObject.Id;
    WxETLObj := New WxEtlObject.Create;
    WxETLObj.EtlObject := ETLObject;
    WxRect.Style.TextPosition := WxTextPosition.Bottom;
    WxRect.Style.PictureMarginTop := -10;
    WxRect.PinPosition := New GxPointF.Create(XPosition, YPosition);
    WxRect.Extension := WxETLObj As IWxShapeExtension;
End Sub CreateWX;
//Сопоставление списков полей входов/выходов
Sub FillFields(Fields, FieldsSource: IEtlPlainFields);
Begin
    Fields := Fields.Edit;
    Fields.Fill(FieldsSource);
    Fields.Save;
End Sub FillFields;
//Создание связи между объектами
Function CreateLink(ETLTask: IEtlTask; Output: IEtlPlainOutput; Input: IEtlPlainInput): IEtlPlainLink;
Var
    Link: IEtlPlainLink;
Begin
    Link := ETLTask.CreatePlainLink;
    Link.SourceObjectOutput := Output;
    Link.DestinationObjectInput := Input;
    Link.FillDefault;
    Return Link;
End Function CreateLink;
//Создание визуальных связей
Sub CreateWXLink(ETLTask: IEtlTask; Shape1: IWxShape; Shape2: IWxShape; Link: IEtlPlainLink);
Var
    WLink: IWxLink;
    WxETLLink: IWxEtlObject;
Begin
    //Создаем визуальные объекты связи
    WLink := ETLTask.Workspace.AutoLinkShapes(Shape1, Shape2);
    WLink.Style.LinePenBeginWxCap := WxLineCap.Flat;
    WLink.Style.LinePenEndWxCap := WxLineCap.Arrow30DegreeFilled;
    WxETLLink := New WxEtlObject.Create;
    WxETLLink.EtlObject := Link;
    WLink.Extension := WxETLLink As IWxShapeExtension;
End Sub CreateWXLink;

При выполнении примера в задаче ETL будет создан новый приёмник. Приёмник будет экспортировать данные в новый куб репозитория. Структура куба будет сформирована автоматически на основании информации о полях источника, с которым будет связан приёмник. Будут созданы все необходимые визуальные объекты в задаче ETL.

Пример Fore.NET

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

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    ETLTask: IEtlTask;
    EtlConsumer: IEtlPlainDataConsumer;
    EtlProvider: IEtlPlainDataProvider;
    ConsumerIn: IEtlPlainInput;
    ProviderOut: IEtlPlainOutput;
    DtCube: IDtCubeConsumer;
    Loader: ICubeLoaderFromSource;
    Link: IEtlPlainLink;
    Shapes: IWxShapes;
Begin
    MB := Params.Metabase;
    ETLTask := mb.ItemById["ETL_Task"].Edit() As IEtlTask;
    //Создание нового приёмника - приемник куб
    EtlConsumer := ETLTask.Create(EtlObjectType.eotPlainDataCubeConsumer) As IEtlPlainDataConsumer;
    EtlConsumer := EtlConsumer.Edit();
    EtlConsumer.ClearConsumer := True;
    EtlConsumer.Id := "CUBE_Consumer";
    EtlConsumer.Name := "Приёмник-Куб";
    //Создаем визуальный объект приёмника
    CreateWX(ETLTask, EtlConsumer, 00);
    //Настраиваем приёмник
    DtCube := EtlConsumer.Consumer As IDtCubeConsumer;
    //Информация о создаваемом кубе
    Loader := DtCube.Loader As ICubeLoaderFromSource;
    Loader.Type := CubeLoaderType.cltCube;
    Loader.Database := MB.ItemById["DB"].Open(NullAs IDatabaseInstance;
    Loader.Parent := MB.ItemById["F_Cubes"].Bind();
    //Источник, с которым будет связан приёмник
    EtlProvider := ETLTask.FindById("PLAINDATAMETABASEPROVIDER1"As IEtlPlainDataProvider;
    Loader.Init(EtlProvider.Provider);
    //Сопоставление полей источника и приёмника
    ConsumerIn := EtlConsumer.PlainInput;
    ProviderOut := EtlProvider.PlainOutput;
    FillFields(ConsumerIn.Fields, ProviderOut.Fields);
    //Сохранение приёмника
    EtlConsumer.Save();
    //Создание связи
    Link := CreateLink(ETLTask, ProviderOut, ConsumerIn);
    //Создание визуальных связей
    Shapes := ETLTask.Workspace.Shapes;
    CreateWXLink(ETLTask, Shapes.FindById(EtlProvider.Id), Shapes.FindById(EtlConsumer.Id), Link);
    //Сохранение задачи
    (ETLTask As IMetabaseObject).Save();
End Sub;
//Создание визуальных объектов
Public Shared Sub CreateWX(ETLTask: IEtlTask; ETLObject: IEtlObject; XPosition: Integer; YPosition: Integer);
Var
    GxPointFCls: GxPointF = New GxPointFClass();
    WxRect: IWxRectangle;
    WxETLObj: IWxEtlObject = New WxEtlObject();
Begin
    WxRect := ETLTask.Workspace.CreateRectangle();
    WxRect.Id := ETLObject.Id;
    WxETLObj.EtlObject := ETLObject;
    WxRect.Style.TextPosition := WxTextPosition.wtpBottom;
    WxRect.Style.PictureMarginTop := -10;
    GxPointFCls.Create(XPosition, YPosition);
    WxRect.PinPosition := GxPointFCls;
    WxRect.Extension := WxETLObj As IWxShapeExtension;
End Sub;
//Создание визуальных связей
Public Shared Sub CreateWXLink(ETLTask: IEtlTask; Shape1: IWxShape; Shape2: IWxShape; Link: IEtlPlainLink);
Var
    WLink: IWxLink;
    WxETLLink: IWxEtlObject = New WxEtlObject();
Begin
    //Создаем визуальные объекты связи
    WLink := ETLTask.Workspace.AutoLinkShapes(Shape1, Shape2);
    WLink.Style.LinePenBeginWxCap := WxLineCap.wlcFlat;
    WLink.Style.LinePenEndWxCap := WxLineCap.wlcArrow30DegreeFilled;
    WxETLLink.EtlObject := Link;
    WLink.Extension := WxETLLink As IWxShapeExtension;
End Sub;
//Сопоставление списков полей входов/выходов
Public Shared Sub FillFields(Fields, FieldsSource: IEtlPlainFields);
Begin
    Fields := Fields.Edit();
    Fields.Fill(FieldsSource);
    Fields.Save();
End Sub;
//Создание связи между объектами
Public Shared Function CreateLink(ETLTask: IEtlTask; Output: IEtlPlainOutput; Input: IEtlPlainInput): IEtlPlainLink;
Var
    Link: IEtlPlainLink;
Begin
    Link := ETLTask.CreatePlainLink();
    Link.SourceObjectOutput := Output;
    Link.DestinationObjectInput := Input;
    Link.FillDefault();
    Return Link;
End Function;

См. также:

IDtCubeConsumer