Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB».
В результате выполнения примера в окно консоли будут выведены ключи атрибутов временных рядов, входящих в иерархию базы данных временных рядов.
Добавьте ссылки на системные сборки: Cubes, Metabase, Orm, Rds.
Sub MetaMembersKey;
Var
mb: IMetabase;
Rubricator: IRubricator;
Facts: IMetaDictionary;
pHierarchy: IMetaHierarchy;
pHierarchyAttributes: IMetaHierarchyAttributes;
pLevel: IMetaHierarchyLevel;
Members: IMetaMembers;
FactsInst: IMetaDictionaryInstance;
i, ind: Integer;
AtrSet: IMetaAttributesSet;
Attr: IMetaAttribute;
cur: IMetaMember;
id, name: String;
Tuple: IOrmRecord;
Begin
// Получаем репозиторий
mb := MetabaseClass.Active;
// Получаем базу данных временных рядов
Rubricator := mb.ItemById("TSDB").Bind As IRubricator;
// Получаем справочник временных рядов
Facts := Rubricator.Facts;
// Получаем иерархию временных рядов
pHierarchy := Facts.DefaultHierarchy;
// Получаем атрибуты, входящие в иерархию
pHierarchyAttributes := pHierarchy.Attributes;
// Получаем листьевой уровень иерархии
pLevel := pHierarchy.Levels.Leaf;
// Указываем, что уровень не включает все элементы
pLevel.IncludeAll := False;
// Перемещаем все атрибуты иерархии на листьевой уровень
pHierarchyAttributes.MoveAllTo(pHierarchyAttributes, pLevel);
// Получаем экземпляр справочника временных рядов
FactsInst := (Facts As IMetabaseObject).Open(Null) As IMetaDictionaryInstance;
// Получаем корневые элементы иерархии временных рядов
Members := FactsInst.OpenHierarchy(pHierarchy).GetRootMembers;
If Members <> Null Then
// Сбрасываем текущее положение курсора в иерархии
Members.Reset;
// Получаем текущий элемент иерархии
Cur := Members.Current;
Debug.WriteLine("Значения атрибутов временных рядов:");
// Перебираем все элементы иерархии
While Not Members.Eof Do
Debug.WriteLine("");
// Получаем атрибуты элемента иерархии
AtrSet := Cur.Attributes;
// Перебираем атрибуты элемента иерархии
For i := 0 To AtrSet.Count - 1 Do
// Получаем текущий атрибут
Attr := AtrSet.Item(i);
// Получаем идентификатор и наименование атрибута
id := Attr.Id;
name := Attr.Name;
// Получаем системную запись, соответствующую текущему элементу иерархии
Tuple := cur.Tuple;
// Получаем индекс атрибута
ind := Tuple.FindAttribute(id);
// Получаем значение атрибута и выводим его в окно консоли
Debug.WriteLine(name + " = " + Tuple.AttributeValue(ind));
End For;
// Переходим к следующему элементу иерархии
Members.Next;
End While;
End If;
End Sub MetaMembersKey;
См. также: