ICubeMetaLoaderLogEntry.DestField

Синтаксис Fore

DestField: Integer;

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

DestField: integer;

Описание

Свойство DestField возвращает номер поля в приемнике данных.

Комментарии

Для получения номера соответствующего поля в источнике данных используйте свойство ICubeMetaLoaderLogEntry.SourceField.

Пример Fore

Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB_UNPIVOT», содержащей атрибуты временных рядов с идентификаторами «COUNTRY» и «INDICATOR». Атрибут «COUNTRY» должен быть ссылкой на справочник НСИ, а атрибут «INDICATOR» - ссылкой на табличный справочник НСИ.

В файловой системе должен содержаться файл «D:\Indicator_Data.xlsx», содержащий лист сданными, имеющий наименование «Лист1».

Добавьте ссылки на системные сборки: Cubes, Db, Dimensions, Dt, Metabase, Rds.

Содержимое листа «Лист1» в файле «D:\Indicator_Data.xlsx»

Sub UserProc;
Var
    mb: IMetabase;
    desc: IMetabaseObjectDescriptor;
    importObject: IImportRequestDefinition;
    createInfo: IMetabaseObjectCreateInfo;
    params: IImportRequestProviderParams;
    importBinding: ICubeMetaLoaderBinding;
    Bindings: ICubeMetaLoaderBindings;
    rdsDictionary: IRdsDictionary;
    excel: IDtExcelProviderEx;
    instance: IImportRequestInstance;
    importResult: IImportRequestResult;
    Log: ICubeMetaLoaderLog;
    LogStr: String;
    count, i: Integer;
    entry: ICubeMetaLoaderLogEntry;
    rub: IRubricator;
    Unpivot: IDtUnpivotProvider;
    Attributes: IMetaAttributes;
Begin
    MB := MetabaseClass.Active;
    
// Получаем и очищаем базу данных временных рядов
    desc := mb.ItemById("TSDB_UNPIVOT");
    rub := desc.Bind 
As IRubricator;
    rub.Truncate;
    
// Создаем объект для импорта временных рядов
    createInfo := mb.CreateCreateInfo;
    createInfo.ClassId := MetabaseObjectClass.KE_CLASS_IMPORTREQUEST;
    
// Задаем параметры объекта
    createInfo.Name := "Импорт из файла";
    createInfo.KeepEdit := 
True;
    createInfo.Permanent := 
False;
    createInfo.Parent := desc;
    importObject := mb.CreateObject(createInfo) 
As IImportRequestDefinition;
    
// Задаем тип источника, из которого будут импортироваться данные
    importObject.SourceType := ImportRequestSourceType.Provider;
    
// Задаем базу данных временных рядов, в которую будут импортироваться данные
    importObject.DestinationRubricator := desc.Bind As IRubricator;
    
// Задаем параметры импорта
    params := importObject.ProviderParams;
    
// Снимаем ограничение на максимальное количество ошибок в отчете о импорте данных
    (params As ICubeMetaLoader).Log.MaxErrors := -1;
    
// Получаем привязки атрибутов
    Bindings := params.Bindings;
    
// Получаем атрибуты временных рядов;
    Attributes := rub.Facts.Attributes;
    
// Получаем справочник, на который ссылается атрибут «COUNTRY»
    desc := Attributes.FindById("COUNTRY").ValuesObject;
    rdsDictionary := desc.Bind 
As IRdsDictionary;
    
// Создаем привязку для атрибута «COUNTRY»
    importBinding := Bindings.Add;
    importBinding.BindingType := CubeMetaLoaderBindingType.Attribute;
    importBinding.Attribute := 
"COUNTRY";
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item(
0).Id;
    
// Указываем, что данные для атрибута будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.Index;
    
// Указываем номер поля
    importBinding.Field := "0";
    
// Получаем справочник, на который ссылается атрибут «INDICATOR»
    desc := Attributes.FindById("INDICATOR").ValuesObject;
    rdsDictionary := desc.Bind 
As IRdsDictionary;
    
// Создаем привязку для атрибута «INDICATOR»
    importBinding := Bindings.Add;
    importBinding.BindingType := CubeMetaLoaderBindingType.Attribute;
    importBinding.Attribute := 
"INDICATOR";
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item(
1).Id;
    
