Activiti-跳转到指定节点、回退

该博文参考了该作者的博文
【工作流Activiti7】3、Activiti7 回退与会签

1、跳转到指定节点java代码

不需要activiti历史记录参与,不过你得记住需要跳转节点的TaskDefinitionKey

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.engine.*;

import org.activiti.engine.task.Task;


import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ActivitiUtil {
/**
     * 跳转到指定的任务
     * @param sourceTask 当前任务
     * @param targetTaskDefinitionKey 指定节点定义的id
     */
    public void jumpToTask(Task sourceTask,String targetTaskDefinitionKey) {


        //取得当前节点的信息
        //取得指定节点的信息(TaskDefinitionKey)
        //保存当前节点的流向
        //新建流向,由当前节点指向新节点(指定节点)
        //当前节点完成任务=流行指定节点
        //将当前节点的流向还原


        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        TaskService taskService = processEngine.getTaskService();

        //获取该工作流的bpmn模板
        BpmnModel bpmnModel = repositoryService.getBpmnModel(sourceTask.getProcessDefinitionId());


        //  获取当前活动节点
        FlowNode currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sourceTask.getTaskDefinitionKey());
        //  获取指定活动节点
        FlowNode lastFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(targetTaskDefinitionKey);



        //  临时保存当前活动的原始方向 ,最后需要用到他恢复正确的方向
        List<SequenceFlow> originalSequenceFlowList = new ArrayList<>();
        originalSequenceFlowList.addAll(currentFlowNode.getOutgoingFlows());
        //  清理当前活动方向
        currentFlowNode.getOutgoingFlows().clear();


        //  建立新方向
        SequenceFlow newSequenceFlow = new SequenceFlow();
        newSequenceFlow.setId("newSequenceFlowId");//这个可以随机
        newSequenceFlow.setSourceFlowElement(currentFlowNode);//源
        newSequenceFlow.setTargetFlowElement(lastFlowNode);//目标
        List<SequenceFlow> newSequenceFlowList = new ArrayList<>();
        newSequenceFlowList.add(newSequenceFlow);
        //  当前节点指向新的方向
        currentFlowNode.setOutgoingFlows(newSequenceFlowList);

        //  完成当前任务 = 跳转到指定的节点任务
        taskService.complete(sourceTask.getId());

        //  恢复原始方向
        currentFlowNode.setOutgoingFlows(originalSequenceFlowList);

    }

}

2、targetTaskDefinitionKey参数说明

就是红框中的id
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
activiti-explorer是一个基于Activiti工作流引擎的Web应用程序,用于管理和监控工作流流程。它提供了一个直观的用户界面,允许用户查看和操作工作流程的各个方面。 activiti-explorer具有以下几个主要功能和特点: 1. 流程管理:activiti-explorer允许用户部署、启动、停止和删除工作流程。用户可以通过界面创建和编辑工作流程定义,并将其部署到Activiti引擎中。用户还可以查看流程实例和任务列表,以便监控工作流程的执行状态。 2. 任务管理:activiti-explorer使用户能够处理任务。用户可以接受、拒绝、转接和完成任务,还可以添加和查看任务的备注和附件。任务的执行状态和历史记录也可以通过界面进行查询和跟踪。 3. 用户管理:activiti-explorer允许管理员管理用户和组织角色。管理员可以创建、编辑和删除用户,分配和撤销用户的角色。这样可以确保只有授权的用户能够访问和操作特定的工作流程。 4. 报表和统计:activiti-explorer提供了一些报表和统计功能,用于分析和评估工作流程的性能和效率。用户可以查看工作流程的完成情况、平均处理时间和执行过程中的问题等指标。 总之,activiti-explorer是一个功能强大的工作流管理工具,可以帮助用户有效地管理和监控工作流程。它提供了直观的界面和丰富的功能,使用户能够轻松地创建、部署和处理工作流程,提高工作效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值