2011-01-31 5 views
0

Мне нужно заполнить поле в отчете на основе конечного результата сложного оператора ветвления. Как это сделать в iReport? Отчет должен показывать другую строку в зависимости от того, что находится в разных полях базы данных. Я делаю действительно сложный оператор SQL? Я использую переменные?как бороться со сложным ветвлением в iReport или Jasper

Так, например,

Если поле х = 1 ЕСЛИ у = 1 Если г = 1 поле следует читать

Если х = 1 ЕСЛИ у = 1 Если г = 2 Поле должно быть указано B

ответ

0

Я думаю, что самый простой способ сделать это состоял бы в том, чтобы поля (ов) заполнялись параметром, переданным из бэкэнда. Соединение jdbc создается в компоненте и передается в отчет, должно быть относительно легко получить доступ к полю или полям, которые вам нужны, и запускать данные с помощью метода, который определяет результат ветвления. Назначьте результат параметру и передайте его в отчет в переменной jasperParameter JasperFillManager.fillReport (файл, параметры, jdbcConnection).

1

Вы могли бы сделать что-то похожее на следующее:

($F{staff_type} == null ? new String("") : 
($F{staff_type}.equalsIgnoreCase("Permanent") ? new String("1") : 
($F{staff_type}.equalsIgnoreCase("Non-permanent") ? new String("2") : new String("") 
))) 

В принципе, вам нужно использовать вложенные выражения условия.

1

в textfieldexpression написать выражение, как этот

(($F{PAYMENTMODE}.equals("CS")) ? "Cash":($F{PAYMENTMODE}.equals("CQ"))? "Cheque":"Bank")e

0

Обычно я обрабатывать всю логику программирования перед передачей данных в Jasper Report Engine, но в некоторых случаях, после обработки или пост- требуется проверка. Если это сценарий, и если бы у меня было много случаев (строк) для проверки, я бы закодировал «Списку сценариев Jasper Report» и обрабатывал эту логику там (чтобы код/​​отчет читался и поддерживался, а также для повторного использования кода). Если это всего 2 или 3 строки для проверки, я бы использовал оператор «Тернар».

Если вы хотите использовать скрипт отчета, создайте класс сценария (или используйте существующий), введите код для обработки этой логики (пример: метод checkString) и поместите $ P {REPORT_SCRIPTLET} .checkString (someString) в выражении TextField.

Смежные вопросы