Jbpm 4 撤回 、强制完成

来源:互联网 发布:淘宝小叶紫檀树苗真假 编辑:程序博客网 时间:2024/04/30 03:57

1. 本人之前未用过jbpm    2. 此时采用4.2版本

问题描述: 节点2向节点3提交一任务,在节点3尚未处理前,怎么将任务撤回(回到节点2).

考虑:

     当前的活动节点已经是节点3;

     方式1:删除当前的任务(3的),更改已完成节点的任务状态为open

           首先删除需要撤销的任务实例及其与此任务实例相关的所有工作流实例. 其次修改当前任务实例的状态,即将张三的已经办理完毕的节点2对应的TaskInstance的状态更改为待办状态.

           但此时,删除任务老出异常,本人对此种操作的方法不甚明了.


             a 、

                commandService.execute(new DeleteTaskCmd(taskId, true));

                 b、    

                      task.setState(task.STATE_OPEN);

                      taskService.saveTask(task);




         方式2:采用动态路由机制(动态加转移--Transition)

                 此种方法当我是创建转移,然后完成节点3任务,转到节点2.


                 source.createOutgoingTransition();
                  ... ...

                 ts.completeTask(t.getId(),outcome);--此处调用完成了,但未触发目标节点的任务数据生成


没用过就是麻烦,调试N次,终于按方式2实现功能;(百度里发一下,竟然也没人回)


*******取执行实例executionImpl时,应该需要先open"环境" **,不然没办法以此再来获取当前的活动。如果在执行过程中,调用自己

的方法(比如自己写sql查询任务),有可能会影响事务的提交。所以我尽量采用他们自己的service。利用此方法2去撤回到原节点后,可以针对

此任务赋权限(将之前的操作人赋给它)。


         总觉得方式1的实现才是正统的,应该api帮助我们去处理相关的细节。而且用方法2的话,当遇到会签时,撤回逻辑还要进一步的完善,相当


的麻烦。如果方法1能够实现,估计会比较通用。


在实现流程的强制完成功能时,我还是用的动态路由的原理,创建当前节点到结束结点的转移(活动节点可以通过流程定义去find出来)。

原创粉丝点击