1

我正在构建一个需要包含“估计”列的报告,该列基于数据集中不可用的数据。

理想情况下,我希望能够定义一个 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 之前将其集成,我会不会更好?

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

4

1 回答 1

0

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

创建计算字段时,就可以利用的脚本逻辑而言,您可能会变得非常复杂,以产生结果值。这条路线最好的一点是,行中的所有其他列值(我假设您需要计算估计值)都可以通过表达式编辑器获得。var red = new Packages.redwood.HelloWorld()您也可以使用“Packages”对象(即)引入复杂对象(PO​​JO)来帮助您计算

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

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

于 2009-08-19T14:00:37.780 回答