有没有办法外部化BIRT报告的报告查询。我们需要支持多个数据库引擎,因此我们的查询会因底层数据库而异。我想使用config参数告诉BIRT报告使用特定的查询文件
答案 0 :(得分:1)
我不知道开箱即用的方法。您可能想出一些相当复杂的脚本来启动数据集的onLoad事件。
如何在每个数据库中放置相同的存储过程?然后,您可以参数化数据连接信息(在报告数据源的“编辑”页面上),并动态指示报告以查询特定数据源。只要存储过程在所有实例上,您就可以从正确的源获取正确的数据。
答案 1 :(得分:1)
当然可以。如果您在报告本身中编写了一些Javascript代码,它可以访问磁盘上的文件以检索文本查询和在执行之前修改查询。
您需要编码的事件是数据源上的beforeOpen
。我们实际上通过检测它们是否设置为"*"
并动态调整SQL查询并将其更改为:
select A from B where C = ?
为:
select A from B where ((C = ?) or (1==1))
丑陋的修改只是为了让我们不必担心改变位置参数。
您可以从磁盘文件中读取一行,并使用以下内容更改查询:
try {
var fip0 = new Packages.java.io.FileInputStream("/query.txt");
try {
var fip1 = new Packages.java.io.DataInputStream(fip0);
try {
queryText = fip1.readLine() + "";
} catch(e1) {}
fip1.close();
} catch(e2) {}
fip0.close();
} catch(e3) {}
虽然你应该有更好的错误检查而不是:-)我删除它,因为它(1)有点大; (2)有点专有。