这个问题与Camunda BPM引擎有关。

我想实现一个ExecutionListener,我可以将其附加到任何流程事件。该侦听器应将进程状态消息发送到消息队列。如果进程在某个地方的UserTask中等待,则该进程消息应包含一个状态为“ PENDING”。

现在,我想知道是否有一种简单的方法来找出进程是否在委托代码中的UserTask中(某个地方)正在等待(通过使用委托代码方法提供的DelegateExecution对象)。到目前为止找不到。

最佳答案

例如:

import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.camunda.bpm.engine.runtime.ActivityInstance;

public class ExampleExecutionListener implements ExecutionListener {

  public void notify(DelegateExecution execution) throws Exception {
    RuntimeService runtimeService = execution.getProcessEngineServices().getRuntimeService();
    ActivityInstance activityInstance = runtimeService.getActivityInstance(execution.getProcessInstanceId());

    boolean isInAnyUserTask = isInAnyUserTask(activityInstance);
  }

  protected boolean isInAnyUserTask(ActivityInstance activityInstance) {
    if ("userTask".equals(activityInstance.getActivityType())) {
      return true;
    }
    else {
      for (ActivityInstance child : activityInstance.getChildActivityInstances()) {
        boolean isChildInUserTask = isInAnyUserTask(child);
        if (isChildInUserTask) {
          return true;
        }
      }

      return false;
    }
  }
}


请注意,这不考虑称为流程实例。

09-12 00:16