Задача обработки сущностей

Обзор

Задача обработки сущностей (Entity Data Task) — особый тип сервисной задачи, который выполняет операции с сущностями Jmix в процессе. Для работы с данными ее удобнее использовать, чем обычную сервисную задачу. Она позволяет загружать сущности из базы данных, изменять их и создавать новые.

Графическая нотация

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

data task
Задача обработки сущностей — расширение, специфичное для Jmix, поэтому другие инструменты моделирования BPMN ее не поддерживают. При экспорте модели она заменяется стандартной сервисной задачей, но ее свойства в XML сохраняются.
XML-представление

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

Вот только что созданная задача обработки сущностей; по умолчанию это задача Load entity.

    <serviceTask id="entity-data-task" name="Entity Data Task"
        flowable:type="jmix-load-entities-jpql">
      <extensionElements />
    </serviceTask>

Свойства

В моделере BPMN можно задать следующие свойства задачи обработки сущностей:

data task properties

Свойство

Описание

Id

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

Name

Имя задачи, не более 255 символов. Обычно задачи называют по схеме «глагол + объект», например «Согласовать заказ» или «Отправить счет».

Task type

Операция, которую выполняет задача. Поля ниже зависят от выбранного типа. См. Типы задачи обработки сущностей.

JPQL query, JPQL query parameters

Запрос для типа Load entities. См. Загрузка сущностей.

Entity name

Сущность, которую нужно создать или изменить, для типов Create entity и Modify entity. См. Создание сущностей и Изменение сущностей.

Process variable

Переменная процесса с изменяемой сущностью для типа Modify entity. См. Изменение сущностей.

Result variable

Переменная, в которой сохраняются загруженные сущности или созданная сущность, для типов Load entities и Create entity. См. Результат загрузки.

Save result as

Single element или Collection для типа Load entities. См. Результат загрузки.

Entity attributes

Значения атрибутов изменяемой или создаваемой сущности. См. Задание атрибутов.

Execution listeners

См. Слушатели выполнения.

Asynchronous execution

  • Asynchronous

  • Exclusive

  • Asynchronous leave

  • Asynchronous leave exclusive

Обновлено в Jmix 3.1

Documentation

Описание и дополнительные сведения об элементе.

У задачи обработки сущностей нет свойств множественного экземпляра. Но ее можно использовать внутри встроенного подпроцесса, который выполняется как множественный экземпляр. См. раздел Множественный экземпляр.

Типы задачи обработки сущностей

Задача может выполнять одно из следующих действий:

Чтобы удалить сущность, используйте сервисную задачу и вызовите метод, который удаляет ее с помощью DataManager.

Загрузка сущностей

Чтобы загрузить сущности, выберите тип задачи Load Entities на панели свойств. Затем задайте JPQL query и при необходимости переменную результата.

Параметры JPQL-запроса

Параметры условий WHERE и ORDER BY можно задать прямо в теле запроса, например:

select s from smpl_Order s where s.amount < 500

Но часто значения параметров нужно задавать извне, то есть во время выполнения. Для этого создайте именованные параметры:

create jpql parameter
Имя создаваемого параметра должно совпадать с именем параметра в запросе. Автоматической проверки нет.

Значения параметров можно передать в процесс двумя способами:

  • Переменная процесса

  • Выражение

Результат загрузки

Чтобы использовать результат загрузки дальше в процессе, задайте Result variable. Можно ввести имя существующей переменной процесса или произвольное имя — тогда будет создана новая переменная.

Если уже есть переменная процесса с таким именем, но другого типа, она будет перезаписана. Тип переменной результата определяется типом результата запроса.

Кроме того, в поле Save result as можно выбрать один из двух вариантов в зависимости от ожидаемого результата запроса: Single element или Collection.

XML-представление

В XML задача загрузки сущностей объявляется как сервисная задача с собственным типом flowable:type.

<serviceTask id="load-orders-task" name="Load orders"
    flowable:type="jmix-load-entities-jpql"> (1)
  <extensionElements>
    <flowable:field name="jpql"> (2)
      <flowable:string>select s from smpl_Order s where s.amount &gt; :amount1</flowable:string>
    </flowable:field>
    <flowable:field name="resultVariable">
      <flowable:string>order</flowable:string> (3)
    </flowable:field>
    <flowable:field name="saveLoadResultAs">
      <flowable:string>collection</flowable:string> (4)
    </flowable:field>
    <flowable:field name="jpqlParameters"> (5)
      <flowable:string>[{"name":"amount1","valueType":"processVariable","value":"targetAmount"}]</flowable:string>
    </flowable:field>
  </extensionElements>
</serviceTask>
1 объявление задачи загрузки данных
2 тело JPQL-запроса
3 имя переменной результата
4 тип результата
5 параметры запроса в формате JSON

Изменение сущностей

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

Также переменную процесса можно указать напрямую, введя ее имя. Это нужно, если переменной нет в списке, например если она создается из кода в сервисной задаче или получена как результат загрузки сущности другой задачей обработки сущностей.

modify data task properties

Задание атрибутов

Значение атрибута можно задать одним из следующих способов:

  • Значение

  • Выражение

  • Бин Spring

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

    jmix.bpm.data-task-spring-bean-entity-attribute-enabled=true

XML-представление

В XML задача изменения сущностей объявляется как сервисная задача с собственным типом flowable:type. Атрибуты изменяемой сущности передаются в формате JSON.

<serviceTask id="modify-order-task" name="Modify order"
    flowable:type="jmix-modify-entity"> (1)
  <extensionElements>
    <flowable:field name="entityName">
      <flowable:string>smpl_Order</flowable:string> (2)
    </flowable:field>
    <flowable:field name="processVariable">
      <flowable:string>order</flowable:string> (3)
    </flowable:field>
    <flowable:field name="entityAttributes">
      <flowable:string>[{"name":"approvalDate","valueType":"directValue"}]</flowable:string> (4)
    </flowable:field>
  </extensionElements>
</serviceTask>
1 объявление типа задачи
2 определение класса сущности
3 определение переменной результата
4 атрибуты сущности в формате JSON

Создание сущностей

Чтобы создать сущность, выберите имя сущности в списке. Все несистемные атрибуты можно задать с помощью BPMN Inspector.

create data task properties

Если эта сущность понадобится дальше в процессе, задайте параметр Result variable.

XML-представление

В XML задача создания сущностей объявляется как сервисная задача с собственным типом flowable:type. Атрибуты создаваемой сущности передаются в формате JSON.

<serviceTask id="create-order-task" name="Create order"
    flowable:type="jmix-create-entity"> (1)
  <extensionElements>
    <flowable:field name="entityName">
      <flowable:string>smpl_Order</flowable:string> (2)
    </flowable:field>
    <flowable:field name="resultVariable">
      <flowable:string>order</flowable:string> (3)
    </flowable:field>
    <flowable:field name="entityAttributes">
      <flowable:string>[{"name":"status","valueType":"directValue","value":"New"},{"name":"customer","valueType":"expression","value":"${customer}"}]</flowable:string> (4)
    </flowable:field>
  </extensionElements>
</serviceTask>
1 объявление типа задачи
2 определение класса сущности
3 определение переменной результата
4 атрибуты сущности в формате JSON