Настройка и выполнение задач процесса

Назначение

Задача процесса — это запланированный запуск определения из справочника «Задачи» для одного процесса. В записи сохраняются плановое время, конфигурация обработчика, состояние выполнения и число повторов.

Запуск можно создать:

  • вручную на вкладке Задачи в карточке процесса;

  • действием конструктора правил Создать задачу;

  • через ProcessTaskService или HTTP API.

Отменить ожидающие запуски можно на той же вкладке, действием Отменить задачу или через API.

Подключение

Вкладка карточки процесса

Добавьте в конфигурацию типа процесса:

processTaskShow=1

После этого в карточке процесса появляется вкладка Задачи.

process task card process
рис. 1. Вкладка «Задачи» в карточке процесса

Пользователю нужны права из ветки Права  Ядро  Администрирование  Процессы  Задачи: управление, поиск, создание и отмена — в зависимости от доступных ему операций.

Шаг мастера создания процесса

Задачи можно запланировать ещё при создании процесса. Добавьте шаг мастера:

step=1
{@inc:step}
createWizard.step.{@step}.title=<div class="h4 mt-4">Планирование задач:</div>
createWizard.step.{@step}.class=ru.bgcrm.core.task.process.wizard.ProcessTaskStep

Исполнитель

Для автоматического выполнения включите TaskRunner в конфигурации сервера:

task.runner.enabled=true

Размер пула и задержка между проходами настраиваются ключами task.runner.pool.size и task.runner.delay.seconds. Значения и умолчания приведены в разделе Конфигурация сервера.

Работа в карточке процесса

Планирование, просмотр результата и отмена описаны в руководстве пользователя.

Выполнение

Исполнитель работает под системным пользователем и обрабатывает задачи последовательно в рамках одного процесса:

  1. Ищет запись с наступившим временем в статусе PENDING либо ERROR, у которой ещё остались повторы.

  2. Не берёт новую задачу, если у того же процесса уже есть запись IN_PROGRESS.

  3. Блокирует выбранную строку FOR UPDATE, переводит её в IN_PROGRESS и фиксирует транзакцию.

  4. Если в определении задан класс, создаёт TaskHandler и вызывает execute(taskId, context). Иначе исполняет JEXL-скрипт. Когда заполнены оба поля, приоритет у класса.

  5. После успеха ставит EXECUTED и время выполнения. После исключения ставит ERROR и сохраняет сообщение со стеком в поле результата.

Статусы:

Код В интерфейсе Когда устанавливается

PENDING

В ожидании

Сразу после создания

IN_PROGRESS

Выполняется

Перед вызовом обработчика

EXECUTED

Выполнено

Обработчик завершился без исключения

ERROR

Ошибка

Обработчик выбросил исключение

CANCELLED

Отменено

Пользователь, автоматизация или сервис отменили ожидающий запуск

При создании, отмене и окончательном завершении публикуются события процесса. Им соответствуют события конструктора правил:

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

Зависшая запись IN_PROGRESS блокирует выбор всех следующих задач этого процесса. Автоматического тайм-аута или восстановления такого запуска в модуле нет; состояние нужно диагностировать по результату, серверному логу и таблице process_tasks.
Выключение определения в справочнике запрещает новые запуски, но не останавливает уже созданные задачи процесса.

HTTP API

Контракт действий приведён в HTTP API задач процесса.