通常报表的数据都来自数据库,但也有特殊情况,例如通过中间件连接数据库,而非直接连接等,需要用户自定义数据集。
皕杰设计器中自定义数据集的应用:
选择【工具栏】->【窗口】->【首选项】->【通用配置】->【类加载配置】,在【自定义接口实现类配置】中添加自定义类,添加方式有两种,
一是将编译好的.class文件打成jar包, 点击【添加JAR】,将jar包导入;
二是点击【添加文件夹】,将包含.class文件的文件夹添加进来。
添加完毕后,新建数据集,名称为ds,数据源不选,类型选择为自定义类型。
点击下一步,在编辑查询sql里写上自定义数据集类的全路径。
然后点击下一步,将需要向自定义数据集中传参的参数选择进来。
数据集的参数序号和自定义数据集代码中的applyParams方法中的(java.lang.Object[] params)object数组一一对应。
然后点击完成,自定义数据集就创建完成了。
web中自定义数据集的应用:
web中添加自定义数据集也有两种方式:
一是将编译好的.class文件打成jar包,放到WEB-INF\lib文件夹里;
二是将.class文件放到WEB-INF\classes目录下。
用户自定义数据集需实现bios.report.api.customize.CustomDataSet接口。自定义数据集基础接口,直接实现该接口无效,应根据数据需要实现ArrayDataSet或IteratorDataSet
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时,表示数据加载完毕。