BIRT:数字类型(格式)地狱

时间:2012-07-12 06:01:24

标签: java localization locale birt

Birt支持3种数字/数字类型(例如数据集中的输出列):

  • Integer
  • Decimal
  • Float

与此同时,BIRT拥有数字的唯一1(是!ONE !!!)css内置格式。这意味着如果你有,例如int(天)和小数(金额)你不能使用内置css样式(你已经定义了自己并在每个项目上应用它们)。

走得更远。您从BIRT调用Java类并将其传递给它所谓的Integer值。你在Java上得到了什么?纠正Double。现在我们没有办法在那个级别上最初我们有Integer值。

当然,在某些情况下,您可以尝试根据值猜测数据类型。 E.g。

    public Object formatFromBirt(Object pObject){
    if (pObject == null) return null;
    ...
    if (pObject instanceof Double) {
        // workaround for int as double (e.g. days in arrear in total)
        LWDecimal dec = new LWDecimal((Double)pObject);
        if (dec.getScale() == 0){
            pObject = dec.getJavaDecimal().toBigInteger();
        }
    }
    return formatObject(pObject);
}

我的大问题是 - 伙计们,你如何处理BIRT数字类型系统中的所有混乱

1 个答案:

答案 0 :(得分:1)

在BIRT API中,他们有这个属性定义。

一般情况下,如果您要检查源代码,在每个“属性”或“列”或“字段”或您调用该对象的任何内容,只要它具有包含其数据类型的属性,您将注意到该对象字段之一是数据类型的字符串名称。因此,API似乎通过此字符串字段验证所选数据类型。

例如,如果在DataSet中创建输出列并选择十进制作为其数据类型, 下拉列表中的显示名称实际上是CamelCase,它是“十进制”,但XML名称是“十进制”。以编程方式执行此操作,您可以尝试

 resultSetColumn.setDataType("Decimal");

因此,您可以通过相同的方式以编程方式验证其确切类型。

下面是DataSet列的常用数据类型列表。

http://www.eclipse.org/birt/ref/rom/structs/ResultSetColumn.html#Property-dataType

更新: 您可以使用DesignChoiceConstant的静态常量,它包含BIRT可用的数据类型。它还包括可用于其他BIRT API的属性名称和值,例如css,标签,允许值列表等。