BIRT: Числовой тип (форматы) ад

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?


person FoxyBOA    schedule 12.07.2012    source источник


Ответы (1)


В API BIRT у них есть определения этого свойства.

В общем, если вы собираетесь проверить исходный код, в каждом «свойстве», или «столбце», или «поле», или как бы вы ни называли этот объект, пока у него есть свойства, включающие его тип данных, вы заметите, что одно из это поле объекта является строковым именем типа данных. Таким образом, кажется, что API проверяет выбранный тип данных по этому строковому полю.

Например, если вы создаете выходной столбец в наборе данных и выбираете десятичный тип данных, отображаемое имя в раскрывающемся списке фактически находится в CamelCase, что является «десятичным», но имя XML является «десятичным». Делая это программно, вы мог бы попробовать

 resultSetColumn.setDataType("Decimal");

Таким же образом вы можете программно проверить его точный тип.

Ниже приведен список общих типов данных для столбца DataSet.

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

ОБНОВЛЕНИЕ: вы можете использовать статические константы DesignChoiceConstant, они включают тип данных, доступный для BIRT. Он также включает имена свойств и значения, которые вы можете использовать для других API-интерфейсов BIRT, таких как css, метки, список разрешенных значений и т. д.

person vine    schedule 06.10.2012