Настройка и выполнение задач процесса
Назначение
Задача процесса — это запланированный запуск определения из справочника «Задачи» для одного процесса. В записи сохраняются плановое время, конфигурация обработчика, состояние выполнения и число повторов.
Запуск можно создать:
-
вручную на вкладке Задачи в карточке процесса;
-
действием конструктора правил Создать задачу;
-
через
ProcessTaskServiceили HTTP API.
Отменить ожидающие запуски можно на той же вкладке, действием Отменить задачу или через API.
Подключение
Вкладка карточки процесса
Добавьте в конфигурацию типа процесса:
processTaskShow=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. Значения и умолчания приведены в разделе
Конфигурация сервера.
Работа в карточке процесса
Планирование, просмотр результата и отмена описаны в руководстве пользователя.
Выполнение
Исполнитель работает под системным пользователем и обрабатывает задачи последовательно в рамках одного процесса:
-
Ищет запись с наступившим временем в статусе
PENDINGлибоERROR, у которой ещё остались повторы. -
Не берёт новую задачу, если у того же процесса уже есть запись
IN_PROGRESS. -
Блокирует выбранную строку
FOR UPDATE, переводит её вIN_PROGRESSи фиксирует транзакцию. -
Если в определении задан класс, создаёт
TaskHandlerи вызываетexecute(taskId, context). Иначе исполняет JEXL-скрипт. Когда заполнены оба поля, приоритет у класса. -
После успеха ставит
EXECUTEDи время выполнения. После исключения ставитERRORи сохраняет сообщение со стеком в поле результата.
Статусы:
| Код | В интерфейсе | Когда устанавливается |
|---|---|---|
|
В ожидании |
Сразу после создания |
|
Выполняется |
Перед вызовом обработчика |
|
Выполнено |
Обработчик завершился без исключения |
|
Ошибка |
Обработчик выбросил исключение |
|
Отменено |
Пользователь, автоматизация или сервис отменили ожидающий запуск |
При создании, отмене и окончательном завершении публикуются события процесса. Им соответствуют события конструктора правил:
Событие выполнения публикуется после успеха либо после последней разрешённой ошибки, но не после промежуточной неудачной попытки.
Зависшая запись IN_PROGRESS блокирует выбор всех следующих задач этого процесса.
Автоматического тайм-аута или восстановления такого запуска в модуле нет; состояние нужно
диагностировать по результату, серверному логу и таблице process_tasks.
|
| Выключение определения в справочнике запрещает новые запуски, но не останавливает уже созданные задачи процесса. |
HTTP API
Контракт действий приведён в HTTP API задач процесса.