集智平台使用动态xml数据集

需求描述:

用xml文件作为报表数据集的数据来源,并且xml文件是程序自动生成的,每月根据日期生成xml文件,需要能动态改变报表数据集引用的xml文件名。

实现方法:

润乾报表的数据集可以通过指定的xml文件,但是如果该xml文件需要根据某个参数(比如月份)来动态的获得,在定义数据集时就无法设置了。目前xml文件作数据集支持到绝对路径或者相对路径上指定的xml文件,使用参数或宏的方式来动态传数据集xml文件名是不支持的。所以只能在api中接收xml文件名然后添加到数据集中进行实现,代码如下:

String name=request.getParameter(“name”);
String newXmlFileName = “D:\\201103.xml”;//动态添加的xml文家名
InputStream is = new FileInputStream(“报表路径”);; //获取一个报表输入流
ReportDefine rd = (ReportDefine)ReportUtils.read(is);

ReportDefine rd = (ReportDefine)ReportUtils.read( fis );

DataSetMetaData dsmd = rd.getDataSetMetaData();
for(int i=0;i<dsmd.getDataSetConfigCount();i++){
// 获取一个数据集
DataSetConfig dsc = dsmd.getDataSetConfig(i);
// 不是XML数据集则跳过
if(!(dsc instanceof XMLDataSetConfig)) continue;
// 获取XML数据集的文件名
XMLDataSetConfig xmldsc = (XMLDataSetConfig)dsc;
String xmlFileName = xmldsc.getFileName();
System.out.println(“XML文件名:”+xmlFileName);
xmldsc.setFileName(newXmlFileName);
// 保存修改
dsmd.setDataSetConfig(i, xmldsc);
}
rd.setDataSetMetaData(dsmd);

最后用defineBean发布报表

String beanName=”testBean”+name;
out.println(beanName);
//设置request中报表定义对象
request.setAttribute(beanName,rd);

这样就可以做到一张报表能够动态的获取不同的xml文件来生成数据集了。

本文标签: