历史版本2 :JS实现大数据集导出 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 版本编辑
报表服务器版本 | jar包版本 |
---|---|
10.0 | 2018.12.27 |
2. 描述编辑
目前fr对于大数据量的模板导出时,可能存在时间过长或内存占用过大的情况,为了防止这样造成宕机的风险,10.0新增了“大数据集导出”的功能,可直接根据数据集结果进行导出。
此功能主要是针对明细表,它可以实现跳过报表计算直接取数导出。
3. 思路编辑
通过自定义js调用接口,实现原理如下:
1)使用SXSSFWorkbook流式行导出,速度快;
2)使用生产者消费者模式,一个线程用于取数,把数据行存在队列中,另一线程读取行导出;
4. 接口编辑
key | value | 举例 |
---|---|---|
sessionID | 具体sessionID | |
dsName | 数据集名称 | ds1 |
params | 数据集参数json,参数名:参数值 | { id: '9527', name:'Stephen' } |
columns | 列名称用逗号分割,不指定使用数据集所有字段 | col1,col2,... |
fileName | 导出文件名称,不指定使用默认的“模版名-数据集名称.xlsx” |
接口示例如下:
//接口为directExportToExcel: function (dsName, fileName, params, colNames)
//注意参数中的特殊字符需要进行url编码,比如大括号,冒号等。
var paramStr = encodeURIComponent("{param1:1,param2:2,param3:\"text\",...}")
//数据集传参,字符串参数建议写成格式\"text\"
var colNames = encodeURIComponent("col1, col2, col3,...")//指定导出的数据列,导出字段按此顺序排列,为空默认导出所有
_g().directExportToExcel("数据集名称", "导出文件名称", paramStr, colNames)
注:此功能只支持关系类数据库,且sql server数据库需要把游标设置为服务器游标。编辑
5. 示例编辑
5.1 模板设置
打开模板: %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\使用常用参数组合.cpt
5.2 控件设置
在参数面板中添加“导出”按钮,并新增“点击”事件,如下图所示:
js代码如下:
//接口为directExportToExcel: function (dsName, fileName, params, colNames)
//注意参数中的特殊字符需要进行url编码,比如大括号,冒号等。
var paramStr = encodeURIComponent("{area:华北,province:河北,city:石家庄}")
//数据集传参
var colNames = encodeURIComponent("订单ID,货主名称,货主地区,货主省份,货主城市,货主地址")//指定导出的数据列,导出字段按此顺序排列,为空默认导出所有
_g().directExportToExcel("ds1","订单",paramStr,colNames)
注:这里的参数名是指模板参数名,而不是数据集中的数据列名。
5.3 实现效果
点击导出按钮,可以将ds1数据集导出来,如下所示: