Запуск непрерывного граничного события с переменными

У меня вопрос о методе Camunda API RuntimeService#messageEventReceived(java.lang.String, java.lang.String, java.util.Map<java.lang.String,java.lang.Object>). Мы используем этот метод для запуска события пограничного сообщения без прерывания (в задаче приема, которая ожидает другого сообщения), нравится это. В качестве третьего параметра в вызове метода мы передаем некоторые переменные процесса.

Как и ожидалось, это оставляет задачу получения активной и запускает новое выполнение, оставляя граничное событие. Я ожидал, что переменные процесса, переданные третьему аргументу RuntimeService#messageEventReceived, теперь будут сохранены во вновь созданном исполнении, но, похоже, они сохраняются при выполнении задачи приема. Для меня это не имеет особого смысла, потому что это не результат выполнения сообщения.

Мы можем обойти эту проблему, определив, какое выполнение является новым после выполнения RuntimeService#messageEventReceived, и вручную добавив туда переменные процесса. Но это не выглядит изящным - знает ли кто-нибудь лучшее решение? Или я что-то недопонимаю?


person Heiko    schedule 21.03.2018    source источник
comment
Пожалуйста, опубликуйте свою модель процесса. Также имейте в виду, что обработка выполнений является внутренней концепцией API и не должна использоваться для определения вашей обработки.   -  person Zelldon    schedule 03.04.2018


Ответы (1)


Это ожидаемое поведение, см. Java-документ метода void messageEventReceived (String, String, Map)

void messageEventReceived(String messageName,
                        String executionId,
                        Map<String,Object> processVariables)
Notifies the process engine that a message event with the name 'messageName' has been received and has been correlated to an execution with id 'executionId'. The waiting execution is notified synchronously. Note that you need to provide the exact execution that is waiting for the message if the process instance contains multiple executions.
Parameters:
messageName - the name of the message event
executionId - the id of the process instance or the execution to deliver the message to
processVariables - a map of variables added to the execution

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

В качестве альтернативы вы можете создать ServiceTask после события границы, которое создает переменные процесса ИЛИ вы создаете еще один ReceiveTask после события границы. Эта задача получения может быть завершена с вашим сообщением и необходимыми переменными.

person Zelldon    schedule 03.04.2018