Создание справочника НСИ

Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «REP_NSI». В данном репозитории уже создан справочник НСИ с идентификатором «DICT_RDS».

В базе данных, установленной для репозитория НСИ, имеются таблицы «RDS_IMP» и «RDS_EXP», содержащие следующий набор полей:

Идентификатор поля Тип данных поля Назначение поля
EL_KEY Целый Ключ элемента.
EL_NAME Строковый Наименование элемента.
EL_ORD Целый Порядок элемента.
EL_PARENT_KEY Целый Ключ родительского элемента.
USER_DATA Дата Значение пользовательского атрибута.
LINK Целый Значение связанного атрибута, соответствующие ключу элемента в присоединенном справочнике.
PARAM Дата Значение параметра, при котором доступен данный элемент.

Данные таблицы будут подключены в схемах импорта и экспорта соответственно.

Пример Fore

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». В данном справочнике будут произведены следующие настройки:

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
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 := Params.Metabase;
    NSI := MB.ItemById["REP_NSI"];
    CrInfo := MB.CreateCreateInfo();
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_RDS_DICTIONARY As integer;
    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.ddtDateTime;
    Attr.Id := "USERATTRIBUT";
    Attr.Name := "Пользовательский атрибут";
    //Атрибут для связи
    LinkAttr := Attrs.Add();
    LinkAttr.DataType := DbDataType.ddtInteger;
    LinkAttr.Id := "LINKATTR";
    LinkAttr.Name := "Атрибут для связи";
    //Атрибут для параметра
    ParamAttr := Attrs.Add();
    ParamAttr.DataType := DbDataType.ddtDateTime;
    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;

См. также:

Примеры