JBPM4.3 自由流的实现,需要的参数只有taskid
注明:instanceid为相对核心参数,建议在流程发起的时候保留
本流目标节点已知(已知条件为自由流使用过程中的常态),没有当作参数传,写死在码里了。
大家可以当作参数传进来
本函数的参数为Java的一个bean其中只适用到了其中getTaskid() 的方法,获取的值不言而喻!
public void returnTask(WorkFlowBean workFlowBean) throws Exception{
taskService = processEngine.getTaskService();
//通过自由流来实现,直接到end 节点
EnvironmentFactory ef = (EnvironmentFactory) processEngine;
EnvironmentImpl evti = null;
evti = ef.openEnvironment();
TaskImpl currentTask=(TaskImpl) taskService.getTask(workFlowBean.getTaskid());
if(null==currentTask){
throw new Exception("任务不存在");
}
String currentactivityname= currentTask.getActivityName();
ExecutionImpl executionImpl=currentTask.getProcessInstance();
ProcessDefinitionImpl processDefinition=executionImpl.getProcessDefinition();
ActivityImpl destActivity=processDefinition.findActivity("end1");
if(null==destActivity){
//如果退回目的地的活动不存在,则属于流程定义错误
throw new Exception("no activity");
}
//获取当前活动任务节点
ActivityImpl currentActivity=processDefinition.findActivity(currentactivityname);
//从当前活动的任务动态创建一个流转
TransitionImpl transition=currentActivity.createOutgoingTransition
();
transition.setName(currentActivity.getName()+"To"+"end1");
transition.setDestination(destActivity);
evti.close();
//执行完成任务
taskService.completeTask(workFlowBean.getTaskid(), currentActivity.getName()+"To"+"end1");
//将自动创建的transition 移除
currentActivity.removeOutgoingTransition
(transition);
}