BIRT 如何配置动态数据源

 

关键词导读:Birt 动态数据源

BIRT本身不直接支持动态数据源,常见解决办法是在数据源的beforeopen事件中添加类似如下代码:

...

importPackage( Packages.java.io );

importPackage( Packages.java.util );

fin = new java.io.FileInputStream(new String("d:/config.txt"));

props = new java.util.Properties( );

props.load(fin);

extensionProperties.odaDriverClass = new String(props.getProperty("driver"));

extensionProperties.odaURL = new String(props.getProperty("url"));

extensionProperties.odaUser = new String(props.getProperty("username"));

extensionProperties.odaPassword = new String(props.getProperty("password"));

fin.close()

...

这种通过硬编码的方式解决(要么需要大量修改报表文件,要么需要每个报表继承一个公共的库文件),过程还是比较复杂,在报表数量较多,开发人数较多时,需要注意的地方有些多,并不完美。

如果有了集算器,这样的问题就简单多了,其独特的宏替换机制极大地提高代码复用程度,根据不同参数值,得到不同结果。

比如要处理这么个场景: 数据源myDBoraDB分别指向不同的数据库,两库中有相同结构的表ORDER,报表需要根据参数动态连接数据源,查询并展现ORDER中金额大于1000的订单。示意图如下:

集算器SPL1行就搞定了:

 

A

1

=${pSource}.query("select * from ORDER where Amount>1000")

其中 pSource 为是报表参数,代表数据源名,${…} 表示将字符串解析为表达式。其实还有很多情况BIRT解决动态计算问题不太方便,但有集算器SPL的辅助却很简单,感兴趣可以参考:解决 BIRT 动态数据源的若干示例

集算器提供了 JDBC 驱动,可以很方便的与BIRT等报表工具集成,BIRT调用SPL脚本有使用和获得它的方法。

关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器