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() ... |
这种通过硬编码的方式解决(要么需要大量修改报表文件,要么需要每个报表继承一个公共的库文件),过程还是比较复杂,在报表数量较多,开发人数较多时,需要注意的地方有些多,并不完美。
如果有了集算器,这样的问题就简单多了,其独特的宏替换机制极大地提高代码复用程度,根据不同参数值,得到不同结果。
比如要处理这么个场景: 数据源myDB和oraDB分别指向不同的数据库,两库中有相同结构的表ORDER,报表需要根据参数动态连接数据源,查询并展现ORDER中金额大于1000的订单。示意图如下:
集算器SPL仅1行就搞定了:
|
A |
1 |
=${pSource}.query("select * from ORDER where Amount>1000") |
其中 pSource 为是报表参数,代表数据源名,${…} 表示将字符串解析为表达式。其实还有很多情况BIRT解决动态计算问题不太方便,但有集算器SPL的辅助却很简单,感兴趣可以参考:解决 BIRT 动态数据源的若干示例
集算器提供了 JDBC 驱动,可以很方便的与BIRT等报表工具集成,BIRT调用SPL脚本有使用和获得它的方法。
关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。