// Указываем, что данные для атрибута будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.Index;
    
// Указываем номер поля
    importBinding.Field := "1";
    
// Получаем справочник, на который ссылается атрибут «UNIT»
    desc := Attributes.FindById("UNIT").ValuesObject;
    rdsDictionary := desc.Bind 
As IRdsDictionary;
    
// Создаем привязку для атрибута «UNIT»
    importBinding := Bindings.Add;
    importBinding.BindingType := CubeMetaLoaderBindingType.Unit;
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item(
0).Id;
    
// Указываем, что в качестве данных атрибута будет браться заданное значение
    importBinding.FieldType := CubeMetaLoaderFieldType.ConstValue;
    
// Задаем значение атрибута
    importBinding.FieldValue := 1 As Variant;
    
// Создаем привязку для календаря
    importBinding := Bindings.Add;
    importBinding.BindingType := CubeMetaLoaderBindingType.Calendar;
    importBinding.ByColumns := 
False;
    importBinding.CalendarDateFormatEx(DimCalendarLevel.Year) := 
"$Year$";
    importBinding.CalendarOptions.Levels := DimCalendarLevelSet.Year;
    
// Указываем, что данные для календаря будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.Index;
    
// Указываем номер поля
    importBinding.Field := "2";
    
// Создаем привязку для значений временных рядов
    importBinding := Bindings.Add;
    importBinding.BindingType := CubeMetaLoaderBindingType.Value;
    
// Указываем, что значения будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.Index;
    
// Указываем номер поля
    importBinding.Field := "3";
    
// Настраиваем источник данных
    Try
        excel := 
New DtExcelProviderEx.Create;
        
// Задаем параметры файла, из которого будет импортировать данные
        excel.File := "D:\Indicator_Data.xlsx";
        excel.Sheet := 
"Лист1";
        excel.Format := 
"XLSX";
        Excel.HasHeader := 
False;
        
// Задаем расположение областей данных в файле-источнике
        Unpivot := New DtUnpivotProvider.Create;
        Unpivot.Provider := Excel;
        Unpivot.LeftEnd := 
2;
        Unpivot.DataWidth := 
2;
        Unpivot.DataTop := 
3;
        Unpivot.DataBottom := 
5;
        Unpivot.HeadBottom := 
2;
        Unpivot.DataRight := 
8;
        Unpivot.HeadColumn := 
1;
        Unpivot.LeftBegin := 
1;
        Unpivot.HeadTop := 
2;
        
// Выполняем загрузку данных
        Unpivot.Open;
        count := Unpivot.Fields.Count;
        importObject.ProviderParams.Provider := Unpivot 
