Композитные поля в Бирте - PullRequest
0 голосов
/ 08 ноября 2011

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

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

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

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

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

Крис

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

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

Использование i18n в Javascript кратко описано в BIRT FAQ . Один интересный вопрос может быть Как я могу локализовать строки в 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+")" ) : ("")
1 голос
/ 09 ноября 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());
}
...