完成另一个用户任务后,取消一个用户任务

时间:2019-01-11 05:40:58

标签: activiti bpmn

同时创建两个用户任务(任务A和B),当一个任务完成时,需要取消另一个任务,反之亦然。这可以通过使用任务侦听器(完成事件)来完成。但是问题是,如果两个任务同时完成怎么处理?

2 个答案:

答案 0 :(得分:2)

您尝试过吗?竞争任务是一项事务性操作,这意味着,如果两个任务同时完成,则只有一个事务会“获胜”,而另一个事务将被回滚,从而推动第二个事务重试。通常,如果您具有重试机制,那应该可以工作

答案 1 :(得分:0)

我建议您使用multiple instances创建一个userTask。它可以同时创建多个用户任务,并设置不同的条件以结束多个实例。

这是语法规则
<userTask id="userTask1" name="Activiti is awesome!" activiti:assignee="${user}">
    <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${userList}" activiti:elementVariable="user">
        <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
    </multiInstanceLoopCharacteristics>
</userTask>
  • IsSequential表示并行或串行创建
  • $ {userList}表示从外部接收的列表对象
  • completionCondition意味着,一旦满足您设置的条件,所有未完成的userTask将被自动删除。

更多信息,请访问activiti User Guide#Multi-instance

希望可以解决您的问题!