在我们做流程项目时,总会有一种情况是流程已经跑到后面了,但客户要求我要从某某任务开始重走,而且还是要求从什么地方都可以重走.如果你要是按jbpm的思路做,就要到处划线,最后流程图是乱七八糟,(当然你客户不看流程图就没问题,呵呵).
很多了解jbpm工作原理的人都知道要想让流程回到以前的一个任务重新开始,需要控制任务开启与关闭,还有就是要控制令牌的指向的节点.其实在实际应用中要跟复杂一些比如,要将流程回退到一个分支中,或从一个分支回到到分支开始之前任务上.从子流程回退到主流程中,从子流程回到前面的一个子流程中......(&%#$*? 更复杂的我就不说,用的比较少了).对于以上情况我们会逐个讨论.
今天可以先讨论一下最简单的情况,先做个假设有流程 a-->b-->c-->d-->e.当前流程已经跑到d,如果要回到b重新跑怎么做那.步骤就是我们上面提到:
一,关闭任务b后创建的并且没有关闭的任务(与任务b同在一个节点上没有完成的任务除外)
二,开启任务b.
三,将令牌指向任务b所在的节点.
如何开关一个任务 :任务实例TaskInstance有三个重要的属性end(任务结束时间),isOpen(任务是否开启),isSignalling(任务是否可流转).控制这3个属性就可以控制任务实例.如果要开启一个任务,就让end=null.isOpen=true,isSignalling=true.如果要关闭一个任务就是end=new Date().isOpen=false,isSignalling=false.另外还有一个属性isCancelled,如果你关闭的任务作废了,不需要作为历史任务保留,就让isCancelled=true;
这些TaskInstance 类是不提供方法来设置的
我们就需要手动的通过sql语句来更新这个任务
update JBPM_TASKINSTANCE set ISOPEN_=1,ISSIGNALLING_=1,END_= null where ......
如何控制令牌的指向 :当前令牌保存的是任务d所在节点的节点Id,因为你要从任务b开始重新走流程,所以应该将任务b所在节点的id装入令牌中:
Node node = taskInstance.getTask().getTaskNode();//取任务b所在节点
if (node == null) {
node = taskInstance.getTask().getStartState();//有可能是要退到头的
}
taskInstance.getToken().setNode(node);
这样就ok了,不过这样只能处理简单的回退,当涉及到分支,子流程事时不成的(这个下次再说),开启和关闭任务的3个属性有的是没有set方法的,需要写sql,hql.
最后说一下我这里回退的业务逻辑,回退操作每次只能开启一个历史任务,该任务之后创建的任务全部作废(end=null.isOpen=true,isSignalling=true,isCancelled=true),但如果有属同一节点上的任务且未完成.就不作废了.
同上jbpm 也是不提供直接调用的方法所以 还是要通过sql语句来完成
update JBPM_TOKEN set NODE_ =? where ID_ = ?
分享到:
相关推荐
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料
jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解
JBPM流程监控的实现过程
文档详细介绍了如何利用JBPM开发流程应用,从框架构造到节点处理。
jbpm流程引擎框架源码,一套流行的流程引擎框架代码
jbpm数据库表字段详解,字段详细说明,和表关系都有,希望大家有jbpm的学习资料多多交流。
JBPM案例详解 全部源代码 JBPM案例详解 全部源代码 JBPM案例详解 全部源代码 JBPM案例详解 全部源代码
JBPM流程代码演示
jbpm流程
jbpm4.4流程图
eclipse3.4解压版带jbpm流程定义插件,很简单,只需解压即可使用
讲讲jbpm流程引擎内核.很好的教程,从别人那下的,贡献给大家!
jbpm流程设计器,适用于jbpm工作流设计
JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。
揭秘jbpm流程引擎内核设计思想及构架.doc
jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程
该内容完全和本人在CSDN博客上发布的JBPM案例详解内容配套,内容真实,希望对有需要的朋友有所帮助
jbpm数据库系统表结构明细,详细说明jbpm的系统的表的功能。各表之间的关系。
jbpm工作流详解