Birt поддерживает 3 типа чисел/цифр (например, для выходных столбцов в наборе данных):
Integer
Decimal
Float
В то же время BIRT имеет единственный (да! ОДИН!!!) встроенный css-формат для чисел. Это означает, что если у вас есть, например, int (дни) и decimal (суммы), вы не можете использовать для них встроенный стиль css (вы должны определить собственный стиль и применить его к каждому элементу).
Идти дальше. Вы вызываете класс Java из BIRT и передаете ему так называемое значение 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?