正常情况下,皕杰报表的数据集是直接连接数据库取数的,但是如果遇到特殊情况需要通过中间件连接数据库,而非直接连接,就需要用到自定义数据集。

所谓自定义数据集,就是说数据集是自己写的一个java类,这个类的添加与其它自定义开发的类一样,设计器中在类加载配置中添加,服务器中打成jar包放到WEB-INF/lib下。

1、自定义数据集在皕杰报表设计器中使用

新建数据集,名称为ds,数据源不选,类型选择为自定义类型。

点击下一步,在编辑查询sql里写上自定义数据集的全路径。

然后点击下一步,将需要向自定义数据集中传参的参数选择进来。

数据集的参数序号和自定义数据集代码中的applyParams方法中的(java.lang.Object[] params)object数组一一对应。

然后点击完成,自定义数据集就创建完成了。

2、自定义数据集在皕杰报表服务器WEB端的应用

web中添加自定义数据集也有两种方式:

一是将编译好的.class文件打成jar包,放到WEB-INF\lib文件夹里;二是将.class文件放到WEB-INF\classes目录下。一般记住打jar包就可以了。

3、类介绍

用户自定义数据集需实现bios.report.api.customize.CustomDataSet接口。自定义数据集基础接口,直接实现该接口无效,应根据数据需要实现ArrayDataSet或IteratorDataSet。

4、方法说明

bios.report.api.customize.CustomDataSet接口:

applyParams

语法:void applyParams(java.lang.Object[] params)

用途:应用数据集参数,以实现动态获取数据。

参数:params - 参数列表,Object数组,与设计器中指定的数据集参数一一对应。

getMetaData

语法:java.lang.String[] getMetaData()

用途:获取数据元信息,主要用以在设计器中展示数据集的结构。

返回值:列名数组,长度要与数据列数一致

bios.report.api.customize.ArrayDataSet接口:自定义数据集接口,用户可以实现该接口,以自定义的方式完成报表中某个数据集的数据准备和加载。该接口适合一次性的数据加载模式。 实现类需要一个无参数的构造方法。

getRowCount

语法:public abstract int getRowCount()

用途:获取该数据集中数据的总行数

返回值:数据总行数

getRowData

语法:public abstract java.lang.Object[] getRowData(int rowIndex)

用途:获取指定行的数据

参数:rowIndex - 数据行序号,从0开始。

返回值:代表一行数据的Object数组

bios.report.api.customize.IteratorDataSet接口:自定义数据集接口,用户可以实现该接口,以自定义的方式完成报表中某个数据集的数据准备和加载。该接口适合逐条数据迭代加载的模式。 实现类需要一个无参数的构造方法。

nextRow()

语法:java.lang.Object[] nextRow()

用途:加载数据集中下一行的数据

返回值:代表一行数据的Object数组;返回null时,表示数据加载完毕。