Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором TAB_ELEMENT. ". В таблице имеется четыре поля: Id, Name, Ord и Parent_Id.
Sub UserProc;
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 UserProc;
После выполнения примера в корневом каталоге репозитория будет создан табличный справочник. В справочнике будут созданы четыре атрибута, один рекурсивный блок. Настроена сортировка по атрибутам. Установлены привязки полей таблицы к атрибутам справочника и настроена рекурсия. Также в справочнике будут созданы два уровня для настройки в дальнейшем агрегации.
См. также: