ExMode: Boolean;
ExMode: boolean;
Свойство ExMode определяет, будет ли источник пользователя помимо Fore поддерживать Fore.NET.
Возможные значения:
True. Источник пользователя будет поддерживать Fore/Fore.NET, так как будет использовать интерфейс IDtUserProviderEx, поддерживающий работу с классами Fore/Fore.NET;
False. По умолчанию. Источник пользователя будет поддерживать только Fore, так как будет использовать интерфейс IDtUserProvider, не поддерживающий работу с классами Fore.NET.
Тип интерфейса IDtUserProvider, позволяющий указывать только Fore класс для реализации интерфейса пользовательского источника, не может управлять размерами извлекаемых данных, что приводит к большому потреблению памяти. Целесообразнее использовать новый тип интерфейса IDtUserProviderEx, позволяющего указывать Fore/Fore.NET класс для реализации системного интерфейса пользовательского источника. При реализации Fore.NET класса существует возможность пользоваться частичным извлечением данных.
Для определения, будет ли приемник пользователя помимо Fore поддерживать Fore.NET, используйте IEtlPlainDataUserConsumer.ExMode.
Для выполнения примера в репозитории необходимо наличие задачи ETL с идентификатором «ETL».
Добавьте ссылки на системные сборки Andy, Drawing, Etl, Metabase.
Sub UserProc;
Var
MB: IMetabase;
MObj: IMetabaseObject;
EtlTask: IEtlTask;
DataUserProvider: IEtlPlainDataUserProvider;
DataUserConsumer: IEtlPlainDataUserConsumer;
Begin
// Получим репозиторий
MB := MetabaseClass.Active;
// Получим задачу ETL
MObj := MB.ItemById("ETL").Edit;
EtlTask := MObj As IEtlTask;
//Создадим объект "Источник пользователя"
DataUserProvider := EtlTask.Create(EtlObjectType.PlainDataUserProvider) As IEtlPlainDataUserProvider;
// Установим новый
тип провайдера для источника
DataUserProvider.ExMode := True;
// Зададим наименование источника
DataUserProvider.Name := "Источник пользователя";
// Визуальное представление источника в задаче
CreateWXP(DataUserProvider, EtlTask);
//Создадим объект "Приемник пользователя"
DataUserConsumer := EtlTask.Create(EtlObjectType.PlainDataUserConsumer) As IEtlPlainDataUserConsumer;
// Установим новый
тип провайдера для приемника
DataUserConsumer.ExMode := True;
// Зададим наименование приемника
DataUserConsumer.Name := "Приемник пользователя";
// Визуальное представление приемника в задаче
CreateWXC(DataUserConsumer, EtlTask);
// Сохраним изменения
Mobj.Save;
End Sub UserProc;
// Создание визуального объекта источника данных
Sub CreateWXP(CopyObj: IEtlPlainDataProvider; 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(20, 20);
WxDataTrans.Extension := WxETLDataTrans As IWxShapeExtension;
End Sub CreateWXP;
// Создание визуального объекта приемника данных
Sub CreateWXC(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(40, 40);
WxDataTrans.Extension := WxETLDataTrans As IWxShapeExtension;
End Sub CreateWXC;
После выполнения примера в указанной задаче ETL будут созданы два объекта - источник пользователя и приемник пользователя, которые используют новую версию провайдера IDtUserProviderEx.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Andy;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.Etl;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
MObj: IMetabaseObject;
EtlTask: IEtlTask;
DataUserProvider: IEtlPlainDataUserProvider;
DataUserConsumer: IEtlPlainDataUserConsumer;
Begin
// Получим репозиторий
MB := Params.Metabase;
// Получим задачу ETL
MObj := MB.ItemById["ETL"].Edit();
EtlTask := MObj As IEtlTask;
//Создадим объект "Источник пользователя"
DataUserProvider := EtlTask.Create(EtlObjectType.eotPlainDataUserProvider) As IEtlPlainDataUserProvider;
// Установим монопольный режим для источника
DataUserProvider.ExMode := True;
// Зададим наименование источника
DataUserProvider.Name := "Источник пользователя";
// Визуальное представление источника в задаче
CreateWXP(DataUserProvider, EtlTask);
//Создадим объект "Приемник пользователя"
DataUserConsumer := EtlTask.Create(EtlObjectType.eotPlainDataUserConsumer) As IEtlPlainDataUserConsumer;
// Установим монопольный режим для приемника
DataUserConsumer.ExMode := True;
// Зададим наименование приемника
DataUserConsumer.Name := "Приемник пользователя";
// Визуальное представление приемника в задаче
CreateWXC(DataUserConsumer, EtlTask);
// Сохраним изменения
Mobj.Save();
End Sub;
// Создание визуального объекта источника данных
Public Shared Sub CreateWXP(CopyObj: IEtlPlainDataProvider; 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(20, 20);
WxDataTrans.Extension := WxETLDataTrans As IWxShapeExtension;
End Sub CreateWXP;
// Создание визуального объекта приемника данных
Public Shared Sub CreateWXC(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(40, 40);
WxDataTrans.Extension := WxETLDataTrans As IWxShapeExtension;
End Sub CreateWXC;
См. также: