正常情况下,皕杰报表的数据集是直接连接数据库取数的,但是如果遇到特殊情况需要通过中间件连接数据库,而非直接连接,就需要用到自定义数据集。
所谓自定义数据集,就是说数据集是自己写的一个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时,表示数据加载完毕。