在我们的低代码开发平台中,视图的概念和数据库中的“视图”概念完全一致,只不过我们通过视图的形式将多个单据的数据汇总成一张“虚拟表单”,这张虚拟表单只能查询,统计,被其他表单引用,但是不能修改和删除。
比如我们典型的应用场景:
假设我有2个保单表单(由于我们主营保险中介业务软件,所以这里就以保单为例,其实只要存在多个单据汇总的都可以使用视图),一张保单的数据来源于在线投保,一张用于手工录单,那么实际中如果需要汇总统计,或者针对这两张表单统一进行如收费,理赔登记等等的操作,那么就可以使用视图将这两张保单汇总到一视图中,后续的统计等等就可以针对视图来进行。如下图:
假设两个表单上有下面这些字段,我们希望汇总到视图:
表单1: | 表单2 | ||
保单号 | __Name__ | 保单号 | __Name__ |
投保客户 | 来源于引用的客户表单的__Name__字段,所以后面会关联查询客户表单,视图的SQL脚本中我们会使用AS转成__CustomerName__ | 投保人姓名 | __ApplicantName__,视图的SQL脚本中,我们会使用AS转成__CustomerName__ |
投保时间 | __SignDate__ | 投保时间 | __SignDate__ |
起保时间 | __StartDate__ | 起保时间 | __StartDate__ |
终止时间 | __EndDate__ | 终止时间 | __EndDate__ |
如果还有其他字段需要汇总到视图中,参考后面的SQL例子自行补充即可。 |
也就是说,视图主要用于下面场景:
1、汇总统计:把多个表单的数据通过视图(您可以理解成多个表汇总成一个“虚拟表”)汇总后进行汇总统计;
2、统一提醒:由于把多个表单的数据汇总到一个视图,那么我们就可以针对这个视图去做提醒任务;
3、汇总操作:比如需要对多个表单数据进行收费,如果不用视图那么显然我们不可能每个源表单都做一个收费表单,我们可以通过视图汇总后,多个源表单就能对应一个收费表单了。
前面我们说过,“视图”对于数据库来说是一个“虚拟表”,所以对于E6开发平台来说自然就可以对应一张E6的表单。怎么创建视图呢?默认视图功能是关闭的,主要是考虑绝大部分场景用不到视图,而绝大部分E6用户不理解数据库的“视图”概念。
1、开启视图功能:在E6开发平台顶部工具箱中“工具”-“系统参数”:
系统参数设置页面如下图,勾选“允许增加和删除单据视图”并确定。
2、开启了视图后,就可以像增加表单一样增加视图。在E6开发平台,右键点击解决方案的某个单据文件夹,如下图,增加表单:
如下图新增单据窗口中,选择“视图单据”,输入单据名,视图编号,数据库视图名,并确定:
单据名:和普通业务单据一样,比如这里叫“保单汇总视图”;
视图编号:和普通业务单据编号一样,不能只能是字母组合,比如这里输入AllPolicy;
数据库视图名:这里自动根据视图编号,加上前缀“VIEW_”生成,视图名称就是创建视图的SQL语句中的视图名称,如下图,我们使用SQL CREATE VIEW VIEW_Policy创建一个视图,那么这里填写的数据库视图名和SQL中的必须一致(这其实很容易理解,就像表单的表名要和数据库中的表名对应一样)。
如下图中,我们分别取了这两个表单中需要汇总的几个字段:
记录ID:__ID__ 这是必须要有的,并且所有表单都有
保单号:__Name__
投保人姓名:__ApplicantName__ AS __CustomerName__(由于两张单中一个是来源于本表单的字段,一个来源于引用的客户名,所以需要AS成相同的)
投保时间:__SignDate__
起保时间:__StartDate__
终止时间:__EndDate__
3、像普通单据一样在新增加的“视图表单”中增加字段,如下图:
保单号:数据库字段名为“__Name__”,对应上图的视图中的__Name__字段;
投保日期:数据库字段名为“__SignDate__”,对应上图的视图中的__SignDate__字段;
...
其他的不再一一描述,单据上的每个输入框的数据库字段名对应视图中的即可。
投保日期:
4、E6的视图有什么要求呢?由于视图在E6中是一个表单(只不过视图表单数据不能增,删,改,因为视图本身就不能增删改),那么视图SQL就必须要有普通表单所具备的一些基础字段,所以视图必须具备如下字段(每个表单不论大小,也都至少具备如下字段),其他字段根据您的实际表单中要汇总的补充即可。
__ID__:表单数据的记录ID;
__FK_Employee_CreateUser_:表单数据记录的创建人ID,对应于“员工表__Employee__”的__ID__;
__CreateDateTime__:表单数据记录的创建时间,精确到秒;
__IsAudit__:表单记录的是否已审核标记;
__BillId__:(非常重要)对应视图表单的编号,比如上面新建视图时候输入的视图编号为“AllPolicy”,那么这个字段就必须直接返回视图表单编号(AllPolicy)。
有了视图表单,创建好数据库视图,那么我们就可以像操作单据一样查询视图表单了。
视图表单由于也是表单,所以同样可以被其他表单引用,这样我们就可以实现汇总多个表的数据,进行统一的如收费结算、提醒等等的操作了。
附:创建视图基础语句(SQLServer的,MySQL的类似),视图名请根据自己的实际情况修改:
CREATE VIEW VIEW_AllPolicy AS SELECT p.__ID__, ...... p.__FK_Employee_CreateUser_, p.__CreateDateTime__, p.__IsAudit__, 'AllPolicy' AS __BillId__ FROM __PolicyWeShop__ p WHERE p.__Payed__=1 UNION ALL SELECT p.__ID__, ...... p.__FK_Employee_CreateUser_, p.__CreateDateTime__, p.__IsAudit__, 'AllPolicy' AS __BillId__ FROM __Policy__ p