Activit的心路历程:Activiti6.0获取当前节点的下一节点【可能存在多个】的nodeId

上一任务节点

注意:当前操作需要具备activiti6.0的基础

在我的开发中,突然给我提出了一个待办任务需要获取当前任务节点下一任务节点的表单信息,刚开始搞得我有点措手不及,后来仔细思考后,灵感一下,直接操作流程的bpmn信息就可以获取到节点信息嘛,顺着这个思路,我整理出了自己的思路:
(1)将节点大体分为两类,一类是网关节点,另外一类就是用户任务节点,使用List集合,将网关与用户任务进行分类
(2)获取上一节点,我们就需要从bpmn的连线信息入手,这次我们获取的是UserTask节点的出线,固定连线的sourceRef,辨别节点targtaetRef的类型,当是用户任务时,放进 List behildNodeIdlist= new ArrayList<>();,当是GateWay节点时,将sourceRef设为网关的,继续遍历下一节点,就是跳过网关节点,只要用户任务节点

下面是我的测试代码【我使用springboot为基础测试环境】

 	@Test
    public void behindNode() {
   
   
        //        String nodeId="UserTask_0mkm9h7";
        String nodeId = "UserTask_0mkm9h7";
        String processInstanceId="2205001";
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId(processInstanceId).singleResult();
        String processDefinitionId=processInstance.getProcessDefinitionId();
        List<String> behildNodeIdlist=getBehindNodeIdByNodeId(nodeId,processDefinitionId);
        behildNodeIdlist.forEach(System.out::println);
    }


 	/**
     * 获取当前节点下一节点id(只能获取UserTask类型的)【可能多个节点id】
     * 通过taskId获取当前节点的下一节点id
     *
     * @param taskId
     * @return
     */
    public List<String> getBehindNodeIdByTaskId(String taskId) {
   
   
        ProcessEngine defaultProcessEngine = getProcessEngine();
        HistoryService historyService = defaultProcessEngine.getHistoryService();
        HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
        String nodeId = task.getTaskDefinitionKey();
        String processDefinitionId = task.getProcessDefinitionId();
        return getBehindNodeIdByNodeId(nodeId, processDefinitionId);
    }
	

  public ProcessEngine getProcessEngine() {
   
   
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        return defaultProcessEngine;
    }

   private BpmnModel getBpmnModel(String processDefinitionId) {
   
   
        ProcessEngine processEngine = getProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        return repositoryService.getBpmnModel(processDefinitionId);
    }


    /**
     * 通过nodeId与流程定义Id,获取当前节点的下一节点id,默认开启过滤
     *
     * @param nodeId
     * @param processDefinitionId
     * @return
     */
    public List<String> getBehindNodeIdByNodeId(String nodeId, String processDefinitionId) {
   
   
        return getBehindNodeIdByNodeIdFilter(nodeId, processDefinitionId, true);
    }

  	/**
     * 通过nodeId与流程定义Id,获取当前节点的下一节点id
     *
     * @param nodeId
     * @param processDefinitionId
     * @param isFilterEndEvent    是否开启过滤掉EndEvent节点
     * @return
     */
    public List<String> getBehindNodeIdByNodeIdFilter(String nodeId, String processDefinitionId, boolean isFilterEndEvent) {
   
   
        BpmnModel bpmnModel = getBpmnModel(processDefinitionId);
        return getBehindNodeIdByNodeIdFilterRam(bpmnModel, nodeId, processDefinitionId, isFilterEndEvent);
    }

    public List<String> getBehindNodeIdByNodeIdFilterRam(BpmnModel bpmnModel, String nodeId, String processDefinitionId, boolean isFilterEndEvent) {
   
   
        //网关集合
        List<Gateway> gateways = new ArrayList<>();
        //用户任务集合
        List<UserTask> userTasks = new ArrayList<>();
        //网关节点id
        List<String> gatewayNodelIdList = new ArrayList<>();
        //用户任务节点id
        List<String> usertaskNodelIdList = new ArrayList<>();

        List<Process> processes = bpmnModel.getProcesses();
        Process process = processes.get(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值