activiti 6.0根据当前节点获取后续节点的方法

本文介绍了一种基于流程引擎的任务节点解析方法,通过获取历史任务实例,查询流程定义ID,利用BPMN模型获取任务定义键,解析当前节点的后续任务节点。详细展示了如何通过递归方法处理网关节点,实现完整的任务节点链解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 下一个节点
 *
 * @param taskid
 * @return
 * @throws
 */

public List<FlowNode> getNextNode(String taskid) {
    HistoricTaskInstance myTask = processEngine.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskid).singleResult();
    String processDefinitionId = myTask.getProcessDefinitionId();
    BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
    String myActivityId = myTask.getTaskDefinitionKey();
    if (ValidateUtil.isEmpty(myActivityId)) {
        return Lists.newArrayList();
    }
    List<FlowNode> flowNodeList = Lists.newArrayList();
    FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(myActivityId);
    List<FlowNode> flowNodes = Lists.newArrayList();
    flowNodes.add(flowNode);
    addNextNode(flowNodes, flowNodeList);
    return flowNodeList;
}
/**
 * @param list         存放网关节点
 * @param flowNodeList 任务节点
 * @return addNextNode
 * @description 解析当前节点的接下来的任务节点
 */
private void addNextNode(List<FlowNode> list, List<FlowNode> flowNodeList) {
    if (ValidateUtil.isEmpty(list)) {
        return;
    }
    List<FlowNode> flowNodeList1 = Lists.newArrayList();
    for (FlowNode flowNode : list) {
        List<SequenceFlow> sequenceFlows = flowNode.getOutgoingFlows();
        for (SequenceFlow sequenceFlow : sequenceFlows) {
            FlowNode flowNode1 = (FlowNode) sequenceFlow.getTargetFlowElement();
            if (flowNode1 == null) {
                continue;
            }
            if (flowNode1 instanceof UserTask) {
                if (flowNode1.getName() == null) {
                    flowNode1.setName(" ");
                }
                flowNodeList.add(flowNode1);
            } else if (flowNode1 instanceof EndEvent) {
                flowNode1.setName("结束");
                flowNodeList.add(flowNode1);
            } else if (flowNode1 instanceof StartEvent) {
                flowNode1.setName("开始");
                flowNodeList.add(flowNode1);
            } else {
                flowNodeList1.add(flowNode1);
            }
        }

    }
    addNextNode(flowNodeList1, flowNodeList);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值