Activiti6---获取节点信息

1. 说明

在应用中可能需要获取当前节点的上一个节点的信息,或者下一个节点的信息。

2. 获取上一节点的方式

如下能够获取到上一个节点的key,可以用来进行回退等功能实现。

 /**
     * 根据流程实例id获取上一个节点的信息
     */
    @Test
    public void queryUpOneNode(){
        Task task = taskService.createTaskQuery()
                .taskAssignee("lisi")
                .singleResult();
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
                .processInstanceId(task.getProcessInstanceId())
                .orderByHistoricTaskInstanceEndTime()
                .desc()
                .list();

        HistoricTaskInstance taskInstance = null;

        if(!list.isEmpty()){
            if(list.get(0).getEndTime()!=null){
                taskInstance=list.get(0);
            }
        }

        System.out.println(taskInstance.getTaskDefinitionKey());
    }

效果图:
数据库:
在这里插入图片描述
查询到的:
在这里插入图片描述

3. 获取下一节点的方式

当前节点任务A,通过当前任务的流程定义id获取下一个节点任务B的信息。

	  /**
     * 根据流程定义id获取当前节点的下一节点
     */
    @Test
    public void getNexNode(){
        Task task = taskService.createTaskQuery()
                .taskAssignee("zhangsan")
                .singleResult();

        //根据流程定义id获取bpmnModel对象
        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
        //获取当前节点信息
        FlowNode flowNode =
                (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
        //获取当前节点输出连线
        List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
        //遍历输出连线
        for (SequenceFlow outgoingFlow : outgoingFlows) {
            //获取输出节点元素
            FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
            //排除非用户任务接点
            if(targetFlowElement instanceof UserTask){
                //获取输出节点id==名称
                System.out.println(outgoingFlow.getTargetFlowElement().getId()+"==="
                +outgoingFlow.getTargetFlowElement().getName());
            }
        }
    }

效果图:
数据库:
在这里插入图片描述

查询到的:
在这里插入图片描述
可以看出当前节点任务A,可以查询到任务B的信息。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti 6 中,可以通过以下步骤获取可退回节点列表: 1. 获取当前任务的历史流程实例列表。 ```java List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstanceId) .list(); ``` 2. 遍历历史流程实例列表,获取每个实例的历史任务列表。 ```java for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() .processInstanceId(historicProcessInstance.getId()) .orderByHistoricTaskInstanceEndTime() .desc() .list(); } ``` 3. 对于每个历史任务,获取其流程定义的所有流程节点,并找到可退回的节点。 ```java for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) { // 获取任务对应的流程定义 ProcessDefinition processDefinition = repositoryService.getProcessDefinition(historicTaskInstance.getProcessDefinitionId()); // 获取流程定义的所有节点 List<FlowElement> flowElements = ((Process) ((BpmnModel) repositoryService.getBpmnModel(processDefinition.getId())).getMainProcess()).getFlowElements(); // 找到可退回的节点 for (FlowElement flowElement : flowElements) { if (flowElement instanceof UserTask) { UserTask userTask = (UserTask) flowElement; // 判断是否可退回 if (userTask.getOutgoingFlows().size() == 1 && userTask.getIncomingFlows().size() == 1) { // 可退回的节点 String taskId = userTask.getId(); String taskName = userTask.getName(); // ... } } } } ``` 注意,上述代码只是一个简单的示例,实际使用中还需要根据具体业务场景进行适当调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值