IRdsLoaderBindings.AddByAttribute

Синтаксис Fore

AddByAttribute(Attribute: IRdsAttribute): IRdsBaseBinding;

Синтаксис Fore.NET

AddByAttribute(Attribute: Prognoz.Platform.Interop.Rds.IRdsAttribute): Prognoz.Platform.Interop.Rds.IRdsBaseBinding;

Параметры

Attribute. Атрибут справочника, для которого необходимо создать привязку.

Описание

Метод AddByAttribute создает привязку для указанного атрибута.

Комментарии

В соответствии с типом атрибута будет установлен тип привязки. Для привязки можно будет определить базовые свойства, а также привести к необходимому типу и задать специфические свойства. Доступны следующие типы привязок:

Пример

Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором «T_Dictionary» и репозитория НСИ «Rds_Repo», в котором создан табличный справочник НСИ - «Dict_1». Также предполагается, что поля таблицы и атрибуты справочника имеют одинаковые идентификаторы.

Sub UserProc;
Var
    MB: IMetabase;
    TableSource: ITable;
    RdsDictionary: IRdsDictionary;
    RdsLoader: IMetaRdsLoader;
    Attrs: IRdsAttributes;
    Attr: IRdsAttribute;
    Fields: ITableFields;
    Field: ITableField;
    Bindings: IRdsLoaderBindings;
    Binding: IRdsBaseBinding;
Begin
    MB := MetabaseClass.Active;
    //Источник
    TableSource := MB.ItemById("T_Dictionary").Bind As ITable;
    //Обновляемый справочник
    RdsDictionary := MB.ItemByIdNamespace("Dict_1", MB.GetObjectKeyById("RDS_REPO")).Bind As IRdsDictionary;
    RdsLoader := New MetaRdsLoader.Create;
    RdsLoader.Dictionary := RdsDictionary;
    RdsLoader.TableSource := TableSource;
    //Создание привязок
    Attrs := RdsDictionary.Attributes;
    Fields := TableSource.Fields;
    Bindings := RdsLoader.Bindings;
    For Each Attr In Attrs Do
        //Поиск в таблице поля с идентификатором,
        //совпадающим с идентификатором атрибута справочника
        Field := Fields.FindById(Attr.Id);
        If Field <> Null Then
            Select Case Attr.PredefinedType
                Case RdsPredefinedAttribute.Key:
                    Binding := Bindings.KeyBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Case RdsPredefinedAttribute.Name:
                    Binding := Bindings.NameBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Case RdsPredefinedAttribute.Order:
                    Binding := Bindings.OrderBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Else
                    Binding := Bindings.AddByAttribute(Attr);
                    Binding.Field := Field.Id;
            End Select;
        End If;
    End For;
    //Обновление записей
    RdsLoader.Load(UpdateLoadMode.InsertUpdate);
End Sub UserProc;

При выполнении примера будет инициализирован объект, используемый для создания табличных справочников НСИ и загрузки в них данных. В настройках объекта будет указан табличный справочник НСИ, данные которого необходимо обновить, будут созданы привязки для всех атрибутов. После этого данные справочника будут обновлены.

Пример Fore.NET

Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором «T_Dictionary» и репозитория НСИ «Rds_Repo», в котором создан табличный справочник НСИ - «Dict_1». Также предполагается, что поля таблицы и атрибуты справочника имеют одинаковые идентификаторы. Указанная процедура является точкой входа для .NET-сборки.

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    TableSource: ITable;
    RdsDictionary: IRdsDictionary;
    RdsLoader: IMetaRdsLoader;
    Attrs: IRdsAttributes;
    Attr: IRdsAttribute;
    Fields: ITableFields;
    Field: ITableField;
    Bindings: IRdsLoaderBindings;
    Binding: IRdsBaseBinding;
Begin
    MB := Params.Metabase;
    //Источник
    TableSource := MB.ItemById["T_Dictionary"].Bind() As ITable;
    //Обновляемый справочник
    RdsDictionary := MB.ItemByIdNamespace["Dict_1", MB.GetObjectKeyById("RDS_REPO")].Bind() As IRdsDictionary;
    RdsLoader := New MetaRdsLoaderClass();
    RdsLoader.Dictionary := RdsDictionary;
    RdsLoader.TableSource := TableSource;
    //Создание привязок
    Attrs := RdsDictionary.Attributes;
    Fields := TableSource.Fields;
    Bindings := RdsLoader.Bindings;
    For Each Attr In Attrs Do
        //Поиск в таблице поля с идентификатором,
        //совпадающим с идентификатором атрибута справочника
        Field := Fields.FindById(Attr.Id);
        If Field <> Null Then
            Select Case Attr.PredefinedType
                Case RdsPredefinedAttribute.rpaKey:
                    Binding := Bindings.KeyBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Case RdsPredefinedAttribute.rpaName:
                    Binding := Bindings.NameBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Case RdsPredefinedAttribute.rpaOrder:
                    Binding := Bindings.OrderBinding;
                    Binding.Attribute := Attr;
                    Binding.Field := Field.Id;
                Else
                    Binding := Bindings.AddByAttribute(Attr);
                    Binding.Field := Field.Id;
            End Select;
        End If;
    End For;
    //Обновление записей
    RdsLoader.Load(UpdateLoadMode.ulmInsertUpdate);
End Sub;

При выполнении примера будет инициализирован объект, используемый для создания табличных справочников НСИ и загрузки в них данных. В настройках объекта будет указан табличный справочник НСИ, данные которого необходимо обновить, будут созданы привязки для всех атрибутов. После этого данные справочника будут обновлены.

См. также:

IRdsLoaderBindings