树形基础资料 之 如何快速查找上下级
最近经常收到开发小伙伴的如下提问:
树形基础资料中,如何根据一个节点资料找到它对应的上下级资料?
根据parent只能找到上一级节点,遍历效率又太低,如何快速找到整棵树的上下级节点?
您是否也有相同的疑问?
树状结构示意图
在业务开发中,新增、分配、删除、变更控制策略等业务,都有根据节点查找整棵树结构的业务需求,那我们如何既快速又正确地找到完整节点呢?
别担心,本期小编就给大家详细讲讲如何快速找到树形基础资料的上下级~
1 方案详情
在基础资料中,树形基础资料包括两种:树形基础资料和树形带组织基础资料。
我们重新回顾下树形基础资料的特点:继承自基础资料模板,包含上级资料字段,数据间有上下级关系。
树形基础资料中有一个重要的控件:上级-当前节点的上级节点ID(如当前节点为根节点,则上级属性为0)。
“上级”控件示例
由此可知,通过基础资料的上级控件字段,我们可以快速定位当前资料的上级资料。
那么,接下来的问题:如果我们想要知道当前基础资料的所有上级资料,难道需要一层一层地往上读取遍历资料么?
当然不需要!
我们给大家介绍另外一个基础控件——长编码。在执行基础资料的保存、提交及新增操作时,系统将自动生成基础资料的长编码属性。
“长编码”控件示例
长编码规则:父级长编码加上当前资料的编码,如当前资料为父级节点,则长编码为当前资料编码,示例如下:
长编码规则示例
有了基础资料的长编码,我们即可把资料的编码拆分出来,根据编码进行IN查询即可得到当前节点的所有节点资料。IN查询语句示例如下:
select fid,fnumber,… from table where fnumber in ('number1’,’number2’,’…’)
当然,这里有同学发现了,如上例子,编码拆分的规则是什么?按照什么标识进行拆分?
在上级控件里面,有一个很重要的业务属性:长编码界定符,如下图所示:
长编码界定符示例
长编码界定符是用于基础资料长编码拼接的拼接符,当前默认的拼接符为”.”点号拼接符,业务部门也可以根据自己业务的特殊性,在基础资料创建的时候,自由设置分割符。
这里需要提醒的是:如果基础资料已经开始使用并产生业务数据了,再去修改长编码界定符,则会导致历史业务数据界定符不一致,需要对历史数据进行处理。因此,若后期非必要操作,建议别轻易变更长编码界定符。
通过以上介绍可知,凭借树形资料长编码longnumber字段可以快速查找到当前节点的所有上级节点。
那么,如果当前节点非叶子节点,如何快速把上下级一起查找出来呢?
上面我们已经介绍,我们可以通过长编码界定符对长编码longnumber进行拆分得到number,根据number进行IN查询得到对应的节点基础资料。
那该问题答案就可想而知了:
通过长编码界定符对长编码longnumber进行拆分得到第一个节点,即根节点number,然后根据根节点number进行右LIKE查询,即可得到整棵树的完整节点。LIKE查询语句示例如下:
select fid,fnumber,flongnumber… from table where fnumber like ‘number%’
好了,通过以上介绍,相信小伙伴们都掌握了树形基础资料快速找到上下级这个小技能了吧,赶紧试一试吧~
2 划重点
1. 树形基础资料,通过长编码界定符对长编码longnumber进行拆分,使用拆分得到的number进行IN查询/LIKE查询来得到当前树节点的所有节点资料;
2. 已使用中的树形基础资料,谨慎修改长编码界定符;
3. 长编码为各级节点编码使用长编码界定符进行拼接而成,如资料中的长编码不正确(为空或者没有按规则拼接),请及时联系我们小伙伴处理,避免影响业务功能。
#往期推荐#
更多精彩内容,“码”上了解!↓
树形基础资料 之 如何快速查找上下级
本文2024-09-23 00:45:37发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141548.html