根据起始消息名称查询流程实例

Query process instances based on starting message name

环境:camunda 7.4,BPMN 2.0

给定一个进程,可以由多个启动消息事件启动。

  1. 是否可以查询由消息名称标识的特定消息启动的流程实例?
  2. 如果是,怎么做?
  3. 如果不是,为什么?
  4. 如果不是现在,什么时候?

IncidentMessages 等 API?

这不是开箱即用的功能,但使用过程变量应该很容易构建。

基本步骤是:

1。实现将消息名称设置为变量的 execution listener

public class MessageStartEventListener implements ExecutionListener {

  public void notify(DelegateExecution execution) throws Exception {
    execution.setVariable("startMessage", "MessageName");
  }
}

请注意,通过 DelegateExecution#getBpmnModelElementInstance 您可以访问侦听器附加到的 BPMN 元素,因此您可以动态确定消息名称。

2。在消息开始事件中声明执行侦听器:

<process id="executionListenersProcess">
  <startEvent id="theStart">
    <extensionElements>
      <camunda:executionListener
          event="start" class="org.camunda.bpm.examples.bpmn.executionlistener.MessageStartEventListener" />
    </extensionElements>
    <messageEventDefinition ... />
  </startEvent>

  ...
</process>

请注意,使用 BPMN 解析侦听器,您可以通过编程方式将此类侦听器添加到每个流程定义中的每个消息启动事件。参见 this example

3。通过该变量进行流程实例查询过滤

RuntimeService runtimeService = processEngine.getRuntimeService();
List<ProcessInstance> matchingInstances = runtimeService
  .createProcessInstanceQuery()
  .variableValueEquals("startMessage", "MessageName")
  .list();