|
|
节点2的处理人(假设是张三),办理完毕之后,将任务提交,此时任务到达了节点3(假设李四办理),这时李四就会收到一个待办任务,在李四还没有办理之前,张三突然发现,有一个业务数据填写错误,或者粘贴的附件错误,这时张三需要将发送给李四的任务撤销(也叫收回),重新更正数据后或修改粘贴的附件后再发送给李四审批。还有一种情况是,假设节点3的办理人有2个人(李四和王五),那么张三需要在运行期根据业务特性手动地选择任务是提交给李四还是王五,但是由于李四的误操作,把本来应该发给王五的办理任务错发送给了李四,此时,在李四办理之前,张三也可以将发送给李四的任务撤销(或收回),然后重新发送给王五。
jBPM4实现:
在jBPM4中实现撤销,虽然场景有很多,但是各个场景的处理是一样的,也就是在撤销时,首先删除需要撤销的任务实例及其与此任务实例相关的所有工作流实例。在jBPM4提供了级联删除任务实例的相关方法,如下:
TaskServiceImpl.java
public void deleteTaskCascade(String taskId) {
commandService.execute(new DeleteTaskCmd(taskId, true));
}
其次修改当前任务实例的状态,即将张三的已经办理完毕的节点2对应的TaskInstance的状态更改为待办状态:
(Task.STATE_OPEN)
task.setState(ask.STATE_OPEN);
taskService.saveTask(task);
小结:
撤销的需求在审批流中也是最常见的业务需求,毕竟人都有犯错的时候嘛,而且一般的软件都有Undo功能。但是对于jBPM4中的fork-join,sub-process都需要把撤销任务的相关实例都删除。 |
|