润乾报表 V2018-Api 设置内建数据集
内建数据集是指数据集的结构和数据都存入报表模板,运算报表的时候不再需要从数据源取数。一般情况下,主要满足以下两种需要:
1、可以让用户快速的体验建立报表的过程,只需在报表设计器中定义一个内建数据集,录入一些模拟数据就可以在报表中使用了,这样给用户的体验过程带来了极大的方便。
2、可以用于报表的跟踪调试,当报表预览结果和预想的结果不符合时,可以把数据集转为内建,然后把报表模板发给技术支持人员,方便支持人员跟踪调试(否则,在无源的状态下,不能调试则无法及时发现问题)。
当然,根据用户特殊需求,内建数据集也可以作为一个巧妙的功能点来使用。
比如,有用户采用 MVC 框架结构,控制层调用服务层产生报表要展现的数据,报表只需将服务层返回的数据展现即可,不需要任何数据方面运算。
往往这种情况,在未考虑到内建数据集的时候,基本的解决方案是自定义数据集,由自定义数据集直接调用服务层返回数据封装成 Dataset 用于展现。再或者控制层获取到数据后保存成文件,再由自定义数据集读取展现。
但,客户要求严格按照 mvc 结构来做,不允许报表调用服务层。保存成文件再读取又怕并发大出问题,过程也繁琐。这就无法让报表读到生成的数据了。那么这个时候,内建数据集就很好用了。
基本的原理是,终端用户发请求是控制层,控制层从服务层获取数据,后控制层读取已定义好格式的报表文件,将获取的数据封装成报表的内建数据集即可,最终采用 bean 形式直接跳转到展现层展示报表。
以上核心部分就是如何给报表设置内建数据集,也是本文要介绍的内容,主要以测试代码形式说明:
importcom.raqsoft.report.model.ReportDefine;
importcom.raqsoft.report.usermodel.BuiltinDataSetConfig;
import com.raqsoft.report.util.ReportUtils;
import com.runqian.report4.usermodel.Types;
public class ReadReport {
publicstatic void main(String[] args) {
StringreportFile =“D:/raqsoft_v5_0215/report5/web/webapps/demo/WEB-INF/reportFiles/wwww.rpx”;
try{
// 读入原始报表文件
ReportDefinerd = (ReportDefine)ReportUtils.read(reportFile);
//new 内建数据集类
BuiltinDataSetConfigbds = new BuiltinDataSetConfig();
// 设置数据集名称
bds.setName(“dsneijian”);
// 定义内建数据集字段名称
String[] colNames = {“fff1”,“fff2”};
// 定义内建数据机字段类型
byte[] colTypes ={Types.DT_STRING,Types.DT_INT};
// 设置内建数据集字段名称
bds.setColNames(colNames);
// 设置内建数据机字段类型
bds.setColTypes(colTypes);
// 定义并设置内建数据集数据列表
String[][] valuess ={{“aaaa”,“1”},{“bbbb”,“2”},{“cccc”,“3”}};
bds.setValues(valuess);
// 为报表数据集列表增加新 内建数据集
rd.getDataSetMetaData().addDataSetConfig(bds);
// 输出保存修改后的报表
ReportUtils.write(“D:/raqsoft_v5_0215/report5/web/webapps/demo/WEB-INF/reportFiles/neijianbi.rpx”,rd);
}catch (Exception e) {
e.printStackTrace();
}
}
}
注:报表设计器内增加内建数据集包括:增加字段、设置字段类型、添加数据。 因此 api 也是涉及对应的三个方法,由上面代码(内建数据集类:BuiltinDataSetConfig)可知:setColNames()/setColTypes() 及 setValues()