使用变量

时间:2018-03-21 14:20:03

标签: bpmn camunda

我的问题是关于Camunda API方法RuntimeService#messageEventReceived(java.lang.String, java.lang.String, java.util.Map<java.lang.String,java.lang.Object>)。我们使用此方法触发非中断边界消息事件(在等待不同消息的接收任务上)like this。作为方法调用中的第三个参数,我们传递了一些过程变量。

正如预期的那样,这会使接收任务处于活动状态并开始执行新的执行而离开边界事件。我原以为传递给RuntimeService#messageEventReceived的第三个参数的过程变量现在将存储在新创建的执行中,但似乎它们存储在接收任务的执行中。这对我来说没有多大意义,因为这不是消息“产生”的执行。

我们可以通过在执行RuntimeService#messageEventReceived之后确定哪个执行是新的并手动附加流程变量来解决此问题。但这似乎并不优雅 - 有没有人知道更好的解决方案?或者我误解了什么?

1 个答案:

答案 0 :(得分:0)

这是预期的行为,请参阅方法的java doc 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

由于过程变量是在现有执行上设置的,因此它们也可用于新创建的子执行。

作为替代方案,您可以在Boundary事件之后创建ServiceTask,这会创建过程变量 OR ,您可以在Boundary事件之后创建另一个ReceiveTask。可以使用您的消息和所需变量完成此接收任务。