在一个复杂的表单中,可能存在多个只读子表,每个子表都有可能需要上传附件,但是经常会遇到这样的需求:需要在主表中汇总显示这些子表上传的附件。比如下面的场景,我们的主表中有4个只读子表,每个子表都需要上传附件:

每个子表都需要单独上传附件

每个子表单独上传附件的需求其实是很常规的需求了,但是如果需要把每个子表上传的“文件列表”汇总显示到主表的“文件列表”,怎么办呢?我们总不能告诉客户,做不到,这显然是不合适的,所以E6开发平台可以通过“数据库视图”汇总显示子表中的文件列表,如下图:

如下图实现:
1、先写好一个视图,写视图前我们可以先看看普通的“文件列表”对应的数据库表结构,文件列表发布后在数据库中生成的数据库表结构如下图:

那么只要我们的“视图”字段至少也有上面这些字段,就可以汇总显示多个文件列表的数据了,当然要能够下载,预览,还需要额外几个字段用于标识视图汇总后的记录中,这条记录原始的一些信息。视图代码如下图,与普通表结构相比,视图中就多了3个字段:
1、__OwnerBillID__ : 表示汇总到视图后,这一条文件数据在原来的子表单中对应的“文件列表”的“表单编号”;
2、__PCreateDateTime__ : 表示这一条文件数据所在的原子表单的记录创建时间;
3、__PBillId__ :表示这一条文件数据所在的原子表单的编号;
其实就是汇总到视图后,要知道这一条数据原来在哪个子表单(__PBillId__),这条子表单记录ID值(__PCreateDateTime__),以及文件列表数据原来属于哪个文件列表(__OwnerBillID__)。
CREATE VIEW VIEW_FCXABGFileList AS
-- 第一个文件列表
SELECT f.__ID__,
ptable.__FK_BBBB_,
f.__Name__,
f.__Text__,
f.__Group__,
f.__DefaultItem__,
f.__Index__,
f.__Length__,
f.__IsAudit__,
'这里填新创建的视图表单编号' AS __BillId__,
f.__FK_Employee_CreateUser_,
f.__CreateDateTime__,
-- 文件列表视图,比普通文件列表的“数据库表”就多了下面3个字段
f.__BillId__ AS __OwnerBillID__,
ptable.__CreateDateTime__ AS __PCreateDateTime__,
ptable.__BillId__ AS __PBillId__
FROM tb_XXXXXFileList f LEFT JOIN tb_AAAAAA ptable ON f.__FK_AAAAAA_=ptable.__ID__
UNION ALL
-- 第二个文件列表的字段,字段顺序,只要保证和第一个表相同即可。上面我们使用“CREATE VIEW VIEW_FCXABGFileList AS ...” 创建了视图“VIEW_FCXABGFileList”,下面我们来增加文件列表视图。
2、开发平台主表中增加一个“文件列表”,如下图。
设置属性:
子单据ID:必须为上面视图SQL中“'这里填新创建的视图表单编号' AS __BillId__,”这里对于的,也就是“这里填新创建的视图表单编号”需要替换成你下图所填的“子单据ID”属性值;
数据库表:填上面视图名(VIEW_FCXABGFileList ),就是“CREATE VIEW 视图名” 这里的视图名;
视图:True
填写了上述3个属性后,就可以了,其实和普通表完全一样,只不过“视图”文件列表的数据,来源于上面创建的数据库视图而已,另外“视图”文件列表,不能上传,不能删除。

效果如下图:
