工作流(Activiti 6.0)之自由驳回任务实现

简介: 工作流版本使用6.0,参数为任务id(task中主键),目标节点ID(比如userTask1),以及业务主键信息(businessKey)。

工作流版本使用6.0,参数为任务id(task中主键),目标节点ID(比如userTask1),以及业务主键信息(businessKey)。


  /**
   * 任务节点跳转
   * @param taskId 当前任务id
   * @param flowElementId 跳转的目标节点的id
   */
  public void taskBack(String taskId,String flowElementId,Map<String, Object> variables){
    ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
    //当前任务
    Task currentTask = processEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();
    //更新业务信息
    processEngine.getTaskService().setVariables(taskId , variables);
    //获取流程定义
    org.activiti.bpmn.model.Process process = processEngine.getRepositoryService().getBpmnModel(currentTask.getProcessDefinitionId()).getMainProcess();
    //获取目标节点定义
    FlowNode targetNode = (FlowNode)process.getFlowElement(flowElementId);
    //删除当前运行任务
    String executionEntityId =processEngine.getManagementService().executeCommand(new DeleteTaskCommand(currentTask.getId()));
    //流程执行到来源节点
    processEngine.getManagementService().executeCommand(new JumpCommand(targetNode, executionEntityId));
  }
  /**
   * 删除当前运行时任务命令
   * 这里继承了NeedsActiveTaskCmd,主要是很多跳转业务场景下,要求不能时挂起任务。可以直接继承Command即可
   */
  public class DeleteTaskCommand extends NeedsActiveTaskCmd<String> {
    public DeleteTaskCommand(String taskId){
      super(taskId);
    }
    @Override
    public String execute(CommandContext commandContext, TaskEntity currentTask){
      //获取所需服务
      TaskEntityManagerImpl taskEntityManager = (TaskEntityManagerImpl)commandContext.getTaskEntityManager();
      //获取当前任务的来源任务及来源节点信息
      ExecutionEntity executionEntity = currentTask.getExecution();
      //删除当前任务,来源任务
      taskEntityManager.deleteTask(currentTask, "jumpReason", false, false);
      return executionEntity.getId();
    }
    @Override
    public String getSuspendedTaskException() {
      return "挂起的任务不能跳转";
    }
  }
  /**
   * 根据提供节点和执行对象id,进行跳转命令
   */
  public class JumpCommand implements Command<Void> {
    private FlowNode flowElement;
    private String executionId;
    public JumpCommand(FlowNode flowElement, String executionId){
      this.flowElement = flowElement;
      this.executionId = executionId;
    }
    @Override
    public Void execute(CommandContext commandContext){
      //获取目标节点的来源连线
      List<SequenceFlow> flows = flowElement.getIncomingFlows();
      if(flows==null || flows.size()<1){
        throw new ActivitiException("操作错误,目标节点没有来源连线");
      }
      //随便选一条连线来执行,时当前执行计划为,从连线流转到目标节点,实现跳转
      ExecutionEntity executionEntity = commandContext.getExecutionEntityManager().findById(executionId);
      executionEntity.setCurrentFlowElement(flows.get(0));
      commandContext.getAgenda().planTakeOutgoingSequenceFlowsOperation(executionEntity, true);
      return null;
    }
  }


相关文章
Activiti7 驳回任务
Activiti7 驳回任务
1985 0
|
安全 Java 关系型数据库
Spring boot整合Activiti7
Spring boot整合Activiti7
3966 0
Spring boot整合Activiti7
|
9月前
|
人工智能 算法 关系型数据库
AI编码不是梦:手把手教你指挥Agent开发需求
AI编码不是梦:手把手教你指挥Agent开发需求
3290 24
|
存储 缓存 人工智能
工作中,Redis的15种使用场景
Redis 在现代应用中扮演着至关重要的角色,涵盖缓存加速、分布式锁、实时排行榜、计数器、消息队列等15种常见场景。它通过高效的数据结构和原子操作,大幅提升系统性能和响应速度,广泛应用于会话管理、签到系统、限流控制、购物车、抽奖活动、全页缓存、发布订阅、地理位置服务、分布式ID生成及数据过期处理等领域。灵活运用这些特性,可显著优化开发效率和用户体验。
2218 156
工作中,Redis的15种使用场景
|
机器学习/深度学习 人工智能 监控
为什么选择工作流引擎?三大主流引擎优缺点剖析
工作流引擎是一种用于自动化、管理和监控业务流程的软件系统,通过预定义规则和流程模型协调任务流转。其核心功能包括流程建模、任务分配、状态跟踪和异常处理,能提升企业流程效率30%-50%,减少80%以上的人为错误。典型应用场景涵盖审批、生产、服务和决策类流程。主流引擎如Activiti、Flowable和Camunda各有特色,Camunda因高性能和完整工具链成为复杂项目的首选。未来趋势包括低代码集成、AI优化及云原生架构。
为什么选择工作流引擎?三大主流引擎优缺点剖析
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
2526 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
存储 API
Activiti七大接口,28张表详解
Activiti七大接口,28张表详解
984 0
activiti 会签多实例任务,设置为候选组或个人任务的总结
activiti 会签多实例任务,设置为候选组或个人任务的总结
1619 0
activiti 会签多实例任务,设置为候选组或个人任务的总结
|
Oracle Java 关系型数据库
Java SpringBoot集成Activiti7工作流
Java SpringBoot集成Activiti7工作流

热门文章

最新文章