JBPM 实现动态退回路径

一般我们设计流程都需要考虑退回问题,这样,较多的转移路径被设计。
我们可以考虑一般简单行的回退问题:即在明确各个流程回退的路径下,我们可以设置动态路径。

如图:
[img]F:\pic\receive.png[/img]

[img]F:\pic\leave0321.png[/img]

使用了动态回退后
[img]F:\pic\receive0518.png[/img]

[img]F:\pic\leave0509.png[/img]

呵呵,相对简单一些。流程也好看一些。
现在分析一下思路:
1.需要设置退回的监听器,在流程运行的时候,自动创建退回的路径
2.封装退回任务的调用。

具体的设计:
1流程设计

在task节点下添加监听器,设置回退路径m_rollbackTo:
 
<on event="start">
<event-listener class="com.shangwang.workFlow.RollbackListener">
<field name="m_rollbackTo">
<string value="申请"/>
</field>
</event-listener>
</on>


2.完成监听器的退回路径创建:
/**
* 增加一条用户退回的路径
*/
public void notify(EventListenerExecution execution) throws Exception {
//获取流程定义对象
ProcessInstance processInstance = execution.getProcessInstance();
String processDefinitionId = processInstance.getProcessDefinitionId();
ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).uniqueResult();

//获取退回目的地的活动定义对象
ActivityImpl toActivityImpl = processDefinition.findActivity(m_rollbackTo);

//退回活动目的地不存在,流程定义错误
if(null == toActivityImpl){
String ms = "in "+processDefinitionId+" no "+ m_rollbackTo;
throw new Exception(ms);
}
//获得当前活动的定义对象
ActivityImpl fromActivityImpl = ((ExecutionImpl)execution).getActivity();

//建立退回的转移路径
TransitionImpl transtion = fromActivityImpl.createOutgoingTransition();
String tranName = fromActivityImpl.getName() + "to " + m_rollbackTo;
transtion.setName(tranName);
transtion.setDestination(toActivityImpl);
//removeOutgoingTransition(transition);




}


需要注意的是RollbackListener是实现org.jbpm.api.listener.EventListener接口,实现notify()方法。
3.封装退回任务的调用,编写了一个TaskRollbackService的服务:
//获取流程引擎
private static final ProcessEngine processEngine = Configuration.getProcessEngine();
//获取任务服务
private static final TaskService taskService = processEngine.getTaskService();

public void completeTaskRollback(String taskId,String rollbackToActName){
Task task = taskService.getTask(taskId);
taskService.completeTask(task.getId(),task.getActivityName()+"to "+rollbackToActName);
}



调用的时候注意一下参数传递:taskId是流程ID,rollbackToActName是回退路径!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值