外部化BIRT查询

时间:2010-03-11 21:18:30

标签: reporting birt

有没有办法外部化BIRT报告的报告查询。我们需要支持多个数据库引擎,因此我们的查询会因底层数据库而异。我想使用config参数告诉BIRT报告使用特定的查询文件

2 个答案:

答案 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)有点专有。