这个问题与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;
}
}
}
请注意,这不考虑称为流程实例。