欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JOffice2中的JBPM4的任务回退实现

程序员文章站 2024-03-12 15:46:02
...

任务回退的工作可以有两种实现方式:

     1. 完成当前任务,产生新的后退任务

     2. 不需要完成当前任务,让当前任务直接指向后退的节点。

 

第一种方式,是joffice1提供的实现,其实现原理就需要有一个completeTask与newTask的动作。在jbpm4的流程历史中有记录这个跳转的过程,

 

第二种方式是joffice2提供的实现,其没有ComplteTask与newTask的动作,只有changeTaskDefintion与change assignee的动作。

 

以下为其实现的代码细节,测试过可以使用,

 

/**
	 * 从当前任务跳回上一任务
	 * @param curTask 当前任务对象
	 * @param preTaskName 前一任务名称 
	 * @param assignee 前一任务执行人ID
	 * @return
	 */
	public Task jumpToPreTask(Task curTask,String preTaskName,String assignee){
		EnvironmentImpl env=null;
		try{
			TaskImpl task=(TaskImpl)curTask;
			env=((EnvironmentFactory) processEngine).openEnvironment();
			ProcessInstance pi=getProcessInstanceByTaskId(curTask.getId());
			
			ProcessDefinitionImpl pd=(ProcessDefinitionImpl)getProcessDefinitionByTaskId(curTask.getId());
			TaskDefinitionImpl taskDef= pd.getTaskDefinition(preTaskName);
			//更换其Execution
			ExecutionImpl exeImpl=(ExecutionImpl)pi;
			//更换其活动的定义
			Activity preActivity=pd.findActivity(preTaskName);
			exeImpl.setActivity(preActivity);
			task.setActivityName(preTaskName);
			task.setName(preTaskName);
			task.setDescription(preTaskName);
			task.setExecution(exeImpl);
			//更换执行人
			task.setAssignee(assignee);
			task.setCreateTime(new Date());
			task.setSignalling(true);
			//task.setNew(true);
			//更换流程任务的定义
			if(taskDef!=null){
				task.setTaskDefinition(taskDef);
			}else{
				//查看其是否为开始任务,这表示开始任务TODO
				//String startName=jbpmService.getStartNodeName();
				TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
			    taskDefinition.setName(preTaskName);
			    taskDefinition.setPriority(1);
			    taskDefinition.setProcessDefinition(pd);
			    
			    ActivityImpl startActivityImpl=pd.findActivity(preTaskName);
			    
			    ActivityImpl startTaskImpl=pd.createActivity();
			    startTaskImpl.setName(preTaskName);
			    List outTrans=new ArrayList();
			    outTrans.addAll(startActivityImpl.getOutgoingTransitions());
			    startTaskImpl.setOutgoingTransitions(outTrans);
			
			}
			taskService.saveTask(task);
			return task;
		}finally{
			if(env!=null)env.close();
		}
	}
	

 第二种方式在Jbpm4的历史表中并没有记录,但我们可以不用jbpm4自带的流程历史,可以加上我们自己的流程历史,这如下图所示:

 

JOffice2中的JBPM4的任务回退实现

 

目前存在的问题就是不能退回至开始节点,不过有一想法就是可以让动态创建一任务为开始任务,让流程退回这里,但可惜的是,退回是可以,不过再让它往下走的话,就会出现节点类型不能转化的错误。

 

 

 

相关标签: JSP 活动 工作

上一篇: Hibernate查询时 new对象

下一篇: