activity6.0+ 获取当前审批节点的上一级/下一级审批节点的信息

public   FlowElement getNextUserFlowElement(String processInstanceId){
        Task task=taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
        if (task==null){
            throw new ServiceException("流程未启动或已执行完成");
        }
        // 取得已提交的任务
        HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
                .taskId(task.getId()).singleResult();
        // 取得正在流转的流程实例,若已完成则为null
//getRuntimeProcessInstance是自己封装的获取流程实例的方法
        ProcessInstance processInstance =getRuntimeProcessInstance(historicTaskInstance.getProcessInstanceId());
        //每个流程实例只有一个executionId
        //获得流程定义
        ProcessDefinition processDefinition=repositoryService.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
 
        //获得当前流程的活动ID
        ExecutionQuery executionQuery =runtimeService.createExecutionQuery();
        Execution execution =executionQuery.executionId(historicTaskInstance.getExecutionId()).singleResult();
        String activityId=execution.getActivityId();
UserTask userTask =null;
        while (true){
            //根据活动节点获取当前的组件信息
            FlowNode flowNode =getFlowNode(processDefinition.getId(),activityId);
            //获取该流程组件的之后/之前的组件信息
            List<SequenceFlow> sequenceFlowListOutGoing=flowNode.getOutgoingFlows();
//        List<SequenceFlow> sequenceFlowListIncoming=flowNode.getIncomingFlows();
 
            //获取的下个节点不一定是userTask的任务节点,所以要判断是否是任务节点
            //sequenceFlowListOutGoing数量可能大于1,可以自己做判断,此处只取第一个
            FlowElement flowElement =sequenceFlowListOutGoing.get(0).getTargetFlowElement();
            if (flowElement instanceof UserTask){
                userTask =(UserTask)flowElement;
                System.out.println("获取该任务节点的审批信息...");
                break;
            }else {
                //下一节点不是任务userTask的任务节点,所以要获取再下一个节点的信息,直到获取到userTask任务节点信息
                String flowElementId=flowElement.getId();
                activityId=flowElementId;
                continue;
            }
        }
 
    }
    //根据活动节点和流程定义ID获取该活动节点的组件信息
 
    public FlowNode getFlowNode(String processDefinitionId,String activityId){
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
        return flowNode;
    }

转载地址: https://blog.youkuaiyun.com/weixin_39102174/article/details/93982104

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值