Activiti 跳转节点

Activiti 跳转节点
1、跳转主要代码。
package com.Deer.activiti;

import java.util.Iterator;  
import java.util.Map;  
import org.activiti.engine.impl.interceptor.Command;  
import org.activiti.engine.impl.interceptor.CommandContext;  
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;  
import org.activiti.engine.impl.persistence.entity.ExecutionEntityManager;  
import org.activiti.engine.impl.persistence.entity.TaskEntity;  
import org.activiti.engine.impl.pvm.process.ActivityImpl;  
   
/** 
 * 
 * 节点的跳转 
 */  
public class NodeJumpTaskCmd implements Command<Void> {
	
	protected String executionId;//执行ID
	protected ActivityImpl desActivity; //目标引擎对象 
	protected Map<String, Object> paramvar;//变量
	protected ActivityImpl currentActivity;//当前引擎对象
	protected String deleteReason = "completed";
	/** 
	 * 构造参数 可以根据自己的业务需要添加更多的字段 
	 * @param executionId 
	 * @param desActivity 
	 * @param paramvar 
	 * @param currentActivity 
	 */  
	public NodeJumpTaskCmd(String executionId, ActivityImpl desActivity,  
		Map<String, Object> paramvar, ActivityImpl currentActivity) {  
			this.executionId = executionId;  
			this.desActivity = desActivity;  
			this.paramvar = paramvar;  
			this.currentActivity = currentActivity;  
	}
	public NodeJumpTaskCmd(String executionId, ActivityImpl desActivity,  
			Map<String, Object> paramvar, ActivityImpl currentActivity,String deleteReason) {  
				this.executionId = executionId;  
				this.desActivity = desActivity;  
				this.paramvar = paramvar;  
				this.currentActivity = currentActivity;  
				this.deleteReason = deleteReason;  
		}
	
	/**
	 * 获取执行实体管理
	 * 获取当前的任务执行对象 设置对应的值
	 * 获取当前的任务
	 * 删除
	 * 执行目标工作流
	 */
	public Void execute(CommandContext commandContext) {
		//获取执行实体管理
		ExecutionEntityManager executionEntityManager = commandContext.getExecutionEntityManager();  
		//根据ExecutionID 查找执行实体   获取当前流程的executionId,因为在并发的情况下executionId是唯一的。  
		ExecutionEntity executionEntity = executionEntityManager.findExecutionById(executionId);  
		executionEntity.setVariables(paramvar);  
		executionEntity.setEventSource(this.currentActivity);  
		executionEntity.setActivity(this.currentActivity);  
		//获取当前ExecutionID的任务       根据executionId 获取Task  
		Iterator<TaskEntity> localIterator = commandContext.getTaskEntityManager()  
							.findTasksByExecutionId(this.executionId).iterator();  
		while (localIterator.hasNext()) {  
			TaskEntity taskEntity = (TaskEntity) localIterator.next();  
			// 触发任务监听  
			taskEntity.fireEvent("complete");  
			// 删除任务的原因  
			commandContext.getTaskEntityManager()  
			.deleteTask(taskEntity, this.deleteReason, false);  
		}  
		executionEntity.executeActivity(this.desActivity);  
		System.out.println();
		return null;  
	}  
}  

2、小封装。
package com.Deer.activiti.util;

import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.impl.pvm.ReadOnlyProcessDefinition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;

import com.activiti.activiti.NodeJumpTaskCmd;

public class NodeJumpTaskCmdUtil {
	
	/**
	 * 跳转节点
	 * @param processEngine			流程引擎
	 * @param vars				该节点带有的参数
	 * @param executionIdOrProcInsId	执行ID或者实例ID
	 * @param destinationActivityNodeId	目标节点ID
	 * @param currentActivityNodeId		当前节点ID
	 */
	public static void jumpTask(ProcessEngine processEngine,Map<String, Object> vars,String executionIdOrProcInsId,String destinationActivityNodeId,String currentActivityNodeId){
		RepositoryService repositoryService = processEngine.getRepositoryService();  
		ReadOnlyProcessDefinition processDefinitionEntity = (ReadOnlyProcessDefinition) repositoryService  
								.getProcessDefinition("leave:1:4");  
		//执行ID
		String executionId = executionIdOrProcInsId;
		// 目标节点  
		ActivityImpl destinationActivity = (ActivityImpl) processDefinitionEntity.findActivity(destinationActivityNodeId);  
		// 当前节点  
		ActivityImpl currentActivity = (ActivityImpl)processDefinitionEntity.findActivity(currentActivityNodeId);  
		
		processEngine.getManagementService().executeCommand(  
				new NodeJumpTaskCmd(executionId, destinationActivity, vars,  
									currentActivity)
				);  
	}
	
	public static void jumpTask(ProcessEngine processEngine,Map<String, Object> vars,String executionIdOrProcInsId,String destinationActivityNodeId,String currentActivityNodeId,String deleteReason){
		RepositoryService repositoryService = processEngine.getRepositoryService();  
		ReadOnlyProcessDefinition processDefinitionEntity = (ReadOnlyProcessDefinition) repositoryService  
								.getProcessDefinition("leave:1:4");  
		//执行ID
		String executionId = executionIdOrProcInsId;
		// 目标节点  
		ActivityImpl destinationActivity = (ActivityImpl) processDefinitionEntity.findActivity(destinationActivityNodeId);  
		// 当前节点  
		ActivityImpl currentActivity = (ActivityImpl)processDefinitionEntity.findActivity(currentActivityNodeId);  
		
		processEngine.getManagementService().executeCommand(  
				new NodeJumpTaskCmd(executionId, destinationActivity, vars,  
									currentActivity,deleteReason)
				);  
	}
	
	public void jumpTaskNext(){
		
	}
}
3、测试
package com.Deer.activiti;

import java.util.HashMap;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.impl.pvm.ReadOnlyProcessDefinition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;

public class Test {
	public static void main(String[] args) {
		ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
		Map<String, Object> vars = new HashMap<String, Object>();  
		//String[] v = { "张三", "李四", "王五"};  
		//vars.put("assigneeList", Arrays.asList(v));    
		RepositoryService repositoryService = processEngine.getRepositoryService();  
		ReadOnlyProcessDefinition processDefinitionEntity = (ReadOnlyProcessDefinition) repositoryService  
		.getProcessDefinition("leave:1:4");  
		// 目标节点  
		ActivityImpl destinationActivity = (ActivityImpl) processDefinitionEntity  
		.findActivity("usertask3");  
		String executionId = "2501";  
		// 当前节点  
	   ActivityImpl currentActivity = (ActivityImpl)processDefinitionEntity  
	      .findActivity("usertask2");  
	   processEngine.getManagementService().executeCommand(  
		new NodeJumpTaskCmd(executionId, destinationActivity, vars,  
		currentActivity));  
	}
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值