首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

JBPM4.4中的撤回和取回的功能实现 【转】

2012-07-26 
JBPM4.4中的退回和取回的功能实现 【转】在JBPM4.4中,退回功能很容易明白,就是执行到当前任务时,当前的任务

JBPM4.4中的退回和取回的功能实现 【转】

在JBPM4.4中,退回功能很容易明白,就是执行到当前任务时,当前的任务执行人,可以执行退回的功能,退回到上一个任务上面。取回的功能,我刚开始的时候,也没理解,感觉和退回的功能一样,就是执行人不同罢了,经过查询,终于搞明白了,并且有个比较好的实现方法。

退回和取回原来都是中国特色的工作流的功能。

退回是当前任务执行人,执行当前任务的时候,流转到这个任务的前一个任务上面。

取回是某个任务A被某个人B执行完,通过之后,到了下一个任务上,但是下一个任务人还没执行的时候,B人还可以在取回,让流程在流转到A任务上。

这两个功能,我的实现都是通过动态的去创建transition来实现任务流转的,只不过是执行人不同。从历史中可以查询上一个任务节点的信息,通过在当前任务节点和历史中的上一个任务节点中创建一个transition来实现流程的退回或取回的功能。

代码:

public void completeTaskByCreateTransiton(Task task, String destActivityName,String createTransitionName){
??//这里不会影响事物??
???? EnvironmentImpl envImpl = ((EnvironmentFactory)processEngine).openEnvironment();??
???? try {??
???????????
???????? //动态回退
???????? ExecutionImpl e = (ExecutionImpl)executionService.findExecutionById(task.getExecutionId());??
???????? ActivityImpl currentActivityImpl = e.getActivity();??
???????????
???????? ProcessDefinitionImpl processDefinitionImpl = currentActivityImpl.getProcessDefinition();??
???????????
???????? //生成一个transition??
???????? ActivityImpl destActivityImpl = processDefinitionImpl.findActivity(destActivityName);??
???????? TransitionImpl toApply = currentActivityImpl.createOutgoingTransition();??
???????? toApply.setSource(currentActivityImpl);??
???????? toApply.setDestination(destActivityImpl);??
???????? toApply.setName(createTransitionName);??
???????? this.taskService.completeTask(task.getId(),createTransitionName);??
???? } catch (Exception e) {??
???????? e.printStackTrace();??
???? }finally{??
???????? envImpl.close();??
???? }??
?}

代码里面task是流程中当前等待执行的任务节点,destActivityName是历史中上一个任务节点的名称,createTransitionName是动态创建transition的名称,可以为空。

热点排行