2012-07-12 89 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,標籤,列表允許值等。