Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Механизм автоматической генерации привязок данных

Glossary Item Box

Общие сведения

Механизм автоматической генерации привязок данных позволяет в автоматическом режиме создавать привязки данных объектов со сложной объектной моделью.

Механизм автоматической привязки данных состоит из следующих компонентов:

  • Service — интерфейс для вызова механизма из клиентской части. В фоновом режиме запускает генерацию привязок данных по структуре.
  • Controller — предназначен для управления процессом создания привязок данных и его контроля. Для получения структуры связанных записей и генерации привязок данных выполняется обращение к механизмам компонентов Obtainer и Manufacturer.
  • Manufacturer — промежуточный класс взаимодействия между компонентом Сontroller и классами PackageElementUtilities и PackageValidator. Фактически является оберткой ядрового класса PackageElementUtilities и представляет собой удобный интерфейс для выполнения CRUD-операций с привязками данных.
  • Obtainer — при привязывании данных позволяет гибко изменять структуру связанных объектов для основной сущности. Для определения требуемой реализации использует шаблон Strategy. Возвращает в компонент Controller структуру связанных записей для основной сущности.

Описание механизма автоматической генерации привязок данных

Структура связанных сущностей

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

Табл. 1. — Свойства структуры связанных сущностей

Поле Описание
EntitySchemaName Название сущности.
FilterColumnPathes Массив путей к первичной колонке основной сущности (объединяются при фильтрации через OR).
IsBundle

Признак сохранения записей. Возможны следующие варианты:

  • Сохранение всех записей в одну привязку.
  • Создание по одной привязке на каждую запись, связанную по фильтру с одной записью основной сущности.
Columns Перечень колонок для привязки.
InnerStructures Перечень структур вложенных объектов (например, детали, которые относятся к основной сущности).
DependsStructures Перечень структур, от которых зависит текущая структура (например, справочники, на которые ссылается запись в текущей структуре через справочные поля).

Определение пользовательской структуры для объекта

Общий порядок действий при задании структуры для привязки определенного объекта:

  1. В пространстве имен Terrasoft.Configuration создайте класс с именем <Название сущности>SchemaDataBindingStructureObtainer.

    При определении используемой реализации компонента Obtainer по шаблону имени <Название сущности>SchemaDataBindingStructureObtainer будет выполняться поиск классов (например, ProductSchemaDataBindingStructureObtainer).

  2. Созданный класс унаследуйте от BaseSchemaDataBindingStructureObtainer.
  3. В созданном классе реализуйте метод
    public override SchemaDataBindingStructure ObtainStructure(UserConnection userConnection)
    
    В этом методе необходимо сформировать и вернуть требуемую структуру сущностей.

Если реализация структуры уже есть в недоступных для редактирования пакетах, но ее необходимо модифицировать, то необходимо в пользовательском пакете создать класс и использовать атрибут [Override]. Описание атрибута [Override] содержится в статье "Фабрика объектов замещающих классов".

Описание принципа генерации привязок данных

Обработка структуры начинается с основной сущности. Для каждого экземпляра класса структуры SchemaDataBindingStructure выполняются следующие действия:

  1. Рекурсивно обрабатывается каждая структура перечня структур свойства DependsStructures, чтобы при привязке основной сущности все объекты, на которые ссылается текущий, уже были привязаны.
  2. По фильтру свойства FilterColumnPathes создается привязка к записи основной сущности.
  3. Рекурсивно обрабатывается каждая структура перечня структур свойства InnerStructures.

    Структуры свойства InnerStructures ссылаются на основную сущность, поэтому их необходимо привязывать после основной сущности.

Именование привязок данных

Возможны следующие варианты именования автоматических привязок данных:

  • Если IsBundle == true, то agb_EntitySchemaName. EntitySchemaName — наименование сущности текущей привязки.
  • Если IsBundle == false, то agb_EntitySchemaName_PrimaryEntityId. PrimaryEntityId — идентификатор записи основной сущности, с которой связаны записи в текущей привязке.

При привязке записи, по которой уже была выполнена автоматическая привязка, существующие привязки будут обновлены при условии, что их имена соответствуют указанному шаблону. Но обновиться могут только привязки, имена которых соответствуют указанному шаблону. Поэтому не рекомендуется переименовывать автоматически созданные привязки.

Вызов механизма автоматической генерации привязок данных

Вызов механизма из клиентской части

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

  1. Вызвать сервис создания привязок.
  2. Передать в сервис создания привязок необходимые параметры (пакет для создания привязки, название сущности, а также перечень идентификаторов для привязки) или фильтр.

Вариант вызова сервиса создания привязок с перечнем идентификаторов записей представлен ниже.

ServiceHelper.callService("SchemaDataBindingService",
    "GenerateBindings",
    callback,
    {
        "schemaName": this.entitySchemaName,
        "sysPackageUId": sysPackageUId
        "recordIds": ["...", "..."]
    },
    this
);

Вариант вызова сервиса создания привязок с фильтром представлен ниже.

ServiceHelper.callService("SchemaDataBindingService",
    "GenerateBindingsByFilter",
    callback,
    {
        "schemaName": this.entitySchemaName,
        "sysPackageUId": sysPackageUId
        "filterConfig": ...
    },
    this
);

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

Вызов механизма из серверной части

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

  1. Создать экземпляр класса SchemaDataBindingController.
  2. Вызвать метод GenerateBindings, передав в него идентификатор пакета, название сущности и перечень идентификаторов для привязки.

Вызов механизма автоматической генерации привязок данных из серверной части представлен ниже.

var dataBindingController = ClassFactory.Get<IDataBindingController>(
    new ConstructorArgument("userConnection", UserConnection));
var result = dataBindingController.GenerateBindings(schemaName, recordIds, sysPackageUId);
© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?