有没有办法将 BIRT 报告的报告查询外部化。我们需要支持多个数据库引擎,因此我们的查询因底层数据库而异。我想使用配置参数告诉 BIRT 报告使用特定的查询文件
问问题
780 次
2 回答
1
我不知道开箱即用的方法。您可能会想出一些相当复杂的脚本来触发数据集的 onLoad 事件。
在每个数据库中放置相同的存储过程怎么样?然后您可以参数化数据连接信息(在报表数据源的编辑页面上)并动态引导您的报表查询特定数据源。只要存储过程在所有实例上,您就会从正确的来源获得正确的数据。
于 2010-03-17T18:57:40.953 回答
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) 有点专有。
于 2010-03-19T02:08:26.123 回答