20.2 树型选择
填报表单的时候,我们可以通过弹出一个树形来选择输入内容,和其他类型的数据规范一样,定义树型可以在客户端中进行。
组成树形的信息通常来自数据表,如果要把一些数据组织成一棵树,需要这些数据自身能够体现出像树一样的分级信息。通常有如下三种情况,我们称之为树型的构造方式:多字段分级、编码长度分级、自我繁殖。
多字段分级
先看一个例子,假设我们有如下的一个客户表
大区 | 业务员 | 客户名称 |
华北 | 老肖 | 青岛xx集团 |
华北 | 小肖 | 山东泰安某建筑工程公司 |
东北 | 张三 | 济南纺织厂 |
西北 | 李四 | 西安电脑公司 |
华南 | 张三 | 哈尔滨某公司 |
在这样的一张客户表中,不同的字段形成了一种层次关系:“大区”是第一层,这是最粗的分类。“业务员”为第二层,相同的区域之下,由不同的业务员负责。“客户名称”为第三层。根据这种层次关系,可以把客户表中的数据组织如下:
这种组织数据成为树型的方式,称为“多字段分级”,即,树型的层数固定,每一层都是数据表中的一个不同的字段。
定义“多字段分级”的方法如下:
编码长度分级
看另一个例子,假设我们有如下的会计科目表
这里的“科目代码”隐含表达了一种分层信息,例如“1002”是“银行存款”,而“100201”是“1002”的下级科目,即“人民币账户”是“银行存款”的下级科目,同理,“10020101”又是“100201”的下级科目。
即,根据某个代码字段的不同位数表达数据之间的层次关系。在上边的例子中,“科目代码”的前4位,为第一级,5~6位为第二级,7~8位为三级,最终形成的层次关系为:
定义“按编码长度分级”的树型的方法是:
自我繁殖
还有一种情形,例如,假设我们有如下的物料分类表:(为说明方便,我们在旁边加上了记录号)
分类名称 | 上级分类 | |
1 | 产成品 | |
2 | 钢材 | 产成品 |
3 | 建材 | 产成品 |
4 | 线材 | 钢材 |
5 | 板材 | 钢材 |
6 | 薄板 | 板材 |
7 | 中板 | 板材 |
8 | 螺纹钢 | 线材 |
9 | 半成品 | |
10 | 原材料 | |
11 | 低值易耗品 | |
12 | 能源动力 |
在这个物料分类表中通过一个字段“上级分类”,指明了不同分类之间的关系。
例如,我们看“中板”,它的上级分类是“板材”,而“板材”的上级分类是“钢材”,“钢材”的上级分类是“产成品”,“产成品”的上级分类没有,就到顶了。注意其中的关键点是: 每条记录的“上级分类”,或者是空,或者是另一条记录的“分类”字段的内容。例如,第5条记录“板材”,它的上级分类是“钢材”,而“钢材”恰巧是另一条记录(第2条)的“分类”字段的内容。
这种表达数据层次关系的方式,我们称之为“自我繁殖”,即层次关系通过两个字段表达,一个字段称为关键字段,此例中为“分类名称”,它将确定树型中的一个节点,另一个字段称为“上级关键字”,该字段的内容应该恰巧等于树型中另外一个节点的关键字段内容。
定义“自我繁殖”方式的树型的方法如下:
多选分隔符
假如用户填报表单的时候,在树型弹窗上同时勾选了多个节点,选中的所有节点内容将连成一串返回到表单上。在定义树型数据规范的时候,可以设定多选内容之间的分隔符,默认是逗号,可以自己改,如下图所示,在定义树型数据规范的窗口上,切换到下半部分的“附加”选项卡,可输入自定义的分隔符。(【树形选择】的多选需在管理数据表中字段与树形选择做关联时进行设置。)
若希望树形在填报时通过勾选父节点全选择对应的全部子节点,则在定义规范时取消勾选【只能选择最底层节点】。