-
yangqh 数据老手Lv5
发表于2020-8-21 15:42
楼主
本帖最后由 yangqh 于 2020-8-21 15:50 编辑
适用需求背景:数据库表中有blob字段存储文件格式数据,希望在分析表格中加一列下载按钮,点击后可下载对应行的附件文件到本地
该需求可用到ABI附件下载接口,以下给出接口说明:
接口函数名[ _showfile(dwfile, keyfields, keyDwValues, destFile, format,fileSuffix)
下载示例:复制代码
参数详解:
复制代码
适用需求背景:数据库表中有blob字段存储文件格式数据,希望在分析表格中加一列下载按钮,点击后可下载对应行的附件文件到本地
该需求可用到ABI附件下载接口,以下给出接口说明:
接口函数名[ _showfile(dwfile, keyfields, keyDwValues, destFile, format,fileSuffix)
下载示例:
- var dwfile = "CLGLCLXX.CLGL_CLXX_CLNR";
- var keyDwValues=[];
- var value="<#=GRID6.E2#>"
- keyDwValues.push(value);
- var format=null;
- var filename= "<#=GRID6.D2#>";
- var fileSuffix = filename.split(".")[1];
- var destFile= filename.split(".")[0];
- _showfile(dwfile, ['CLGL_CLXX_CLBH'], keyDwValues, destFile, format,fileSuffix);
第一个参数:dwfile 代表需要下载的数据库blob字段名称,CLGLCLXX.CLGL_CLXX_CLNR代表的是数据库表CLGLCLXX中的CLGL_CLXX_CLNR字段,此CLGL_CLXX_CLNR字段为需要下载的blob字段(不可为空)
第二个参数: keyfields:关键字表元(可为多条数据,格式为"keyfield1##keyfield2##..")
第三个参数:keyDwValues:关键字表元对应的值(可为多条数据,格式为"keyDwValue1##keyDwValue2##..")
代表的是dwfile这条数据对应的两个字段名,值与value一一对应,由这两个数据确定dwfile这一条数据(不可为空)
第四个参数:destFile 代表的是下载的文件名(不可为空)
第五个参数:format 代表的是文件类型(可为空 为空填null)
第六个参数:fileSuffix 代表文件后缀(不可为空)
后台查询原理以及对应参数:
后台查询数据库是根据参数中的值拼接sql:dwfile 中包含表名以及需要查询的字段名,keyfields 代表筛选的数据库列名,keyDwValues代表这个字段对应的值,
按照上述示例所拼接出的sql为:select CLGL_CLXX_CLNR from CLGLCLXX where CLGL_CLXX_CLBH="keyDwValues"
-----------------------------话不多说,我们在分析表中实战一下~----------------------------------------------------------------------------------------------------------
Step1、在报表模板做好分析表格,其中注意以下几点:
(1)因为数据库表中一条数据对应一个文件,所以浮动表元上设置分组类型为“只选择不分组”
(2)表格上需要拾取出所有主键字段,以便后面脚本中可直接引用、找到对应需要下载的那一行的附件表元(如果表样界面不需要显示对应列,可设置列隐藏)
Step2、在“下载”表元上设置万能式表达式
- var c="<#=GRID1.A2#>"+"##"+"<#=GRID1.B2#>";
- var d="文件名";
- _showfile('ICEHI_B0.A_12',"ICEHI_B0.BBQ_##ICEHI_B0.USERID_", c,d,null,"xlsx");
(写法参考上面接口说明)
PS:以上是当blob字段中存储的文件格式都为一种(xlsx)时的示例,如果当blob字段中存储的文件类型各不相同,需要自行在数据库表中维护一个文件类型字段列,在做表格的时候吧文件类型取出来,然后作为变量拼接到接口的fileSuffix参数中
3个回答
想请问下,按照上面的方法,下载下来的附件都是空白的,感觉是这里出问题 ----第一个参数:dwfile 代表需要下载的数据库blob字段名称。
这除了写上数据库的blob字段外,还有其他注意点吗?