Execute: ITable;
Execute(): Prognoz.Platform.Interop.Db.ITable;
Метод Execute осуществляет создание таблицы и загрузку в нее данных.
При выполнении метода в соответствии с информацией, указанной в свойстве ObjectCreateInfo, в репозитории будет создана таблица. Также в базе данных, указанной в свойстве Database, будет создана соответствующая физическая таблица. Структура таблицы будет определена автоматически и будет соответствовать структуре источника данных, указанного в свойстве Source. После создания таблицы в нее из источника данных будут загружены данные.
Для выполнения примера в репозитории предполагается наличие базы данных с идентификатором «DB» и папки с идентификатором «FTable». В файловой системе предполагается наличие файла «c:\result.txt» с данными.
В примере используется пользовательский класс Converter. Реализация класса приведена в примере для IValueConverter.Convert.
Добавьте ссылки на системные сборки: Cubes, Dal, Db, Dt, Metabase, MathFin.
Фрагмент файла «c:\result.txt»
Sub UserProc;
Var
MB: IMetabase;
Db: IDatabase;
CrInfo: IMetabaseObjectCreateInfo;
TextProvider: IDtTextProvider;
Fields: IDtFieldDefinitions;
TCreator: ITableCreator;
Conv: Converter;
TmpTable: ITable;
Begin
// Получаем текущий репозиторий
MB := MetabaseClass.Active;
// Создаем источник данных для таблицы
TextProvider := New DtTextProvider.Create;
// Указываем файл, из которого будут загружены данные
TextProvider.File := "c:\result.txt";
// Указываем строку с заголовками
TextProvider.HeaderRow := 1;
// Указываем символ, разделяющий поля
TextProvider.DelimitedColumnDelimiter := ";";
// Задаем формат дат в файле
TextProvider.StringDataFormat.DateFormat := "ГГГГ";
// Получаем поля из файла-источника
Fields := TextProvider.Fields;
// Указываем тип данных полей
Fields.Item(0).DataType := DbDataType.String;
Fields.Item(1).DataType := DbDataType.String;
Fields.Item(2).DataType := DbDataType.String;
Fields.Item(3).DataType := DbDataType.DateTime;
Fields.Item(4).DataType := DbDataType.Float;
// Создаем объект, предназначенный для создания полей
TCreator := New TableCreator.Create;
// Указываем источник данных для создаваемой таблицы
TCreator.Source := TextProvider;
// Создаем информацию о создаваемой таблице
CrInfo := MB.CreateCreateInfo;
// Указываем папку, в которой будет создана таблица
CrInfo.Parent := MB.ItemById("FTable");
// Указываем информацию о создаваемой таблице
TCreator.ObjectCreateInfo := CrInfo;
// Получаем базу данных
Db := MB.ItemById("DB").Bind As IDatabase;
// Указываем базу данных, в которой будут храниться данные таблицы
TCreator.Database := Db;
// Указываем строку в источнике данных,
// начиная с которой будут загружаться данные
TCreator.DataRow := 0;
// Указываем количество строк, которое нужно загрузить
TCreator.RowCount := 100;
// Указываем, что пустые строки будут пропущены
TCreator.SkipEmptyRows := True;
// Создаем преобразователь значений
Conv := New Converter.Create;
// Указываем, что значения поля «Value» должны быть преобразованы
TCreator.AddConverter("Value", Conv);
// Создаем таблицу и загружаем в неё данные
TmpTable := TCreator.Execute;
// Сохраняем созданную таблицу
(TmpTable As IMetabaseObject).Save;
End Sub UserProc;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Db: IDatabase;
CrInfo: IMetabaseObjectCreateInfo;
TextProvider: IDtTextProvider;
Fields: IDtFieldDefinitions;
TCreator: ITableCreator;
Conv: Converter;
TmpTable: ITable;
Begin
// Получаем текущий репозиторий
MB := Params.Metabase;
// Создаем источник данных для таблицы
TextProvider := New DtTextProvider.Create();
// Указываем файл, из которого будут загружены данные
TextProvider.File := "c:\result.txt";
// Указываем строку с заголовками
TextProvider.HeaderRow := 1;
// Указываем символ, разделяющий поля
TextProvider.DelimitedColumnDelimiter := ";";
// Задаем формат дат в файле
TextProvider.StringDataFormat.DateFormat := "ГГГГ";
// Получаем поля из файла-источника
Fields := TextProvider.Fields;
// Указываем тип данных полей
Fields.Item[0].DataType := DbDataType.ddtString;
Fields.Item[1].DataType := DbDataType.ddtString;
Fields.Item[2].DataType := DbDataType.ddtString;
Fields.Item[3].DataType := DbDataType.ddtDateTime;
Fields.Item[4].DataType := DbDataType.ddtFloat;
// Создаем объект, предназначенный для создания полей
TCreator := New TableCreator.Create();
// Указываем источник данных для создаваемой таблицы
TCreator.Source := TextProvider;
// Создаем информацию о создаваемой таблице
CrInfo := MB.CreateCreateInfo();
// Указываем папку, в которой будет создана таблица
CrInfo.Parent := MB.ItemById["FTable"];
// Указываем информацию о создаваемой таблице
TCreator.ObjectCreateInfo := CrInfo;
// Получаем базу данных
Db := MB.ItemById["DB"].Bind() As IDatabase;
// Указываем базу данных, в которой будут храниться данные таблицы
TCreator.Database := Db;
// Указываем строку в источнике данных,
// начиная с которой будут загружаться данные
TCreator.DataRow := 0;
// Указываем количество строк, которое нужно загрузить
TCreator.RowCount := 100;
// Указываем, что пустые строки будут пропущены
TCreator.SkipEmptyRows := True;
// Создаем преобразователь значений
Conv := New Converter.Create();
// Указываем, что значения поля «Value» должны быть преобразованы
TCreator.AddConverter("Value", Conv);
// Создаем таблицу и загружаем в неё данные
TmpTable := TCreator.Execute();
// Сохраняем созданную таблицу
(TmpTable As IMetabaseObject).Save();
End Sub;
После выполнения примера в папке «FTable» будет создана таблица. Структура таблицы будет сформирована автоматически на основании данных из файла «c:\result.txt». В таблицу будут загружены первые сто строк данных, пустые строки будут пропускаться. Значения, загружаемые из поля «Value», будут округлены.
См. также: