左树右表
掌握在 V 平台中针对 左树右表(左边是主表,右边是从表) 场景的一般配置过程,以及一些必要的配置。
- 案例介绍
- 配置演示
- 配置详细
- 效果演示
以 部门-员工信息 为例,介绍左树右表场景的配置过程。
- 表结构:部门 - 主表(左树),员工信息 - 从表(右表)
- 部门主表是一个树表,树表的新增、删除均使用「实体树形操作」规则,保存需勾选实体树形
- 树记录切换事件
- 使用函数:
GetTreeEntityIds()
、ListToString()
、Contains()
、V3If()
- 必填校验、唯一性校验、合法性校验等
Part 01 快速搭建构件、表、窗体
本视频主要讲解创建业务构件、部门主表(主表)和员工信息(从表)、创建实体和界面控件设计等。
注:部门主表是一个树表,需要引入固定树字段。
Part 02 方法配置(窗体、树工具按钮事件)
本视频主要讲解窗体加载事件、树工具按钮(同级新增、下级新增、删除和保存)事件的配置。
注:树表的新增、删除均使用「实体树形操作」规则。
Part 03 方法配置(检索、列表工具按钮事件)
本视频主要讲解检索事件、列表工具按钮(新增、删除、保存和启用/禁用)事件,以及加载从表数据时,使用的树记录切换事件。
4.1 窗体加载事件
(1)从数据库获取数据到实体【主表】
自动映射字段
- 勾选后,来源数据字段和实体字段自动映射(一般是实体字段和表字段一样),当同时修改了实体和表字段,则无需修改规则;
- 没有对应的字段,也可以手动引入关联;
(2)控件属性设置【控制列表工具栏使能】
主要判断左边树表(部门)是否存在部门数据(也可以通过其他函数来判断实体记录)。
如果对应实体ID不为空,则存在部门数据,可以选择具体部门新增员工信息记录,因此列表工具栏可以使能,即:
!IsEmpty([departmentMain].[id])
返回True
,使能为True
。4.2 树工具按钮事件
- 1. 新增同级机构
- 2. 新增下属机构
- 3. 删除
- 4. 保存
(1)实体树形操作【同级新增-后】
(2)控件属性设置【控制列表工具栏使能】
新增部门数据后,部门ID不为空,列表工具应控制使能。
与「新增同级机构」事件配置一样,在「实体树形操作」规则配置中,选择操作为「下级新增」即可。
敲黑板:中断规则
- 退出当前规则链:仅中断当前规则链的执行(若后续存在其他规则链,将继续执行);
- (Eg:在方法A中,配置了中断当前,即使规则3在外层,也不会被执行;但是方法B仍会执行规则b)
- 中断所有规则链:中断所有规则链的执行(若后续存在其他规则链,也不再执行);
- (Eg:在方法A中,配置了中断所有,规则3不会被执行;同时方法B也不会执行规则b)
删除逻辑删除逻辑,有很多种实现方式。
本案例使用的逻辑:删除从表数据库记录 → 删除从表界面实体记录 → 删除主表界面记录(树形实体) → 保存主表(树形实体) 为什么先处理从表,再处理主表? 主要是由于树记录切换事件会加载从表数据,若先删除部门树表选中记录,那么会重新定位选中第一条记录,触发记录切换事件,重新加载了从表数据,被删除部门对应的人员无法再获取,也无法再加载,但仍然在数据库表中存在。 为什么不直接配置:删除主表、从表数据库记录 → 删除从表界面实体记录 → 删除主表界面记录(树形实体)? 主要是因为配置「实体树形操作」规则,删除完全部子节点后,对应的父节点 IsLeaf
会变成True
,再配置保存,数据才正常。如果直接删除主表记录,那么父节点的IsLeaf
不会变。在删除事件中,删除前校验按需配置,中断规则均设置 “退出当前规则链” 。
在提示“是否删除?”时,设置询问类型,才可以根据提示返回确认结果进行判断。其他提示保留默认提示方式即可。
(1)删除数据库中的记录【从表】
根据当前选中的部门节点ID(父节点不能删除),设置过滤条件,删除对应的从表数据。
(2)删除实体记录【从表】
由于主从表属于一对多的关系,因此再删除部门实体记录前,需要按条件删除对应的员工信息实体记录。
(3)实体树形操作【主表-删除】
关于树表的界面实体删除,也是使用「实体树形操作」规则,删除完全部子节点后,对应的父节点
IsLeaf
会变成True
。(4)保存实体到数据库【主表】
注:树形结构表,保存需要勾选树形实体,才会生成对应的树字段数据,否则可能导致树数据异常
(5)显示设置的提示信息【删除成功】
(6)控件属性设置【控制列表工具栏使能】
如果部门实体记录全部删除完之后,判断
!IsEmpty([departmentMain].[id])
则返回False
,列表工具按钮使能为False
。(1)必填项检查【部门名称】
(2)IF(!BR_OUT.BR_CheckRequired1.isCheckRequiredOK)——校验未通过,则中断当前规则
(3)保存实体到数据库【主表】
注:树形结构表,保存需要勾选树形实体,才会生成对应的树字段数据,否则可能导致树数据异常
(4)显示设置的提示信息【保存成功】
4.3 列表工具按钮事件
- 1. 新增
- 2. 删除
- 3. 保存
- 4. 启用/禁用
(1)
IF([departmentMain].[IsLeaf]<>True)
——左边选择部门不是叶子节点父节点不能新增,提示相关信息,中断当前规则即可。
(2)新增实体记录【从表】
设置缺省值字段,也就是默认值(其中状态值:启用中/1,已禁用/0)
从表的删除和主表类似,首先删除前判断校验,然后删除实体记录保存,提示删除成功即可。
在保存中,一般需要进行相关校验,检验不通过则中断当前规则,校验通过直接保存数据,提示保存成功即可。
(1)必填项检查——校验不通过,则中断当前规则
(2)前后台唯一性检查——校验不通过,提示相关信息,中断当前规则
(3)数据合法性校验后——校验不通过,则中断当前规则
这里选择提示类型,那么在IF判断时选择对应的返回值即可。
与删除前校验一样,然后对列表多选多条记录进行「启用/禁用」处理时,修改状态字段,然后保存实体,提示设置成功。
(1)界面实体记录循环处理【启用/禁用】
条件设置:满足什么条件,才被循环处理实体记录
状态字段处理原则:启用中/1 → 已禁用/0、已禁用/0 → 启用中/1
结合使用 V3If() 函数,当满足判断条件,则返回参数值。
- 状态字段:当
V3If([staffDetail].[staffStatusCode]==0,"启用中","已禁用")
,若状态编码为0(已禁用),则设置状态为启用中,否则设置为已禁用;- 状态编码字段:当
V3If([staffDetail].[staffStatusCode]==0,1,0
,若状态编码为0(已禁用),则设置状态为1,否则设置为0。(2)保存实体到数据库【从表】
对当前界面实体循环处理后,需要保存数据。在实际业务中,也可以通过「保存」按钮来保存数据,按需设置即可。
4.4 检索事件
4.5 树记录切换事件
在左树右表的场景中,窗体加载事件时,只需加载左边树的主表数据。
加载树表数据后,若存在数据记录则触发记录切换事件,同理在切换记录时也可以触发记录切换事件,可以按主从表关联条件加载员工信息(从表数据)。
若存在叶子节点,那么选择父节点时需要加载当前所有叶子节点(下级部门)对应的员工信息数据。