2012-07-12 18 views
1

伯特支持3个/数字类型的(例如,对于在数据集中输出列):BIRT:Number类型(格式)地狱

  • Integer
  • Decimal
  • Float

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

走得更远。您可以从BIRT调用Java类,并将其传递给它,名为Integer值。在Java中获得什么?正确Double。在现在没有办法在那个水平,原来我们有Integer价值。

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

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号码类型系统所有黑金烂摊子?

回答

0

在BIRT API中,它们具有此属性定义。一般来说,如果你要检查源代码,在每一个“属性”,“列”或“字段”或任何你调用该对象,只要它具有包含其数据类型的属性,你将请注意,此对象字段中的一个是数据类型的字符串名称。因此,API似乎通过此字符串字段验证选定的数据类型。

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

resultSetColumn.setDataType("Decimal"); 

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

以下是DataSet列的常见数据类型列表。

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

UPDATE: 你可以使用DesignChoiceConstant的静态常量,它包括提供给BIRT.It还包括属性名称和值的数据类型,你可以用它来其他BIRT API,如CSS,标签,列表允许值等。