Activiti6获取上一级,下一级节点信息

Activiti6获取上一级,下一级节点信息

上一级节点信息:
主要是通过bpmn对象获取节点信息,然后遍历获取到需要的那个节点,主要是: String sourceRef = incomingFlow.getSourceRef(), flowNode.getIncomingFlows();这两个方法后者是获取输入节点的节点信息,前者是获取输入节点的sid通过这个id可以获取到上一个节点的相关信息。

  @Override
    public Result lastNodeMessage(String processInstanceId) {
        //当前任务信息
        List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
        List<Map> listNode = new ArrayList<>();
        for (Task task : list) {
            Map map = new HashMap();
            //Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
            //获取流程发布Id信息
            String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
            //获取bpm对象
            BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
            //传节点定义key 获取当前节点
            FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
            //输出连线
            List<SequenceFlow> incomingFlows = flowNode.getIncomingFlows();
            //遍历返回下一个节点信息
            for (SequenceFlow incomingFlow : incomingFlows) {
                //类型自己判断
                String sourceRef = incomingFlow.getSourceRef();
                //通过上级节点对象的信息来判断上级节点是什么节点(网关、用户、开始、结束)
                FlowNode flowElement = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sourceRef);
                //用户任务
                if (flowElement instanceof UserTask) {
                    map.put("name", flowElement.getName());
                    map.put("taskId", flowElement.getId());
                    map.put("processInstanceId", processInstanceId);
                    listNode.add(map);
                    logger.info("节点信息:{}",map);
                } else if (flowElement instanceof Gateway) {
                    List<Map> maps = setExclusiveGateway(incomingFlows, processInstanceId);
                    logger.info("节点信息:{}",maps);
                    return Result.data(maps);
                } else if (flowElement instanceof StartEvent) {
                    map.put("name", flowElement.getName());
                    map.put("taskId", flowElement.getId());
                    map.put("processInstanceId", processInstanceId);
                    map.put("message", "上级节点是流程起点");
                    listNode.add(map);
                    logger.info("节点信息:{}",map);
                }
            }
        }
        return Result.data(listNode);

与获取上一节点信息代码差不多,主要参数是流程I的,也就是act_ru_task,正在运行的流程id,也是主要的方法outgoingFlow.getTargetFlowElement();获取输出节点的节点信息。
在这里插入图片描述

下一节点信息代码:

@Override
    public Result nextNodeMessage(String processInstanceId) {
        //当前任务信息
        List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
        List<Map> listNode = new ArrayList<>();
        for (Task task : list) {
            Map map = new HashMap();
            //Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
            //获取流程发布Id信息
            String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
            //获取bpm对象
            BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
            //传节点定义key 获取当前节点
            FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
            //输出连线
            List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
            //遍历返回下一个节点信息
            for (SequenceFlow outgoingFlow : outgoingFlows) {
                //类型自己判断
                FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
                //用户任务
                if (targetFlowElement instanceof UserTask) {
                    map.put("name", targetFlowElement.getName());
                    map.put("taskId", targetFlowElement.getId());
                    map.put("processInstanceId", processInstanceId);
                    listNode.add(map);
                    logger.info("节点信息:{}",map);
                } else if (targetFlowElement instanceof Gateway) {
                    List<Map> maps = setExclusiveGateway(outgoingFlows, processInstanceId);
                    logger.info("节点信息:{}",maps);
                    return Result.data(maps);
                } else if (targetFlowElement instanceof EndEvent) {
                    map.put("name", targetFlowElement.getName());
                    map.put("taskId", targetFlowElement.getId());
                    map.put("processInstanceId", processInstanceId);
                    map.put("message", "下级节点是流程终点");
                    listNode.add(map);
                    logger.info("节点信息:{}",map);
                }
            }
        }
        return Result.data(listNode);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值