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;
}
}
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));
}
}