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.csdn.net/weixin_39102174/article/details/93982104

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Flowable中,可以使用流程引擎提供的API获取当前任务的上一级任务节点。具体步骤如下: 1. 获取当前任务的ID,可以使用TaskService提供的方法`getCurrentTaskId()`获取。 2. 使用TaskService提供的方法`createTaskQuery().taskId(taskId).singleResult()`获取当前任务对象。 3. 从当前任务对象中获取流程实例ID,即`processInstanceId`。 4. 使用HistoryService提供的方法`createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").finished().orderByHistoricActivityInstanceEndTime().desc().list()`获取当前流程实例中所有已完成的用户任务节点。 5. 遍历已完成的用户任务节点,找到当前任务的上一级任务节点。可以通过比较任务节点的结束时间来确定上一级任务节点。 6. 如果找到了上一级任务节点,可以使用其ID启动一个新的任务。 示例代码如下: ``` String taskId = taskService.getCurrentTaskId(); Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult(); String processInstanceId = currentTask.getProcessInstanceId(); List<HistoricActivityInstance> activityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").finished().orderByHistoricActivityInstanceEndTime().desc().list(); for (HistoricActivityInstance activityInstance : activityInstances) { // 找到当前任务的上一级任务节点 if (activityInstance.getEndTime().before(currentTask.getCreateTime())) { String taskDefinitionKey = activityInstance.getActivityId(); Task previousTask = taskService.newTask(); previousTask.setTaskDefinitionKey(taskDefinitionKey); previousTask.setAssignee("assignee"); previousTask.setDueDate(new Date()); taskService.saveTask(previousTask); break; } } ``` 需要注意的是,以上代码仅适用于顺序流程。如果流程中存在并行网关等情况,需要根据具体流程在代码中进行适当的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值