Activiti 跳转节点

来源:互联网 发布:java生成六位验证码 编辑:程序博客网 时间:2024/06/05 14:50
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;//执行IDprotected 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");  //执行IDString 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");  //执行IDString 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));  }}




原创粉丝点击