最近在实施政府办公项目的时候,经常有客户在问,公文的流程能否自由流转,如我在拟稿完成后,直接归档,不需要再经过核稿与审批流程。同样,我可以在任何一个任务上,直接把任务回退到以上任何一个环节,如,在审批的过程中,若不合适,可以直接回退至拟稿任务。如下图所示:
非常幸运,JBPM4也提供了给我们动态创建Transition的接口。即在当前的节点中,动态创建出当前节点所有的跳转的Transition,问题是如果你给你的活动节点创建了连接后,下一次进入该任务时,不能显示这些动态创建的连接。否则当前任务的跳转连接会越来越多。
所以对于那些在两个节点间不存在的连接,而又想实现这两个节点的跳转的话,就需要动态创建连接,然后再实现任务跳转,跳转后再进行删除连接。相当于现实中我们所说的过河拆桥模式。
有了这种思想,Jbpm实现任务回退、补签等操作都是相当容易。
动态创建:
/**
* 动态创建连接当前任务节点至名称为destName的节点的Transition
* @param taskId 任务节点ID
* @param sourceName 源节点名称
* @param destName 目标节点名称
*/
public void addOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine;
Environment env=null;
try {
env = environmentFactory.openEnvironment();
//取得当前流程的活动定义
ActivityImpl sourceActivity = pd.findActivity(sourceName);
//取得目标的活动定义
ActivityImpl destActivity=pd.findActivity(destName);
//为两个节点创建连接
TransitionImpl transition = sourceActivity.createOutgoingTransition();
transition.setName("to" + destName);
transition.setDestination(destActivity);
sourceActivity.addOutgoingTransition(transition);
}catch(Exception ex){
logger.error(ex.getMessage());
}finally{
if(env!=null)env.close();
}
}
动态删除:
/**
* 动态删除连接sourceName与destName的Transition
* @param taskId
* @param sourceName
* @param destName
*/
public void removeOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine;
Environment env=null;
try {
env = environmentFactory.openEnvironment();
//取得当前流程的活动定义
ActivityImpl sourceActivity = pd.findActivity(sourceName);
//若存在这个连接,则需要把该连接删除
List<Transition> trans=sourceActivity.getOutgoingTransitions();
for(Transition tran:trans){
if(destName.equals(tran.getDestination().getName())){//删除该连接
trans.remove(tran);
break;
}
}
}catch(Exception ex){
logger.error(ex.getMessage());
}finally{
if(env!=null)env.close();
}
}
其实现效果如下所示,可以跳至任何节点,并且可以指派给任何人。
指定至相关人员:
- 大小: 32.1 KB
- 大小: 94.9 KB
- 大小: 51.8 KB
- 大小: 87.9 KB
分享到:
相关推荐
JOffice2中的JBPM4的任务回退实现
包含Jar包,实现回退功能,可以运行,不喜勿喷
jbpm4源码jbpm4源码jbpm4源码
JBPM4 开发文档 实例 流程 JBPM4 开发文档 实例 流程 JBPM4 开发文档 实例 流程
jbpm4整合流程例子及附代web流程设计器可以进行流程设计
jbpm4流程提交及执行完整代码,把每个文件放到对应的位置即可。 生成流程跟踪图的方法见: http://download.csdn.net/source/2905937
JBPM流程监控的实现过程
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
业务流程执行:流程的启动、任务的提交、回退、撤销、取回、处理任务等操作、 实用需求实现:执行权限、工作流留痕、事务提醒 只需一套实现,你的业务只要在挂接中配置则可以具有工作流功能 业务方面:OA项目实战...
JBPM视屏教程共9节 jBPM 4视频教程04设计请假流程
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
extjs jbpm4 流程设计器,希望对你有所帮助!
jBPM4的PVM实现解析
JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。
jbpm 4 ssh2 入门教程~
关于JBPM中并发子流程的实现方式,网上有很多的说法,但是好像每种办法都有这样那样的缺点,要么实现太复杂,要么就是会使Token无法继续流转。这里我介绍一种我的并发子流程的实现方式:使用TaskNode使任务并行的...
应用jBPM4解决中国特色的流程需求,中国特色流程解决思路。
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
jbpm4。4中表之间的关系,jbpm4 表关系
jbpm4.4流程图