历史版本9 :JS实现大数据集导出 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

  报表服务器版本JAR 包
10.02018-12-27

1.2 应用场景

在 FineReport 模板中导出大数据量时,可能存在时间过长或内存占用过大的情况,甚至导致宕机。

为了防止这样的风险,FineReport 10.0 新增了「大数据集导出」的功能,可直接根据数据集结果进行导出。

1.3 功能描述

「大数据集导出」功能主要是针对明细表,用户通过自定义 JS 调用接口实现跳过报表计算直接取数导出。实现原理如下:

1)使用 SXSSFWorkbook 流式行导出,速度快。

2)使用生产者消费者模式,一个线程用于取数,把数据行存在队列中,另一线程读取行导出。

1.4 接口简介

注:此功能只支持关系型数据库,且 SQL Server 数据库需要把游标设置为服务器游标。

Key  Value  举例  
sessionID具体 sessionID-
dsName数据集名称ds1
params数据集参数 JSON,参数名:参数值{

id: '9527',

name:'Stephen'

}

columns

列名称用逗号分割,不指定使用数据集所有字段

注:SQL 中的字段名不能使用别名,否则无法成功导出。

col1,col2,...
fileName导出文件名称,不指定使用默认的「模板名-数据集名称.xlsx」  

接口示例如下:

//接口为directExportToExcel: function (dsName, fileName, params, colNames)
//注意参数中的特殊字符需要进行url编码,比如大括号,冒号等。
var paramStr = encodeURIComponent("{param1:1,param2:\"21','22\",param3:\"text\",...}")
//数据集传参,字符串参数建议写成格式\"text\"
var colNames = encodeURIComponent("col1, col2, col3,...")
//指定导出的数据列,导出字段按此顺序排列,为空默认导出所有
_g().directExportToExcel("数据集名称", "导出文件名称", paramStr, colNames)

2. 示例一:导出数据集参数为单个值编辑

2.1 模板设置

打开模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\使用常用参数组合.cpt

2.2 控件设置

在参数面板中添加导出按钮,并新增点击事件,如下图所示:

1562816716987200.png

JavaScript 代码如下:

//接口为directExportToExcel: function (dsName, fileName, params, colNames)
//注意参数中的特殊字符需要进行url编码,比如大括号,冒号等。
var paramStr = encodeURIComponent("{area:华北,province:河北}")
//数据集传参
var colNames = encodeURIComponent("订单ID,货主名称,货主地区,货主省份,货主城市,货主地址")
//指定导出的数据列,导出字段按此顺序排列,为空默认导出所有
_g().directExportToExcel("ds1","订单",paramStr,colNames)

注:这里的参数名是指模板参数名,而不是数据集中的数据列名。

注:SQL 中的字段名不能使用别名,否则无法成功导出。

2.3 效果预览

保存模板,点击预览。点击导出按钮,可以将 ds1 数据集导出为 Excel 文件,如下图所示:

1562817097607776.png

注:不支持移动端。

3. 示例二:导出数据集参数为多个值编辑

3.1 模板设置

打开模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\使用常用参数组合.cpt

3.2 控件设置

在参数面板中添加导出按钮,并新增点击事件,如下图所示:

1562817491188305.png

JavaScript 代码如下:

//接口为directExportToExcel: function (dsName, fileName, params, colNames)
//注意参数中的特殊字符需要进行url编码,比如大括号,冒号等。
var paramStr = encodeURIComponent("{area:\"华北','华东\",province:\"北京','山东\"}")
//数据集传参
var colNames = encodeURIComponent("订单ID,货主名称,货主地区,货主省份,货主城市,货主地址")
//指定导出的数据列,导出字段按此顺序排列,为空默认导出所有
_g().directExportToExcel("ds1","订单",paramStr,colNames)

注:在 SQL 参数值的前后需要加上 \ ,防止被解析。

注:这里的参数名是指模板参数名,而不是数据集中的数据列名。

注:SQL 中的字段名不能使用别名,否则无法成功导出。

3.3 效果预览

保存模板,点击预览。点击导出按钮,可以将 ds1 数据集导出为 Excel 文件,如下图所示:

1562817775879069.png

注:不支持移动端。

4. 已完成模板编辑

4.1 示例一模板

已完成模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\大数据集导出-单数据.cpt

点击下载模板:大数据集导出-单数据.cpt

4.2 示例二模板

已完成模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\大数据集导出-多数据.cpt

点击下载模板:大数据集导出-多数据.cpt