关联基础表Code/Name转码

应用表中存储的中code,但显示的时候要关联对应的基础表的name,然后保存也自动完成,这是一个非常典型的应用场景。

在快速开台模式中,这涉及到加载公式、参照字段映射值,是否参与保存,几个配置配合使用。

具体而言,是以下3点:
序号说明
1在业务表模板中搞两个字段,code字段参与保存但隐藏,name字段不参与保存但显示!code是文本框,name字段是参照,两者互逆.
2在name字段上配置加载公式关联基础表,比如关联人员:getColValue("pub_user","user_name","login_code","createuser"),即查询出人员姓名
3在name字段的参照是配置字段返回映射,要返回两个字段,分别把基础表的code与name都返回,比如:【字段映射=login_code->createuser;user_name->createuser_name;】
<
即:查询是加载公式机制,保存是参照机制,code字段隐藏但保存,name字段是显示为参照,但不参与保存。
具体配置截图如下:


业务表中的人员字段名是:createuser(参与保存、文本框、隐藏)、createuser_name(不参与保存、列表参照、显示)
createuser_name的加载公式是:getColValue("pub_user","user_name","login_code","createuser")
createuser_name的参照定义是:【模板编码=pub_user_ref】【字段映射=login_code->createuser;user_name->createuser_name;】【窗口大小=800*480】


业务表中的机构字段名是:createorg(参与保存、文本框、隐藏)、createorg_name(不参与保存、树参照、显示)
createorg_name的加载公式是:getColValue("pub_org","org_name","org_id","createorg")
createorg_name的参照定义是:【模板编码=pub_org_CODE1】【字段映射=org_id->createorg;org_name->createorg_name;】【窗口大小=480*480】


值提指出的是常用方法在查询时显示Name是通过SQL做LeftJoin关联基础表的,而这里用的是getColValue()这个函数!这个函数底层本质上也是拼SQL去查询的,但也有本质区别:

getColValue并不是每一条记录就查一次库的,而是先根据分页,先把当页的数据的code合并后,做成in去查询一次基础表的,即一个getColValue只查一次库。

一条SQL查询,是总共只查一次数据库,而加载公式是每一个公式会查一次数据库,有几个getColValue就查几次,感觉好象慢了。

但如果关联的表多了,比如5-6张表以上,则一条SQL很可能会有严重查询性能问题,因为相乘后的笛卡尔积数据量太大了,但getColValue加载公式无论是主表还是关联表都是直接根据id做in查询,所以反而快了。

因为在服务器端,多连接两次数据库并不是性能大问题,关键是SQL简单了,最后的综合性能反而高了,而且关联再多也不怕。而且配置简洁了,容易理解。

假如在查询表名是就配置视图名,然后在视图中left join基础表,或者直接配置SQL关联,只要在查询结果中有createuser_name字段,则加载公式可以省略, 即快速平台也是支持那种直接预先一条SQL查询的机制的,两种机制都支持,由开发者自主选择,切勿以为只能必须用加载公式一种方法!

下面是Code与Name转换的视频: