前段时间做了一个的项目,里面涉及比较复杂的工作流。
其中 有涉及任务回退给上一个处理人,重新对任务做处理。还有任务回退到上一步,重新分配处理人,将任务处理。
下面针对第一种情况,将任务退回给上一个处理人,进行任务重新处理:
<task-node name="allotTaskNode">
<task name="allotTaskNode" swimlane="headSwimlane">
<controller>
<!--经办的内容-->
<variable name="inspectorTask" access="read,write,required">
</variable>
</controller>
</task>
<!--科员处理事件-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
</task-node>
<task-node name="inspectorTaskNode">
<task name="inspectorTaskNode" swimlane="inspectorSwimlane">
<controller>
<!--经办的内容-->
<variable name="inspectorTask" access="read,write,required">
</variable>
<variable name="dealInspectorTask" access="read,wirte,required">
</variable>
</controller>
</task>
<transition to="inspectorApproveNode" name="to inspectorApproveNode"></transition>
</task-node>
<task-node name="inspectorApproveNode">
<task name="inspectorApproveNode" swimlane="headSwimlane">
<controller>
<!--经办的内容-->
<variable name="approveInspectorTask" access="read,write,required">
</variable>
</controller>
</task>
<!--退回重做-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
<!--结束任务-->
<transition to="taskEndNode" name="to taskEndNode"></transition>
</task-node>
其中<!--退回重做-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
这步就可以任务退回重做 也可以让重新指派人做任务
实现是在处理inspectorApproveNode这个任务的实例的时候
假设这个任务实例是inspectorApproveTask(获取任务实例的方法简略)
然后在任务处理完以后 用这个方法:
inspectorApproveTask.end("to inspectorTaskNode");
这个方法 提交数据以后
查看下你的数据库中Jbpm_TaskInstance这个表中多了条新任务
就是inspectorTaskNode这个任务 并且里面的角色就是原来处理人的ID
那样 任务回退给上一个人就OK了。
下面说下处理任务重新分配到另外一个人:
当执行inspectorApproveTask.end("to inspectorTaskNode");以后
将产生的新任务实例的actorID改成你需要重新分配的人的ID就可以了
不过是要先获取inspectorTaskNode这个任务实例 可以通过HQL 参数是流程实例ID
和任务实例的名称 查找方法和我上次写的HQL差不多
得到任务实例:inspectorTask以后
将inspectorTask.setActorId(id);
以上就是解决回退的方法
写得不好 请大家多指出错误 或者是有其它更好的方法也可以提出来 让小弟多学习
谢谢
其中 有涉及任务回退给上一个处理人,重新对任务做处理。还有任务回退到上一步,重新分配处理人,将任务处理。
下面针对第一种情况,将任务退回给上一个处理人,进行任务重新处理:
<task-node name="allotTaskNode">
<task name="allotTaskNode" swimlane="headSwimlane">
<controller>
<!--经办的内容-->
<variable name="inspectorTask" access="read,write,required">
</variable>
</controller>
</task>
<!--科员处理事件-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
</task-node>
<task-node name="inspectorTaskNode">
<task name="inspectorTaskNode" swimlane="inspectorSwimlane">
<controller>
<!--经办的内容-->
<variable name="inspectorTask" access="read,write,required">
</variable>
<variable name="dealInspectorTask" access="read,wirte,required">
</variable>
</controller>
</task>
<transition to="inspectorApproveNode" name="to inspectorApproveNode"></transition>
</task-node>
<task-node name="inspectorApproveNode">
<task name="inspectorApproveNode" swimlane="headSwimlane">
<controller>
<!--经办的内容-->
<variable name="approveInspectorTask" access="read,write,required">
</variable>
</controller>
</task>
<!--退回重做-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
<!--结束任务-->
<transition to="taskEndNode" name="to taskEndNode"></transition>
</task-node>
其中<!--退回重做-->
<transition to="inspectorTaskNode" name="to inspectorTaskNode"></transition>
这步就可以任务退回重做 也可以让重新指派人做任务
实现是在处理inspectorApproveNode这个任务的实例的时候
假设这个任务实例是inspectorApproveTask(获取任务实例的方法简略)
然后在任务处理完以后 用这个方法:
inspectorApproveTask.end("to inspectorTaskNode");
这个方法 提交数据以后
查看下你的数据库中Jbpm_TaskInstance这个表中多了条新任务
就是inspectorTaskNode这个任务 并且里面的角色就是原来处理人的ID
那样 任务回退给上一个人就OK了。
下面说下处理任务重新分配到另外一个人:
当执行inspectorApproveTask.end("to inspectorTaskNode");以后
将产生的新任务实例的actorID改成你需要重新分配的人的ID就可以了
不过是要先获取inspectorTaskNode这个任务实例 可以通过HQL 参数是流程实例ID
和任务实例的名称 查找方法和我上次写的HQL差不多
得到任务实例:inspectorTask以后
将inspectorTask.setActorId(id);
以上就是解决回退的方法
写得不好 请大家多指出错误 或者是有其它更好的方法也可以提出来 让小弟多学习
谢谢