JBPM 实现动态退回路径
一般我们设计流程都需要考虑退回问题,这样,较多的转移路径被设计。
我们可以考虑一般简单行的回退问题:即在明确各个流程回退的路径下,我们可以设置动态路径。
如图:
使用了动态回退后
呵呵,相对简单一些。流程也好看一些。
现在分析一下思路:
1.需要设置退回的监听器,在流程运行的时候,自动创建退回的路径
2.封装退回任务的调用。
。
具体的设计:
1流程设计
在task节点下添加监听器,设置回退路径m_rollbackTo:
<on event="start"> <event-listener name="code">/** * 增加一条用户退回的路径 */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);}
//获取流程引擎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);}