Получение и работа с данными объектов

После создания и настройки объектов можно перейти к наполнению их данными или получению уже имеющихся в них данных. Для получения данных объекта его необходимо открыть, для этого используется метод IMetabaseObjectDescriptor.Open или IMetabaseObjectDescriptor.OpenWithParam. Методы возвращают интерфейс IMetabaseObjectInstance, который является общим для всех открываемых объектов.

При открытии различных объектов под термином «данные» будут пониматься различные сущности:

Интерфейсы, предназначенные для работы с данными различных объектов репозитория, описаны в разных сборках, например:

Более подробно можно ознакомиться, изучив список доступных сборок и их состав.

Рассмотрим примеры просмотра данных таблицы, справочника и куба:

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(0False);
    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;

См. также:

Разработка прикладного приложения