Автоматическая привязка данных

Сложный

Автоматическая привязка данных позволяет в автоматическом режиме создать привязки данных объектов со сложной объектной моделью. В Creatio автоматическая привязка данных доступна к использованию для каталога продуктов в продуктах линейки Financial Services Creatio.

Структура автоматической привязки данных  

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

Составляющие автоматической привязки данных
Название Назначение Классы и интерфейсы
Сервис По заданной структуре запускает генерацию привязок данных. Генерация выполняется в фоновом режиме. Service — интерфейс для вызова автоматической привязки данных из front-end части.
Контроллер Обращение к классам Obtainer (получение структуры связанных записей) и Manufacturer (генерация привязок данных). Controller — класс для управления созданием привязок данных.
Генератор привязок Является оберткой ядрового класса PackageElementUtilities, представляет собой удобный интерфейс для выполнения CRUD-операций с привязками данных. Операции с данными описаны в статьях Доступ к данным через ORM и Прямой доступ к данным. Manufacturer — промежуточный класс для взаимодействия между контроллером, классом PackageElementUtilities и классом PackageValidator.
Получатель структуры Возвращает в контроллер структуру связанных записей для основной сущности. Obtainer — при формировании привязок данных позволяет гибко изменять структуру связанных объектов для основной сущности. Для определения требуемой реализации использует шаблон Strategy.

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

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

Способ сохранения записей.

Способы сохранения записей:

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

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

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

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

Алгоритм обработки структуры:

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

Способы именования автоматических привязок данных:

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

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

Добавить пользовательскую структуру для привязки объекта 

  1. Создайте схему [ Исходный код ] ([ Source code ]). Для создания схемы воспользуйтесь статьей Разработка конфигурационных элементов.
  2. Создайте класс сервиса.

    1. В дизайнере схем добавьте пространство имен Terrasoft.Configuration.
    2. Создайте класс. Шаблон названия класса: [НазваниеСущности]SchemaDataBindingStructureObtainer (например, ProductSchemaDataBindingStructureObtainer). По указанному шаблону будет выполняться поиск классов при определении используемой реализации получателя (компонент Obtainer).
    3. В качестве родительского класса укажите класс BaseSchemaDataBindingStructureObtainer.
    4. Добавьте пользовательскую реализацию метода интерфейса ObtainStructure(). В этом методе сформируйте и верните необходимую структуру сущностей.

      Метод ObtainStructure()
      Код скопирован
      public override SchemaDataBindingStructure ObtainStructure(UserConnection userConnection)

      Важно. При необходимости модификации реализации структуры, которая содержится в недоступных для редактирования пакетах, в пользовательском пакете создайте класс и используйте атрибут [Override]. Описание атрибута содержится в статье Атрибут [Override].

  3. Опубликуйте схему исходного кода.

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

Автоматическую привязку данных можно вызвать из front-end или из back-end части.

Вызвать автоматическую привязку данных из front-end части 

  1. Вызовите сервис генерации привязок.
  2. Установите настройки для выполнения генерации привязок.

    Способы установки настроек для генерации привязок:

    • Передайте параметры.

      • Пакет для генерации привязки.
      • Название сущности.
      • Перечень идентификаторов для привязки.
    • Передайте фильтр.

Ниже представлен пример вызова автоматической привязки данных из front-end части с помощью параметров.

Пример вызова автоматической привязки данных из front-end части с помощью параметров
Код скопирован
ServiceHelper.callService("SchemaDataBindingService",
    "GenerateBindings",
    callback,
    {
        "schemaName": this.entitySchemaName,
        "sysPackageUId": sysPackageUId
        "recordIds": ["...", "..."]
    },
    this
);

Ниже представлен пример вызова автоматической привязки данных из front-end части с помощью фильтра.

Пример вызова автоматической привязки данных из front-end части с помощью фильтра
Код скопирован
ServiceHelper.callService("SchemaDataBindingService",
    "GenerateBindingsByFilter",
    callback,
    {
        "schemaName": this.entitySchemaName,
        "sysPackageUId": sysPackageUId
        "filterConfig": ...
    },
    this
);

Важно. Автоматическая привязка данных, вызванная из front-end части, запускается в фоновом режиме. По выполнению привязки данных на коммуникационной панели отобразится уведомление, которое будет содержать информацию о количестве успешно и неуспешно привязанных записях продуктов.

Вызвать автоматическую привязку данных из back-end части 

  1. Создайте экземпляр класса SchemaDataBindingController.
  2. Вызовите метод GenerateBindings, в который передайте:

    • Идентификатор пакета.
    • Название сущности.
    • Перечень идентификаторов для привязки.

Ниже представлен пример вызова автоматической привязки данных из back-end части.

Пример вызова автоматической привязки данных из back-end части
Код скопирован
var dataBindingController = ClassFactory.Get<IDataBindingController>(
    new ConstructorArgument("userConnection", UserConnection));
var result = dataBindingController.GenerateBindings(schemaName, recordIds, sysPackageUId);