根据启动消息名称查询流程实例

时间:2016-05-09 07:58:52

标签: bpmn camunda

ENV:camunda 7.4,BPMN 2.0

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

  1. 是否可以查询由消息名称标识的特定消息启动的流程实例?
  2. 如果是,怎么样?
  3. 如果不是,为什么?
  4. 如果不是,那么?
  5. 一些API,例如IncidentMessages?

1 个答案:

答案 0 :(得分:1)

这不是开箱即用的功能,但应该通过使用流程变量轻松构建。

基本步骤是:

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

public class MessageStartEventListener implements ExecutionListener {

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

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

2。在消息start events:

处声明执行侦听器
<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();