2011-01-13 2 views
13

Я должен показать столбцы: - отправить - получить - отмененесли-иначе-если-то еще в текстовое поле выражения

В колонке отчета путем проверки значения из БД, которая «Статус». Поэтому, если состояние равно 1, тогда отправьте, = 2 receive, = 3 отменено.

Выражение текстового поля в отчете о яшме (? A: b) может принимать только одно условие, как я могу дать несколько условий? что-то вроде if-else-лестницы?

ответ

23

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

Например:

(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled"); 
+1

Я также сделал это несколько раз, и это нормально для трех условий ... но кто бы расшифровал его, если вы напишете 5 или более условий? – davorp

+0

спасибо, я тоже сделал это .. но, как @davorp сказал .. 3 макс. – cherit

+0

Этот ответ приводит к запаху кода. @Sean прав: Сделайте любую логику в своем компоненте, передав результат в отчет. – inanutshellus

4

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

+0

спасибо .. настройка в bean-компоненте может быть жизнеспособным решением, а не выражением в самом отчете. – cherit

7

вы можете использовать вместо() метод, но вы должны изменить класс вашего поля на строки, если это не так, EX:

$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk") 
4

Мой предпочтительный метод, чтобы создать параметр с заменами в форма HashMap, когда у вас есть большая группа подстанций или если они могут измениться.

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

Например, если вы должны были иметь параметр с именем «risk_types» (Использование языка по умолчанию, как заводной) вы бы установить значение параметра по умолчанию на что-то вроде

[1: "HIGH RISK", 2: "LOW RISK"] 

В вашем коде, вы бы есть ваше выражение поля текста, как (где risk_type находится поле поиска из базы данных):

$P{risk_types}.get($F{risk_type}) 

для элементов, отсутствующих в карте, вы получите нулевое значение, я расширяю выражение текстового поля, чтобы быть:

$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED" 
1

Boolean.valueOf(!($P{accWise}.equals("AC") && $F{RQAC_ACCREJ}.equals("R"))) полезен для предоставления нескольких условий в свойствах ireport.

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