显示具有外部依赖性的计算数据

时间:2009-08-19 10:38:33

标签: spring birt

我正在制作一份报告,需要包含一个“估算”列,该列基于数据集中没有的数据。

理想情况下,我希望能够定义Java接口

public int getEstimate(int foo_id, int bar_id, int quantity);

其中foo_idbar_idquantity在我想要估算的行中可用。

生成估算值会有多种策略,因此最好使用界面来允许在需要时进行交换。

看看BIRT文档,我认为我应该使用事件处理程序机制,但这似乎只允许定义要使用的类,我想以某种方式注入一个配置的估算器。

一个非混淆的例子可能是说我有一个包含IP地址列的数据集,我希望能够使用一些GeoIP服务从IP地址解析该国家/地区。在这种情况下,我有一个接口public String getCountryName(String address),实际的实现可能使用MaxMind,本地缓存或其他系统。

我将如何做到这一点?

或者..通过编写可以在将计算数据交付给BIRT之前集成计算数据的脚本数据源,我会更好吗?

或..某种脚本数据源然后用于创建连接数据集?

1 个答案:

答案 0 :(得分:0)

我认为脚本数据源可以正常工作,但基于Java的事件处理程序会更直接。您可以将其实现为一个简单的POJO,并可以访问任何和所有复杂的对象和工具,以便您计算估算值。最简单的解决方案可能只是将计算字段添加到数据集中。

创建计算字段时,您可以根据可以利用的脚本逻辑获得相当复杂的结果,以便生成结果值。关于这条路线最好的事情是,行中的所有其他列值(我假设您需要计算估计值)通过表达式编辑器提供。您可以使用“包”对象(即var red = new Packages.redwood.HelloWorld())拉入复杂对象(PO​​JO)以帮助您进行计算。

如果你想创建Event Handler类,这就是我要做的。我将创建一个文本对象,并将onCreate绑定到您的POJO(通过扩展TextItemEventAdapter)并覆盖“onCreate”方法。在那里,您可以做任何您想要的工作,最后只需调用“text.setText(theEstimateResult);”即可使估算值可见。至于访问数据值来进行计算,您也可以访问POJO中的数据。我假设估计值将是更大的值表的一部分。您可以通过reportContext访问任何特定的行值。

这是我首先尝试的两个想法。计算列是最快实现的,并且在部署期间最不可能抛出曲线。让我知道您选择哪种方式,如果需要,我们可以进一步散列。