并行启动了2个任务:ManagerReviewTask
和DirectorReviewTask
。
当:
DirectorReviewTask
先完成,ManagerReviewTask
也应该完成(以编程方式)。ManagerReviewTask
先完成,工作流程应等到指定用户完成DirectorReviewTask
。我该怎么做?你能举一个例子来说明activiti xml吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
这是我向DirectorReviewTask
添加听众并完成ManagerReviewTask
的方式。
<userTask id="DirectorReviewTask" name="DirectorReviewTask">
<extensionElements>
<activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/>
</extensionElements>
</userTask>
这里是listner类:
public class DirectorReviewTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
if (TaskListener.EVENTNAME_COMPLETE.equals(delegateTask.getEventName())) {
String executionId = delegateTask.getExecutionId();
Task managerReviewTask = taskService.createTaskQuery().executionId(executionId).taskName("ManagerReviewTask").singleResult();
if (managerReviewTask != null) {
taskService.complete(managerReviewTask.getId());
}
}
}
}
我认为你最终应该使用并行网关:
<parallelGateway id="fork" />
<sequenceFlow sourceRef="fork" targetRef="ManagerReviewTask" />
<sequenceFlow sourceRef="fork" targetRef="DirectorReviewTask" />
<userTask id="ManagerReviewTask" name="ManagerReviewTask" />
<sequenceFlow sourceRef="ManagerReviewTask" targetRef="join" />
<userTask id="DirectorReviewTask" name="DirectorReviewTask">
<extensionElements>
<activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="DirectorReviewTask" targetRef="join" />
<parallelGateway id="join" />
<sequenceFlow sourceRef="join" targetRef="GO_FROM_HERE" />
答案 2 :(得分:1)
从BPMN的角度来看,您有可能选择:
在案例1中,您只需要考虑如何强制activiti从同一进程中仅停止一个DirectorReviewTask,而不是并行运行所有实例。