BPM модуль: согласование "один из" без стандартного выбора Забрать задачу

Добрый день!
В проекте использую модуль BPM для реализации простого процесса: в системе регистрируется письмо, автоматом запускается процесс, при запуске формируется перечень getProcActors, дальше задача для пользователей с параметрами Multi-instance : none и claimAllowed: true, любой сотрудник забирает задачу на себя.
image
Есть ли возможность обойти стандартный выбор “Забрать задачу”, чтобы уменьшить количество кликов? Т.е. чтобы на карточке документа сразу отображать кнопку с результатом задачи, при клике на которую участником процесса становился текущий пользователь и задача считалась выполненной, и был переход на следующий этап?

Вы описываете желаемй сценарий работы, как если бы процессная задача у вас была предельно простая и, между действием “Забрать задачу” и “Выполнить задачу” по сути нет какого-то времени на непосредственное исполнение задачи.
Но что-то мне подсказывает, что задача “Сортировать пакет документов” это все же дело не 2х секунд. Или это не так?
До тех пор, пока кто-то из менеджеров не “забрал задачу на себя” - задача видна всем потенциальным исполнителям. Если вы шаг совмещаете в одно действие шаг “забрать задачу” и “Выполнить задачу”, то наверняка кто-то из менеджеров отработает впустую.
Они все видят задачу, несколько из них параллельно начинает собирать документы, т.к. они не знают, что кто-то уже работает по задаче. А далее - кто кто первый отметил исполнение - тот молодец, а остальные поработало в пустую.
С точки зрения оптимизации работы менеджеров такой процесс совсем “не очень”.

А сценарий с claimAllowed в процессе как раз позволяет избежать таких накладок и пустой работы.

Но если все же действительно нужно реализовать такой сценарий, то тут, наверное, лучше переделывать процесс.
Назначать задачу сразу всем менеджерам параллельно, а после того как первый из участников отметил выполнение задачи - остальным “не успевшим” делать автоматическую отметку выполнения задачи типа со специальным выходом типа"AutoReject". Но такую отметку, скорее всего, придется делать из слушателя или определить Completion condition (multi-instance).
Тут есть тема про то как определить Completion condition (multi-instance).

1 симпатия

Добрый день!
Андрей правильно сказал, что можно сделать задачу с multi-instance type = parallel и claim allowed = false. Чтобы задача завершилась у всех параллельных участников как только её завершит первый участник, нужно задать completion condition: ${nrOfCompletedInstances >=1}:

Screenshot 2020-08-19 at 10.04.24

Почитать про переменную nrOfCompletedInstances можно в документации Activiti.

Задачам, завершённым автоматически, “из коробки” проставится ауткам completedAutomatically:

Screenshot 2020-08-19 at 10.17.38

2 симпатии

Спасибо за ответ!