BPM аддон, пример выражения для Candidate groups

Добрый день!

Подскажите пожалуйста где можно подсмотреть примеры синтаксиса
выражения (поле Expression), которое для кубика Пользовательской задачи возвращает
список кодов групп пользователей-кандидатов.

В документации этот вопрос не освещен.
https://docs.jmix.ru/jmix/bpm/user-task.html

Прикладная ситуация:

  • В процессе есть переменная с кодом подразделения “DEPxx”
  • Есть 50+ групп исполнителей по подразделениям, их коды “MANAGERS_DEPxx”
  • Есть 20+ групп руководителей по кустам подразделений, их коды “HEAD_xx”
    И тут никаких бинов не нужно, логика назначения групп исполнителей кубика простая, должна легко решаться выражениями. То есть менеджеры выбираются по (“MANAGERS_” + значение переменной кода подразделения), а руководители выбираются по (если значение переменной кода подразделения IN список конкретных подразделений, то такая-то явная группа руководителей за ними бдит, иначе … следующая группа подразделений и их руководители).

А чего-то вообще выражения в поле “Группы кандидатов” не работают, это баг или фича?
Отрабатывает или явное указание набора групп, или указание выражения с явным перечислением логинов пользователей в поле “Источник назначенных лиц”.

${“admin,user_central”} - так работает в выражении источника назначения ответственных лиц.
Но этот же подход не срабатывает в поле групп кандидатов, когда вместо логинов указываем коды этих групп.

Обошли проблему так:

  • Добавили переменную процесса userTask_candidateGroups
  • И через groovy скрипт присвоили ей значение
    if (zapros_depart == “1”) {execution.setVariable(“userTask_candidateGroups”, “USERS_DEPART01”)}
    if (zapros_depart == “2”) {execution.setVariable(“userTask_candidateGroups”, “USERS_DEPART02”)}
  • А на таске поставили группу кандидатов так flowable:candidateGroups="${userTask_candidateGroups}"
    И все прекрасно работает.
    Почему через выражения не работает пока так и не разобрались, вопрос остается открытым.

Добрый день!

Можно и так решить проблему)

Вообще выражения изначально нужны чтобы делать что-то простое, для фильтрации их не создавали.

Если нужно что-то вычислять, особенно, если кандидаты групп это какое то множество, то решается это через делегаты, где вы берете execution (находите его в процессе к текущей задаче) и в зависимости от контекста вычисляете, какие группы можно назначить, все это дело само вычисляется и вы отдаете список строк - имен групп. То есть да - это бин, он нужен для решения вычисления таргет групп или таргет пользователей, которые будут ассайнится на таску.

Про expression - вот пару важных ресурсов, где можно почитать, как писать expression:

  1. Expression Language(Camunda)
  2. В доке flowable особо нету ничего, как писать expression, ну и как я сказал ранее, на expression не очень рассчитан на вычисление листов групп
1 симпатия