Составные поля в Birt

Я новичок в Birt (на самом деле это мой первый день с ним), и моя задача состоит в том, чтобы создать отчет Birt, который выглядит точно так же, как отчет, сделанный во Flash/Flex ... Этот отчет выглядит очень хорошо.

Проблема в том, что в моем решении Flex у меня есть одно поле DataGrid, состоящее из метки, за которой следует числовой вывод, если числовое значение равно 0 или больше.

Основываясь на двух значениях строки наборов записей, я получаю интернационализированное значение, применяя функции сопоставления Birt (это уже отлично работает). Результирующая строка должна быть дополнена "({value})", если значение больше или равно 0.

При использовании конструктора я могу поместить второе поле только в свою собственную ячейку таблицы или строку таблицы, но, похоже, я не могу вывести оба поля в одну ячейку таблицы.

Было бы здорово, если бы кто-то мог провести меня через это.

Крис


person Christofer Dutz    schedule 08.11.2011    source источник


Ответы (2)


Вы можете построить всю строку в выражении Динамический текст JavaScript.

Использование i18n в Javascript кратко описано в часто задаваемых вопросах BIRT. Один интересный вопрос может быть следующим: Как я могу локализовать строки в JavaScript - это выражение дает локализованный текст:

reportContext.getMessage("companyNameKey", reportContext.getLocale())

Данные строки хранятся в массиве row. Все доступные поля вы можете найти в построителе выражений. Когда вы нашли и дважды щелкнули нужное поле, появилось такое выражение:

row["FOO_NUMBER"].value

Собираем все вместе:

reportContext.getMessage("Foo number:", reportContext.getLocale()) + 
  (row["FOO_NUMBER"].value > 0) ? ( "("+row["FOO_NUMBER"].value+")" ) : ("")
person jinowolski    schedule 08.11.2011
comment
Привет ... спасибо за это. Это помогло :-) ... Поскольку мой FOO_NUMBER имеет тип Float, добавление значения приводит к выводу undefined. Если его не использовать, dynamicText будет работать так, как ожидалось. Единственное, что осталось решить, это сделать так, чтобы число с плавающей запятой выводилось в соответствии с локалью отчетов (в настоящее время число с плавающей запятой выводится в формате 1.4, что правильно в США, но в Германии должно быть 1,4) - person Christofer Dutz; 09.11.2011

Благодаря сообщению jinowolskis ... просто хотел добавить полное решение, если кто-то столкнется с той же проблемой :-)

importPackage( Packages.java.text );
var myKey = "" + row["vulnerabilityClass"] + "." + row["result"];
if(row["cvssScore"] >= 0) {
    var nf = NumberFormat.getNumberInstance(reportContext.getLocale());
    nf.setMinimumFractionDigits(1);
    nf.setMaximumFractionDigits(1);
    reportContext.getMessage(myKey, reportContext.getLocale()) + " (" + nf.format(row["cvssScore"]) + ")";
} else {
    reportContext.getMessage(myKey, reportContext.getLocale());
}
person Christofer Dutz    schedule 09.11.2011