Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «REP_NSI». В данном репозитории уже создан справочник НСИ с идентификатором «DICT_RDS».
В базе данных, установленной для репозитория НСИ, имеются таблицы «RDS_IMP» и «RDS_EXP», содержащие следующий набор полей:
Идентификатор поля | Тип данных поля | Назначение поля |
EL_KEY | Целый | Ключ элемента. |
EL_NAME | Строковый | Наименование элемента. |
EL_ORD | Целый | Порядок элемента. |
EL_PARENT_KEY | Целый | Ключ родительского элемента. |
USER_DATA | Дата | Значение пользовательского атрибута. |
LINK | Целый | Значение связанного атрибута, соответствующие ключу элемента в присоединенном справочнике. |
PARAM | Дата | Значение параметра, при котором доступен данный элемент. |
Данные таблицы будут подключены в схемах импорта и экспорта соответственно.
Sub UserProc;
Var
MB: IMetabase;
NSI: IMetabaseObjectDescriptor;
CrInfo: IMetabaseObjectCreateInfo;
Dict, Dict1: IRdsDictionary;
Attrs: IRdsAttributes;
Attr, ParamAttr, LinkAttr, LookupAttr: IRdsAttribute;
Param: IRdsParam;
Link: IRdsLink;
UniqKey: IRdsUniqueKey;
Level: IRdsLevel;
Import: IRdsImportSchemas;
SchemaImport: IRdsImportSchema;
Export: IRdsExportSchemas;
SchemaExport: IRdsExportSchema;
Begin
MB := MetabaseClass.Active;
NSI := MB.ItemById("REP_NSI");
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_RDS_DICTIONARY;
CrInfo.Id := "NewDictionary";
CrInfo.Name := "Новый справочник";
CrInfo.Parent := NSI;
Dict := MB.CreateObject(CrInfo).Edit As IRdsDictionary;
Dict1 := MB.ItemByIdNamespace("DICT_RDS", NSI.Key).Bind As IRdsDictionary;
Attrs := Dict.Attributes;
//Создание дополнительных атрибутов
//Пользовательский атрибут
Attr := Attrs.Add;
Attr.DataType := DbDataType.DateTime;
Attr.Id := "USERATTRIBUT";
Attr.Name := "Пользовательский атрибут";
//Атрибут для связи
LinkAttr := Attrs.Add;
LinkAttr.DataType := DbDataType.Integer;
LinkAttr.Id := "LINKATTR";
LinkAttr.Name := "Атрибут для связи";
//Атрибут для параметра
ParamAttr := Attrs.Add;
ParamAttr.DataType := DbDataType.DateTime;
ParamAttr.Id := "PARAMATTR";
ParamAttr.Name := "Параметрический атрибут";
//Создание параметра
Param := Dict.Params.Add;
Param.Attribute := ParamAttr;
Param.Id := "Param1";
Param.Name := "Значение";
//Связь со справочником
Link := Dict.Links.Add;
Link.Attribute := LinkAttr;
Link.Reference := Dict1.Attributes.Key;
Link.Id := "Link";
Link.Name := "Связь со справочником Dict_1";
//Заимствованный атрибут "Наименование" из справочника Dict_1
LookupAttr := Attrs.Add;
LookupAttr.Id := "Dict1_Name";
LookupAttr.Name := "Наименование из Dict_1";
LookupAttr.Link := Link;
LookupAttr.Lookup := Dict1.Attributes.Name;
//Уникальный ключ
UniqKey := Dict.UniqueKeys.Add;
UniqKey.Id := "UniqKey_1";
UniqKey.Name := "Уникальный ключ";
UniqKey.Contains(Attr) := True;
UniqKey.Contains(ParamAttr) := True;
//Уровни справочника
Level := Dict.Levels.Add;
Level.Id := "Newlevel1";
Level.Name := "Первый уровень";
Level := Dict.Levels.Add;
Level.Id := "Newleve2";
Level.Name := "Второй уровень";
//Создание схемы импорта
Import := Dict.ImportSchemas;
SchemaImport := Import.Add;
SchemaImport.Id := "NewSchemaImport";
SchemaImport.Name := "Схема импорта №1";
//Привязка базовых атрибутов к полям таблицы
SchemaImport.Mappings(Attrs.Key).FieldName := "EL_KEY";
SchemaImport.Mappings(Attrs.Name).FieldName := "EL_NAME";
SchemaImport.Mappings(Attrs.Order).FieldName := "EL_ORD";
SchemaImport.Mappings(Attrs.ParentKey).FieldName := "EL_PARENT_KEY";
//Привязка пользовательских атрибутов к полям таблицы
SchemaImport.Mappings(Attrs.FindById("USERATTRIBUT")).FieldName := "USER_DATA";
SchemaImport.Mappings(Attrs.FindById("LINKATTR")).FieldName := "LINK";
SchemaImport.Mappings(Attrs.FindById("PARAMATTR")).FieldName := "PARAM";
SchemaImport.TableName := "RDS_IMP";
SchemaImport.Incremental := True;
//Создание схемы экспорта
Export := Dict.ExportSchemas;
SchemaExport := Export.Add;
SchemaExport.Id := "NewSchemaExport";
SchemaExport.Name := "Схема экспорта №1";
//Привязка базовых атрибутов к полям таблицы
SchemaExport.Mappings(Attrs.Key).FieldName := "EL_KEY";
SchemaExport.Mappings(Attrs.Name).FieldName := "EL_NAME";
SchemaExport.Mappings(Attrs.Order).FieldName := "EL_ORD";
SchemaExport.Mappings(Attrs.ParentKey).FieldName := "EL_PARENT_KEY";
//Привязка пользовательских атрибутов к полям таблицы
SchemaExport.Mappings(Attrs.FindById("USERATTRIBUT")).FieldName := "USER_DATA";
SchemaExport.Mappings(Attrs.FindById("LINKATTR")).FieldName := "LINK";
SchemaExport.Mappings(Attrs.FindById("PARAMATTR")).FieldName := "PARAM";
SchemaExport.TableName := "RDS_EXP";
(Dict As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера в корневом каталоге репозитория НСИ будет создан новый справочник НСИ с идентификатором «NewDictionary». В данном справочнике будут произведены следующие настройки:
Созданы три пользовательских атрибута:
Атрибут «USERATTRIBUT». Используется для установки даты;
Атрибут «LINKATTR». Используется для связи со справочником «Dict_1»;
Атрибут «PARAMATTR». Используется для хранения значений параметра;
Создан параметр справочника «Param1». В качестве значений данного параметра необходимо будет задавать дату. Значения параметра будут храниться по атрибуту «PARAMATTR»;
Создана связь со справочником «Dict_1». Для связи используется атрибут «LINKATTR»;
Создан заимствованный атрибут, ссылающийся на атрибут «Наименование» справочника «Dict_1»;
Создан уникальный ключ, в который будут входить пользовательский атрибут «USERATTRIBUT» и атрибут для хранения значений параметра «PARAMATTR»;
Созданы два уровня справочника. В дальнейшем могут использоваться для настройки агрегации;
Создана схема импорта. Импорт будет осуществляться из таблицы «RDS_IMP». При импорте данные будут дополняться;
Создана схема экспорта. Экспорт будет осуществляться в таблицу «RDS_EXP».
См. также: