JBPM4 流程回退实现方法

在JBPM4流程设计中,让让当前节点回退到该节点以前的任意节点,如图,如果想从task3回到task1,可以使用的方法有:
①创建一个Transition对象,从task3到task1
/**
* 动态创建连接当前任务节点至名称为destName的节点的Transition
* @param taskId 任务节点ID
* @param sourceName 源节点名称
* @param desName 目标节点名称
*/ public void addOutTransition(ProcessDefinitionImpl pd,String sourceName,String desName){
ProcessEngine pe = Configuration.getProcessEngine();
EnvironmentFactory ef =(EnvironmentFactory)pe;
EnvironmentImpl evti = null;
try{
evti = ef.openEnvironment();

ActivityImpl sourceActivity = pd.getActivity(sourceName);

TransitionImpl tran = sourceActivity.createOutgoingTransition();
ActivityImpl desActivity = pd.getActivity(desName);

tran.setName("to"+desName);
tran.setDestination(desActivity);

sourceActivity.addOutgoingTransition(tran);

}catch(Exception e){
e.printStackTrace();
}finally{
if(evti != null)evti.close();
}

}
/**
* 动态删除连接sourceName与destName的Transition
* @param taskId
* @param sourceName
* @param desName
*/
public void removeOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine;
EnvironmentImpl env=null;
try {
env = environmentFactory.openEnvironment();
//取得当前流程的活动定义
ActivityImpl sourceActivity = pd.findActivity(sourceName);

//若存在这个连接,则需要把该连接删除
List<Transition> trans=(List<Transition>) sourceActivity.getOutgoingTransitions();
for(Transition tran:trans){
if(destName.equals(tran.getDestination().getName())){//删除该连接
trans.remove(tran);
break;
}
}
}catch(Exception ex){

}finally{
if(env!=null)env.close();
}
}
这样再通过take()、completeTask()等方法就可以回退了
②调用ProcessEngin.execute()方法
③调用ExecutionImpl.moveTo()方法
推荐使用第一种
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值