低代码平台中“主表/子表”字段功能协议,包括限制规则、记录所有者同步规则、子表权限规则以及累计汇总功能约束等。
在 字段类型 协议中我们了解到 主表/子表 字段是一种特殊的 相关表 字段,本协议着重描述“主表/子表”字段的特别之处,约定其功能规范。
普通的 相关表 字段只是通过创建 主键/外键 关系,把两个对象关联起来,而“主表/子表”字段在些基础上更进一步,在两个对象之间建立了主从关系,基于这种主从关系它主要有以下功能特点。
在主表/子表字段关系中的主表一侧,其关联对象的记录详细界面上,所有的子表对象会在底部依次显示为子表列表。
在主表/子表字段关系中的主表一侧,其关联对象上可以新建累计汇总字段,用于汇总对应的子表记录,对子表记录进行计数、求和、最大值、最小值或平均值汇总计算。
在有些业务场景中,有可能会需要在单个对象上建立多个主子表关系字段,也可能会创建多层主子表关系链,比如合同对象下面有付款子表记录,而付款对象下面又有订单子表记录。
为了降低主子表关系带来的复杂性,以及保证系统整体性能的优良性,低代码平台需要实现以下限制规则的约定:
A-B-C-D
,它们都有父子关系,A对象作为最顶层,其上不可以再创建主表子表字段,也不可以在整个链条底层或中间层任意位置加主子表关系造成整个链条层次超过3层。A-B-C-D
,这是合法的主子表关系链,但是 A-B-A-D
或 A-B-C-A
等就不是合法的主子表关系链了,因为 A
对象在整个关系链中出现了两次。按上述限制规则,一个对象上最多允许配置两个 “主表/子表” 字段,即一个子表对象最多只能同时从属于两个主表对象。
当一个对象上同时有两个主子表关系时,可以通过首要和次要关系来区分它们:
在低代码平台权限功能中,所有对象上都有一个名为 “所有者 owner” 的字段,该字段描述的是记录的所有权是谁,当用户没有对象记录的“查看全部”权限时,只能查看 owner
为自己的记录。
在主子表关系中,子表记录的 owner
始终会同步为其所属主表记录的 owner
值,这样子表记录的 “所有者” 权限就能始终与主表记录统一。
为了实现这种统一的所有者权限规则,低代码平台需要实现以下规范:
owner
值。owner
值。当对象上同时存在两个主子表关系,或者多层级主子表关系时,低代码平台按以下规范处理所有者同步规则:
owner
字段的值,忽略其次要主记录的 owner
值。owner
值,对于更深层的主子表关系链,不自动延伸处理其下一层子表记录。在“主表/子表”字段上有一个控制子表权限的开关属性 write_requires_master_read
,该开关表示“当用户对主表记录有读取权限时对子表记录可以增删改”,默认情况下,只允许同时具有主表记录的读取和写入权限的用户创建、编辑和删除子表记录,勾选该属性后表示允许只有主表记录读取权限的用户创建、编辑或删除子记录。
当对象上同时存在两个主子表关系时,低代码平台按以下规范处理子表权限规则:
write_requires_master_read
属性配置,只有两个主子表关系中的配置都表明当前用户有权限时才有对应的权限。比如对象M上配置了与A、B两个主表对象的主子表关系,A上配置的是只要有主表记录读取权限就能增删改,B上配置的是必须要有主表记录的读取和写入权限才能增删改,那么当前用户要想在A或B记录详细界面上创建、编辑、删除子表M的记录,必须至少同时有主表A记录的读取及主表B记录的读取和写入权限。
比如对象M上配置了与A、B两个主表对象的主子表关系,A的记录详细界面中是否显示M子表,取决于当前用户是否额外有主表B记录的查看权限。
当一个子表对象上同时存在两个主子表关系时,低代码平台按以下规范处理累计汇总功能:
该子表对象的两个主表对象上可以同时设置累计汇总字段对该子表对象进行汇总计算,也可以同时聚合该子表对象上的同一个字段,并且支持所有汇总类型的计算。
比如对象M上配置了与A、B两个主表对象的主子表关系,可以在主表对象A和B上同时配置对子表M进行各种汇总计算的汇总字段,并且它们可以对子表M上的同一字段进行聚合汇总。
当对象上存在多层级主子表关系时,低代码平台按以下规范处理累计汇总功能:
不可以跨层级进行累计汇总计算,比如 A-B-C
这种主子表关系链中的主表对象A上不可以直接配置对子表对象C进行汇总计算的汇总字段,只能配置对其直属下级子表对象B进行汇总计算的汇总字段。
参考: