V5裸调用之通用查询下拉数据集使用字典表
在V5单独部署裸调用时,数据集的xml文件是由客户自己来实现的。通常是通过平台中生成好了xml文件,拷贝到相对应的文件夹下。
通过调用接口类IDataSetManager来实现读取数据集文件。由于一般情况下存放xml数据集文件都是在同一目录下,在实现IDataSetManager接口类中可以通过读取该文件夹下得xml来获取所有的数据集文件:
doc = sax.build(JdomMather.getFilePrefix()
+ PathUtils.getAppRealPath() + “/mis2/dataManager/xml/”
+ dataSourceName + “.” + dataSetName + “.xml”);
由于新建自定义报表和在报表中使用通用查询的下拉数据集,都是会通过该接口类中获取到的数据集文件。这时候遇到了一个问题,创建报表时可能用到的很多个数据集进行选择,而通用查询中选择条件字段是很可能是通过某一个或者某几个特定的字典表来选择字段。
因此会将一些特殊的字典变得数据集xml文件单独管理起来,希望使用通用查询下拉数据集时走这些xml。
在裸调用时发现新建报表和调用通用查询时的url中传入的参数不同。通用查询会传入一个fastID,而在新建报表中没有此参数。在数据集接口中,传入参数存在request,所有可以通过request中的fastId来却别是否此请求是通用查询的,这要就可以根据不同的请求跳转到不同的xml了:
if (request.getParameter(“fastID”) == null) {
doc = sax.build(JdomMather.getFilePrefix()
+ PathUtils.getAppRealPath() + “/mis2/dataManager/xml/”
+ dataSourceName + “.” + dataSetName + “.xml”);
} else {
doc = sax.build(JdomMather.getFilePrefix()
+ PathUtils.getAppRealPath()
+ “/mis2/dataManager/xml/sub/” + dataSourceName + “.”
+ dataSetName + “.xml”);
}
这里需要注意下,在取字段时最好根据文件名过滤下,避免将除了.xml后缀的其他文件或者文件夹也当成数据集计算,造成不必要的错误:
if (fname.startsWith(dataSourceName) && fname.endsWith(“.xml”)) {
String dsName = fname.substring(fname.indexOf(“.”) + 1, fname
.lastIndexOf(“.xml”));
al.add(dsName);
}
这样的话,通用查询中就可以使用类似字典表的功能了,可以很好的和报表中的数据集分开管理.