Получить количество назначенных и неназначенных пользовательских задач внутри слушателей Camunda

Мне нужно получить количество назначенных и неназначенных UserTasks для processInstance внутри методов уведомления Camunda BPM DelegateListeners и TaskListeners.

Получить значения из запроса задачи нетрудно, но он включает только область транзакции. Есть ли шанс получить эти значения также внутри метода уведомления слушателя - то есть также для кэшированной области. Я уже пытался объединить запрос задачи с кэшированной областью (например, путем увеличения assignTaskCount в событиях «присваивания» TaskListener), но синхронизировать транзакцию и кешированную область сложно.

Возможно, есть возможное решение через ActivityInstances процесса (например, сделано здесь по другим причинам), но я не смог найти если и как. Было бы очень полезно узнать.

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

PS: Я использовал термин область действия для зафиксированного состояния Camunda и термин cached scope для состояния между двумя фиксациями Camunda. Не уверен, что это правильная терминология, но я думаю, что где-то ее читал.


person FrVaBe    schedule 21.11.2016    source источник
comment
Не зная, к какому классу вы имеете в виду, вы всегда можете вызвать BPMPlatform.getProcessEngine (), чтобы получить доступ к движку процесса и выполнить запросы.   -  person webjockey    schedule 21.11.2016
comment
@webjockey Да, у меня есть экземпляры DelegateTask или DelegateExecution. Но, как я уже сказал, запрос не дает полных ответов, поскольку результат не включает состояние после последней фиксации Camunda (то, что я называю состоянием cached).   -  person FrVaBe    schedule 21.11.2016
comment
Используйте asyncBefore в своей служебной задаче, которая вызывает вашего делегата, чтобы зафиксировать транзакцию. Сервисная задача будет выполняться с помощью асинхронного продолжения. См. Документацию docs. camunda.org/manual/7.5/user-guide/process-engine/   -  person Zelldon    schedule 22.11.2016
comment
@Zelldon Может помочь в сервисных задачах. На данный момент я больше борюсь с параллельным выполнением пользовательских задач. Думаю, я заметил, что сначала достигается состояние ожидания, когда были созданы все пользовательские задачи. Это правда?   -  person FrVaBe    schedule 22.11.2016


Ответы (1)


Camunda выполняет пакетные обновления между границами транзакций; он может даже решить обновить коммиты ближе к концу процесса. Для активности async after / before есть свойство; попробуйте их и посмотрите, будет ли транзакция завершена в ближайшее время

person webjockey    schedule 21.11.2016
comment
Спасибо. Я бы предпочел не менять поведение транзакции только для достижения своей цели. Но это могло бы быть решением в других обстоятельствах. Поэтому +1. - person FrVaBe; 23.11.2016