Add(BindingType: RdsLoaderBindingType): IRdsBaseBinding;
BindingType. Тип создаваемой привязки.
Метод Add создает привязку с заданным типом.
В соответствии с указанным типом в созданной привязке необходимо будет указать соответствующий атрибут справочника. Также привязку можно будет привести к необходимому типу и задать специфические свойства. Доступны следующие типы привязок:
IRdsPredefinedBinding. Параметры привязки системного атрибута;
IRdsTranslationBinding. Параметры привязки атрибута, содержащего значения на определенном языке;
IRdsUserAttributeBinding. Параметры привязки пользовательского атрибута;
IRdsLinkedBinding. Параметры привязки связанного атрибута;
IRdsImportedBinding. Параметры привязки заимствованного атрибута.
Для выполнения примера в репозитории предполагается наличие следующих объектов:
справочник НСИ с идентификатором «DICT_LINKED». С данным справочником будет создана связь из создаваемого справочника НСИ;
таблицы с идентификатором «T_DICTIONARY», из которой в справочник будут загружены данные;
таблицы с идентификатором «T_ATTRVALUES», в которой хранятся значения для множественного атрибута в создаваемом справочнике.
Добавьте ссылки на системные сборки: Dal, Db, Metabase, Rds.
Описание требуемой структуры и данных для используемых объектов:
Sub UserProc;
Var
MB: IMetabase;
CrInfo: IMetabaseObjectCreateInfo;
LinkDictionary: IRdsDictionary;
RdsLoader: IMetaRdsLoader;
Bindings: IRdsLoaderBindings;
PredBinding: IRdsPredefinedBinding;
LinkBinding: IRdsLinkedBinding;
ImportBinding: IRdsImportedBinding;
MultiValueBinding: IRdsBaseBinding;
Begin
// Получаем текущий репозиторий
MB := MetabaseClass.Active;
// Получаем справочник, с которым будет создана связь
LinkDictionary := MB.ItemById("DICT_LINKED").Bind As IRdsDictionary;
// Создаем объект для создания справочника НСИ и загрузки в него данных
RdsLoader := New MetaRdsLoader.Create;
// Указываем таблицу, из которой будут загружены данные
RdsLoader.TableSource := MB.ItemById("T_DICTIONARY").Bind As ITable;
// Получаем привязки полей таблицы-источника и создаваемого справочника НСИ
Bindings := RdsLoader.Bindings;
// Задаем привязки обязательных системных атрибутов справочника НСИ
Bindings.KeyBinding.Field := "KEY";
Bindings.NameBinding.Field := "NAME";
Bindings.OrderBinding.Field := "ORD";
// Задаем привязку для атрибута «Владелец» в справочнике НСИ
PredBinding := Bindings.Add(RdsLoaderBindingType.Predefined) As IRdsPredefinedBinding;
PredBinding.PredefinedType := RdsPredefinedAttribute.ParentKey;
PredBinding.Field := "PARENT";
// Задаем привязку для атрибута, который будет использоваться для связи с другим справочником
LinkBinding := Bindings.Add(RdsLoaderBindingType.Linked) As IRdsLinkedBinding;
// Задаем наименование и идентификатор атрибута
LinkBinding.Id := "FORLINK";
LinkBinding.Name := "Для связи";
// Указываем, что связь будет создана по ключу
LinkBinding.Reference := LinkDictionary.Attributes.Key;
// Указываем поле в таблице-источнике, которое содержит значения для данного атрибута
LinkBinding.Field := "FORLINK";
// Создаем заимствованный атрибут из связанного справочника
ImportBinding := Bindings.Add(RdsLoaderBindingType.Imported) As IRdsImportedBinding;
// Задаем наименование и идентификатор атрибута
ImportBinding.Id := "NAME_LINKEDDICT";
ImportBinding.Name := "Столица";
// Указываем привязку, в которой описан атрибут, используемый для связи с другим справочником
ImportBinding.LinkBinding := LinkBinding;
// Указываем, что заимствованный атрибут будет отображать
// наименования элементов из связанного справочника
ImportBinding.Lookup := LinkBinding.Dictionary.Attributes.Name;
// Задаем привязку для атрибута со множественными значениями
MultiValueBinding := Bindings.Add(RdsLoaderBindingType.UserAttribute);
// Задаем наименование и идентификатор атрибута
MultiValueBinding.Id := "MULTIATTR";
MultiValueBinding.Name := "Официальные языки";
// Указываем поле в таблице-источнике, которое содержит значения для данного атрибута
MultiValueBinding.Field := "MULTIATTR";
// Задаем тип данных атрибута
MultiValueBinding.DataType := DbDataType.String;
// Указываем, что атрибут может иметь множественные значения
MultiValueBinding.HasMultipleValues := True;
// Указываем таблицу, в которой хранятся множественные значения
MultiValueBinding.DetailTableObject := MB.ItemById("T_ATTRVALUES");
// Задаем используемые поля с данными из таблицы, в которой хранятся множественные значения
MultiValueBinding.KeyField := "KEY";
MultiValueBinding.OrderField := "ORDER";
MultiValueBinding.ValueField := "VALUE";
// Указываем, что множественный атрибут может содержать пустые значения
MultiValueBinding.Nullable := True;
// Задаем информацию о создаваемом справочнике
CrInfo := MB.CreateCreateInfo;
CrInfo.Parent := MB.ItemById("MDM");
CrInfo.Id := MB.GenerateId("Dict", CrInfo.Parent.Key);
// Создаем и сохраняем справочник
(RdsLoader.CreateObject(CrInfo) As IMetabaseObject).Save;
// Выполняем загрузку данных
RdsLoader.Load(UpdateLoadMode.Insert);
End Sub UserProc;
В результате выполнения примера будет настроен объект, используемый для создания справочников НСИ и загрузки в них данных. В настройках объекта будет указан источник данных и созданы привязки для различных типов атрибутов. После этого будет создан справочник стран и в него будут загружены данные о столицах и используемых государственных языках.
См. также: