浏览 2354 次
锁定老帖子 主题:jbpm学习之forks-join实现撤消
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-02
实现过程,主要能过设计join结点的nOutOfM属性,将其设置为1就行,通过一个action完成,这个action与进入结点事件node-enter绑定。实现: Join join = (Join) executionContext.getNode(); join.setNOutOfM(1); 完成这一步后,当所有路径中有一条路径到达join后,join结点就会向下运行。 这里还有一个比较重要的问题值得注意,那就是其它没有完成的任务如审批的任务应该让它结束,而不是想用简单的ti.end(),而是要当前任务结束,这个问题我还不是太明白,所以就说说我怎么做的吧。 由于前面的工作,现在join结点只要有一路到达它,它就会往下运行,所以,结束其它任务可以通过,离开结点事件node-leave 来实现。 具体代码如下: Join join = (Join) executionContext.getNode(); //取得join子令牌,即没有处理或是执行的任务的token,这话说的有点不对,主要是我也还没弄清楚。我的理解就是取得没有结束的子令牌。 Map map = executionContext.getToken().getActiveChildren(); Iterator it = map.values().iterator(); while(it.hasNext()) { Token token = (Token) it.next(); Collection<TaskInstance> unfinishedTasks =executionContext.getTaskMgmtInstance().getUnfinishedTasks(token); for (TaskInstance unfinishedTaskInstance : unfinishedTasks) { //这里就是我说的不是单间的end,其实end中是让任务向下运行,如果还有其它的后续结点,那么一样是会出问题的,应该如下做:将当前任务结束。 unfinishedTaskInstance.setOpen(false); unfinishedTaskInstance.setSignalling(false); unfinishedTaskInstance.setEnd(Clock.getCurrentTime()); } } 主要的代码就是这一点,仔细看看,理解了思路和话,结合自己的代码应该没有什么问题。 不过其中是有一些值得思考的问题的,如当你结束的时候,审批有可能刚好完成,也就是如何同步,我还不知道jbpm能不能解决这个问题如果不能,那就只能在程序设计时想办法了。 不好意思,我也是新手,希望对大家有帮助。 说真的,感觉是真真的高手从来都不帮我们这些新人,可能是我们的问题在过单间,只是我想说,再高的高手也是一点点学习成长起来的。好了,不发牢骚了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-04
//只要这样就行了,先取消流转,再取任务。这样就不会转到下会的任务。
unfinishedTaskInstance.setSignalling(false); unfinishedTaskInstance.cancel(); |
|
返回顶楼 | |