As IDatasetDataProvider;
        instance := (importObject 
As IMetabaseObject).Open(NullAs IImportRequestInstance;
        Instance.LoadData;
        
// Получаем отчет о загрузке данных
        importResult := instance.ImportResult;
        Log := importResult.Log;
        count := Log.Count;
        
// Выводим отчет в окно консоли
        Debug.WriteLine("Количество записей  = " + Count.ToString);
        
For i := 0 To Count - 1 Do
            Entry := Log.Item(i);
            LogStr := i.ToString + 
": "
                + (Entry.IsError ? 
"Ошибка: " :(Entry.IsMessage ? "Сообщение: " : "Предупреждение: ")) +
                + Entry.ErrorMessage;
            Debug.WriteLine(LogStr);
            Debug.Indent;
            Debug.WriteLine(
"Номер записи = " + Entry.RecordNumber.ToString);
            Debug.WriteLine(
"Значение записи = " + Entry.ValueRecordNumber.ToString);
            Debug.WriteLine(
"Поле в источнике данных = " + Entry.Field);
            Debug.WriteLine(
"Номер записи в источнике данных = " + Entry.SourceRecord.ToString);
            Debug.WriteLine(
"Номер поля в источнике данных = " + Entry.SourceField.ToString);
            Debug.WriteLine(
"Номер записи в приемнике данных = " + Entry.DestRecord.ToString);
            Debug.WriteLine(
"Номер поля в приемнике данных = " + Entry.DestField.ToString);
            Debug.Unindent;
        
End For;
    
Except On e: Exception Do
        Debug.WriteLine(e.Message);
    
Finally
    
End Try;
End Sub UserProc;

В результате выполнения примера будет выполнен импорт данных из файла «D:\Indicator_Data.xlsx» в базу данных временных рядов «TSDB_UNPIVOT». Ошибки импорта будут выведены в окно консоли.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    desc: IMetabaseObjectDescriptor;
    importObject: IImportRequestDefinition;
    createInfo: IMetabaseObjectCreateInfo;
    ImportParams: IImportRequestProviderParams;
    importBinding: ICubeMetaLoaderBinding;
    Bindings: ICubeMetaLoaderBindings;
    rdsDictionary: IRdsDictionary;
    excel: IDtExcelProviderEx;
    instance: IImportRequestInstance;
    importResult: IImportRequestResult;
    Log: ICubeMetaLoaderLog;
    LogStr: String;
    count, i: Integer;
    entry: ICubeMetaLoaderLogEntry;
    rub: IRubricator;
    Unpivot: IDtUnpivotProvider;
    Attributes: IMetaAttributes;
Begin
    MB := Params.Metabase;
    
// Получаем и очищаем базу данных временных рядов
    desc := mb.ItemById["TSDB_UNPIVOT"];
    rub := desc.Bind() 
As IRubricator;
    rub.Truncate();
    
// Создаем объект для импорта временных рядов
    createInfo := mb.CreateCreateInfo();
    createInfo.ClassId := MetabaseObjectClass.KE_CLASS_IMPORTREQUEST 
As integer;
    
// Задаем параметры объекта
    createInfo.Name := "Импорт из файла";
    createInfo.KeepEdit := 
True;
    createInfo.Permanent := 
False;
    createInfo.Parent := desc;
    importObject := mb.CreateObject(createInfo) 
As IImportRequestDefinition;
    
// Задаем тип источника, из которого будут импортироваться данные
    importObject.SourceType := ImportRequestSourceType.irstProvider;
    
// Задаем базу данных временных рядов, в которую будут импортироваться данные
    importObject.DestinationRubricator := desc.Bind() As IRubricator;
    
// Задаем параметры импорта
    ImportParams := importObject.ProviderParams;
    
// Снимаем ограничение на максимальное количество ошибок в отчете о импорте данных
    (ImportParams As ICubeMetaLoader).Log.MaxErrors := -1;
    
// Получаем привязки атрибутов
    Bindings := ImportParams.Bindings;
    
// Получаем атрибуты временных рядов;
    Attributes := rub.Facts.Attributes;
    
// Получаем справочник, на который ссылается атрибут «COUNTRY»
    desc := Attributes.FindById("COUNTRY").ValuesObject;
    rdsDictionary := desc.Bind() 
As IRdsDictionary;
    
// Создаем привязку для атрибута «COUNTRY»
    importBinding := Bindings.Add();
    importBinding.BindingType := CubeMetaLoaderBindingType.cmlbtAttribute;
    importBinding.Attribute := 
"COUNTRY";
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item[
0].Id;
    
// Указываем, что данные для атрибута будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.cmlftIndex;
    
// Указываем номер поля
    importBinding.Field := "0";
    
// Получаем справочник, на который ссылается атрибут «INDICATOR»
    desc := Attributes.FindById("INDICATOR").ValuesObject;
    rdsDictionary := desc.Bind() 
As IRdsDictionary;
    
// Создаем привязку для атрибута «INDICATOR»
    importBinding := Bindings.Add();
    importBinding.BindingType := CubeMetaLoaderBindingType.cmlbtAttribute;
    importBinding.Attribute := 
"INDICATOR";
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item[
1].Id;
    
// Указываем, что данные для атрибута будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.cmlftIndex;
    
// Указываем номер поля
    importBinding.Field := "1";
    
// Получаем справочник, на который ссылается атрибут «UNIT»
    desc := Attributes.FindById("UNIT").ValuesObject;
    rdsDictionary := desc.Bind() 
As IRdsDictionary;
    
// Создаем привязку для атрибута «UNIT»
    importBinding := Bindings.Add();
    importBinding.BindingType := CubeMetaLoaderBindingType.cmlbtUnit;
    importBinding.Dimension := rdsDictionary 
As IDimensionModel;
    importBinding.KeyAttribute := rdsDictionary.Attributes.Key.Id;
    importBinding.Index := rdsDictionary.UniqueKeys.Item[
0].Id;
    
// Указываем, что в качестве данных атрибута будет браться заданное значение
    importBinding.FieldType := CubeMetaLoaderFieldType.cmlftConstValue;
    
// Задаем значение атрибута
    importBinding.FieldValue := 1 As object;
    
// Создаем привязку для календаря
    importBinding := Bindings.Add();
    importBinding.BindingType := CubeMetaLoaderBindingType.cmlbtCalendar;
    importBinding.ByColumns := 
False;
    importBinding.CalendarDateFormatEx[DimCalendarLevel.dclYear] := 
"$Year$";
    importBinding.CalendarOptions.Levels := DimCalendarLevelSet.dclsYear;
    
// Указываем, что данные для календаря будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.cmlftIndex;
    
// Указываем номер поля
    importBinding.Field := "2";
    
// Создаем привязку для значений временных рядов
    importBinding := Bindings.Add();
    importBinding.BindingType := CubeMetaLoaderBindingType.cmlbtValue;
    
// Указываем, что значения будут браться по номеру поля в источнике данных
    importBinding.FieldType := CubeMetaLoaderFieldType.cmlftIndex;
    
// Указываем номер поля
    importBinding.Field := "3";
    
// Настраиваем источник данных
    Try
        excel := 
New DtExcelProviderEx.Create();
        
// Задаем параметры файла, из которого будет импортировать данные
        excel.File := "D:\Indicator_Data.xlsx";
        excel.Sheet := 
"Лист1";
        excel.Format := 
"XLSX";
        Excel.HasHeader := 
False;
        
// Задаем расположение областей данных в файле-источнике
        Unpivot := New DtUnpivotProvider.Create();
        Unpivot.Provider := Excel;
        Unpivot.LeftEnd := 
2;
        Unpivot.DataWidth := 
2;
        Unpivot.DataTop := 
3;
        Unpivot.DataBottom := 
5;
        Unpivot.HeadBottom := 
2;
        Unpivot.DataRight := 
8;
        Unpivot.HeadColumn := 
1;
        Unpivot.LeftBegin := 
1;
        Unpivot.HeadTop := 
2;
        
// Выполняем загрузку данных
        Unpivot.Open();
        count := Unpivot.Fields.Count;
        importObject.ProviderParams.Provider := Unpivot 
As IDatasetDataProvider;
        instance := (importObject 
As IMetabaseObject).Open(NullAs IImportRequestInstance;
        Instance.LoadData();
        
// Получаем отчет о загрузке данных
        importResult := instance.ImportResult;
        Log := importResult.Log;
        count := Log.Count;
        
// Выводим отчет в окно консоли
        System.Diagnostics.Debug.WriteLine("Количество записей  = " + Count.ToString());
        
For i := 0 To Count - 1 Do
            Entry := Log.Item[i];
            LogStr := i.ToString() + 
": "
                + (Entry.IsError ? 
"Ошибка: " :(Entry.IsMessage ? "Сообщение: " : "Предупреждение: "))
                + Entry.ErrorMessage;
            System.Diagnostics.Debug.WriteLine(LogStr);
            System.Diagnostics.Debug.Indent();
            System.Diagnostics.Debug.WriteLine(
"Номер записи = " + Entry.RecordNumber.ToString());
            System.Diagnostics.Debug.WriteLine(
"Значение записи = " + Entry.ValueRecordNumber.ToString());
            System.Diagnostics.Debug.WriteLine(
"Поле в источнике данных = " + Entry.Field);
            System.Diagnostics.Debug.WriteLine(
"Номер записи в источнике данных = " + Entry.SourceRecord.ToString());
            System.Diagnostics.Debug.WriteLine(
"Номер поля в источнике данных = " + Entry.SourceField.ToString());
            System.Diagnostics.Debug.WriteLine(
"Номер записи в приемнике данных = " + Entry.DestRecord.ToString());
            System.Diagnostics.Debug.WriteLine(
"Номер поля в приемнике данных = " + Entry.DestField.ToString());
            System.Diagnostics.Debug.Unindent();
        
End For;
    
Except On e: Exception Do
        System.Diagnostics.Debug.WriteLine(e.Message);
    
Finally
    
End Try;
End Sub;

См. также:

ICubeMetaLoaderLogEntry