工作流(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;
    }
  }


相关文章
22activiti - 流程管理定义(查询流程状态)
22activiti - 流程管理定义(查询流程状态)
138 0
|
24天前
|
敏捷开发 数据可视化 BI
工作流管理是什么?5款企业工作流管理工具推荐!
工作流管理是一种使处理过程自动化、协调人和应用工具完成工作的技术。它通过规划、组织、协调和控制业务流程,确保工作高效、准确地完成。工作流管理可以提高工作效率、规范业务流程、增强协同工作能力、优化决策支持,并提升企业竞争力。本文介绍了5款工作流管理软件:板栗看板、Trello、Asana、Jira 和 Monday.com,它们各具特色,适用于不同的场景和需求。
工作流管理是什么?5款企业工作流管理工具推荐!
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
613 0
|
6月前
|
移动开发 前端开发
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
220 0
|
6月前
|
前端开发
基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式
基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式
289 0
|
6月前
|
监控 前端开发 NoSQL
基于jeecgboot的flowable复杂会签加用户选择流程实现
基于jeecgboot的flowable复杂会签加用户选择流程实现
148 2
|
6月前
|
前端开发
基于jeecgboot的flowable流程并行审批的bug修复
基于jeecgboot的flowable流程并行审批的bug修复
107 2
|
6月前
基于jeecgboot的flowable流程支持online表单审批线上发布
基于jeecgboot的flowable流程支持online表单审批线上发布
74 1
|
6月前
|
SQL 前端开发
基于jeecgboot的flowable驳回修改以及发起人设置
基于jeecgboot的flowable驳回修改以及发起人设置
230 0
|
6月前
Flowable流程中自定义业务表单并行审批的bug修复
Flowable流程中自定义业务表单并行审批的bug修复
137 0