После создания и настройки объектов можно перейти к наполнению их данными или получению уже имеющихся в них данных. Для получения данных объекта его необходимо открыть, для этого используется метод IMetabaseObjectDescriptor.Open или IMetabaseObjectDescriptor.OpenWithParam. Методы возвращают интерфейс IMetabaseObjectInstance, который является общим для всех открываемых объектов.
При открытии различных объектов под термином «данные» будут пониматься различные сущности. Для таблиц, запросов и представлений данными будет являться плоская таблица со значениями; при работе со справочниками под данными понимается набор элементов, каждый элемент характеризуется набором значений каких-либо атрибутов; при открытии куба, данные - это матрица значений, размер которой определяется количеством измерений куба; данными отчётов будет совокупный набор данных всех открываемых источников, на базе которых построен отчёт.
Интерфейсы, предназначенные для работы с данными различных объектов репозитория, описаны в разных сборках, например:
Таблицы, запросы и другие - сборка Db, интерфейсы IDatasetInstance;
Справочники и справочники НСИ - сборки Dimensions и Rds, интерфейсы IDimInstance и IRdsDictionaryInstance;
Кубы - сборка Cubes, интерфейсы ICubeInstance, IAutoCubeInstance, IStandardCubeInstance, ICalculatedCubeInstance и другие;
Базы данных временных рядов - сборка Cubes, интерфейс IRubricatorInstance;
Регламентные отчёты, экспресс-отчёты и рабочие книги - сборки Report и Express, интерфейсы IPrxReport, IEaxAnalyzer.
Более подробно можно ознакомиться, изучив список доступных сборок и их состав.
Рассмотрим примеры просмотра данных таблицы, справочника и куба:
Sub TableData;
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
TableInst: IDatasetInstance;
Fields: IDatasetInstanceFields;
Field1, Field2, Field3: IDatasetInstanceField;
Begin
Mb := MetabaseClass.Active;
// Открытие таблицы
MObjInst := Mb.ItemById("TABLE").Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными таблицы
TableInst := MObjInst As IDatasetInstance;
// Получение полей
Fields := TableInst.Fields;
Field1 := Fields.FindById("ID");
Field2 := Fields.FindById("NAME");
Field3 := Fields.FindById("VALUE");
// Проход всех записей и просмотр значений полей
While Not TableInst.Eof Do
Debug.Write("Идентификатор: " + Field1.Value);
Debug.Write(". Наименование: " + Field2.Value);
Debug.WriteLine(". Значение: " + Field3.Value);
TableInst.Next;
End While;
End Sub TableData;
Sub DictionaryData;
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
DictInst: IDimInstance;
Elements: IDimElements;
Attribute: IDimAttributeInstance;
i: Integer;
Begin
Mb := MetabaseClass.Active;
// Открытие справочника
MObjInst := Mb.ItemById("DICTIONARY").Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными справочников
DictInst := MObjInst As IDimInstance;
// Получение списка элементов
Elements := DictInst.Elements;
// Получение атрибута VALUE
Attribute := DictInst.Attributes.FindById("VALUE");
// Просмотр значений атрибутов для каждого элемента справочника
For i := 0 To Elements.Count - 1 Do
Debug.Write("Идентификатор: " + Elements.Id(i));
Debug.Write(". Наименование: " + Elements.Name(i));
Debug.WriteLine(". Значение: " + Elements.AttributeValueO(i, Attribute));
End For;
End Sub DictionaryData;
Sub CubeData;
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
CubeInst: ICubeInstance;
Destination: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Matr: IMatrix;
Iter: IMatrixIterator;
Begin
Mb := MetabaseClass.Active;
// Открытие справочника
MObjInst := Mb.ItemById("STANDART_CUBE").Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными кубов
CubeInst := MObjInst As ICubeInstance;
Destination := CubeInst.Destinations.DefaultDestination;
// Создание и формирование отметки, по которой будет вычислена матрица значений
SelSet := Destination.CreateDimSelectionSet;
SelSet.FindById("COUNTRY").SelectElement(0, False);
SelSet.FindById("CALENDAR").SelectAll;
// Вычисление матрицы значений
Matr := Destination.Execute(SelSet);
// Итератор для прохода по полученным значениям
Iter := Matr.CreateIterator;
Iter.Move(IteratorDirection.First);
While Iter.Valid Do
Debug.Write(Iter.Value + " ");
Iter.Move(IteratorDirection.Next);
End While;
End Sub CubeData;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
TableInst: IDatasetInstance;
Fields: IDatasetInstanceFields;
Field1, Field2, Field3: IDatasetInstanceField;
Begin
Mb := Params.Metabase;
// Открытие таблицы
MObjInst := Mb.ItemById["TABLE"].Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными таблицы
TableInst := MObjInst As IDatasetInstance;
// Получение полей
Fields := TableInst.Fields;
Field1 := Fields.FindById("ID");
Field2 := Fields.FindById("NAME");
Field3 := Fields.FindById("VALUE");
// Проход всех записей и просмотр значений полей
While Not TableInst.Eof() Do
System.Diagnostics.Debug.Write("Идентификатор: " + Field1.Value);
System.Diagnostics.Debug.Write(". Наименование: " + Field2.Value);
System.Diagnostics.Debug.WriteLine(". Значение: " + Field3.Value);
TableInst.Next();
End While;
End Sub;
Public Shared Sub Main1(Params: StartParams);
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
DictInst: IDimInstance;
Elements: IDimElements;
Attribute: IDimAttributeInstance;
i: UInteger;
Begin
Mb := Params.Metabase;
// Открытие справочника
MObjInst := Mb.ItemById["DICTIONARY"].Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными справочников
DictInst := MObjInst As IDimInstance;
// Получение списка элементов
Elements := DictInst.Elements;
// Получение атрибута VALUE
Attribute := DictInst.Attributes.FindById("VALUE");
// Просмотр значений атрибутов для каждого элемента справочника
For i := 0 To Elements.Count - 1 Do
System.Diagnostics.Debug.Write("Идентификатор: " + Elements.Id[i]);
System.Diagnostics.Debug.Write(". Наименование: " + Elements.Name[i]);
System.Diagnostics.Debug.WriteLine(". Значение: " + Elements.AttributeValueO[i, Attribute]);
End For;
End Sub;
Public Shared Sub Main2(Params: StartParams);
Var
Mb: IMetabase;
MObjInst: IMetabaseObjectInstance;
CubeInst: ICubeInstance;
Destination: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Matr: IMatrix;
Iter: IMatrixIterator;
Begin
Mb := Params.Metabase;
// Открытие справочника
MObjInst := Mb.ItemById["STANDART_CUBE"].Open(Null);
// Приведение к интерфейсу, предназначенному для работы с данными кубов
CubeInst := MObjInst As ICubeInstance;
Destination := CubeInst.Destinations.DefaultDestination;
// Создание и формирование отметки, по которой будет вычислена матрица значений
SelSet := Destination.CreateDimSelectionSet();
SelSet.FindById("COUNTRY").SelectElement(0, False);
SelSet.FindById("CALENDAR").SelectAll();
// Вычисление матрицы значений
Matr := Destination.Execute(SelSet, UInteger.MaxValue);
// Итератор для прохода по полученным значениям
Iter := Matr.CreateIterator();
Iter.Move(IteratorDirection.itdFirst);
While Iter.Valid Do
System.Diagnostics.Debug.Write(Iter.Value + " ");
Iter.Move(IteratorDirection.itdNext);
End While;
End Sub;
См. также: