Создание табличного справочника

Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором "TAB_ELEMENT". ". В таблице имеется четыре поля: Id, Name, Ord и Parent_Id.

Sub Main;

Var

MB: IMetabase;

CrInfo: IMetabaseObjectCreateInfo;

StDim: IStandardDimension;

StAttrs: IStandardDimAttributes;

Orders: IStdDimOrders;

BlockAttr: IStandardDimIndexAttributes;

StAttr: IStandardDimAttribute;

StDimBlock: IStandardDimBlock;

StRecBlock: IStandardDimRecursiveBlock;

Levels: IStandardDimLevels;

Begin

MB := MetabaseClass.Active;

CrInfo := MB.CreateCreateInfo;

CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_STDDIM;

CrInfo.Id := "NewTabDim";

CrInfo.Name := "Новый табличный справочник";

CrInfo.Parent := MB.Root;

StDim := MB.CreateObject(CrInfo).Edit As IStandardDimension;

StAttrs := StDim.Attributes;

//Создание аттрибутов

StAttr := StAttrs.Add;

StAttr.DataType := DbDataType.Integer;

StAttr.Id := "Id";

StAttr.Name := "Идентификатор";

StAttrs.Id := StAttr;

StAttr := StAttrs.Add;

StAttr.DataType := DbDataType.String;

StAttr.Id := "Name";

StAttr.Name := "Наименование";

StAttrs.Name := StAttr;

StAttr := StAttrs.Add;

StAttr.DataType := DbDataType.Integer;

StAttr.Id := "Order";

StAttr.Name := "Порядок";

StAttrs.Order := StAttr;

StAttr := StAttrs.Add;

StAttr.DataType := DbDataType.Integer;

StAttr.Id := "Parent";

StAttr.Name := "Родитель";

//Сортировка по возрастанию значений атрибутов

Orders := StAttrs.Orders;

Orders.Add(StAttrs.Name, False);

Orders.Add(StAttrs.Order, False);

//Создание рекурсивного блока

StDimBlock := StDim.Blocks.Add(DimBlockType.Recursive);

//Настройка блока

//Первичный индекс блока по атрибуту Идентификатор

BlockAttr := StDimBlock.Indexes.PrimaryIndex.Attributes;

BlockAttr.Add(StAttrs.Id);

//Привязка атрибутов блока к полям таблицы TAB_ELEMENT

StDimBlock.Dataset := MB.ItemById("TAB_ELEMENT").Bind As IDatasetModel;

StDimBlock.Binding(StAttrs.Id).AsString := "TAB_ELEMENT.ID";

StDimBlock.Binding(StAttrs.Name).AsString := "TAB_ELEMENT.NAME";

StDimBlock.Binding(StAttrs.Order).AsString := "TAB_ELEMENT.ORD";

StDimBlock.Binding(StAttr).AsString := "TAB_ELEMENT.PARENT_ID";

//Настройка рекурсии

StRecBlock := StDimBlock As IStandardDimRecursiveBlock;

//Условия для верхнего уровня рекурсии

StRecBlock.StartWith.AsString := "TAB_ELEMENT.PARENT_ID=0";

//Связь по первичному индексу

StRecBlock.ConnectByIndex := StDimBlock.Indexes.PrimaryIndex;

//Условие связи для первого атрибута

StRecBlock.ConnectBy(BlockAttr.Item(0)).AsString := "TAB_ELEMENT.PARENT_ID";

//Два уровня для справочника

Levels := StDim.Levels;

Levels.Add.Name := "Первый уровень";

Levels.Add.Name := "Второй уровень";

(StDim As IMetabaseObject).Save;

End Sub Main;

После выполнения примера в корневом каталоге репозитория будет создан табличный справочник. В справочнике будут созданы четыре атрибута, один рекурсивный блок. Настроена сортировка по атрибутам. Установлены привязки полей таблицы к атрибутам справочника и настроена рекурсия. Также в справочнике будут созданы два уровня для настройки в дальнейшем агрегации.

См. также:

Примеры