web-dev-qa-db-ja.com

テキストフィールド式のif-else-if-else

列を表示する必要があります:-送信-受信-キャンセル

「ステータス」であるDBからの値をチェックすることにより、レポート列。したがって、Statusが1の場合、send、= 2 receive、= 3はキャンセルされます。

ジャスパーレポート(?a:b)のテキストフィールド式は1つの条件のみを取ることができます。 if-elseはしごのようなものですか?

14
cherit

ネストされた三項ステートメントを使用してこれを実現できますが、面倒です。

例えば:

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

replace()メソッドを使用できますが、フィールドのクラスをStringに変更する必要があります(そうでない場合)。

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

私が好む方法は、変電所の大きなグループがある場合、または変電所が変更される可能性がある場合に、HashMapの形式で置換を使用してパラメーターを作成することです。

実行時に置換を渡すか、デフォルト値を設定できます。レポートを再コンパイルせずにマップを更新できるという利点があります。

たとえば、「risk_types」という名前のパラメーターがある場合(デフォルトの言語をgroovyとして使用)、パラメーターのデフォルト値を次のように設定します。

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

コードでは、テキストフィールド式は次のようになります(ここでrisk_typeはデータベースのルックアップフィールドです):

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

マップにないアイテムの場合、null値が返されます。テキストフィールドの式を次のように拡張します。

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

ステータスフィールドを、Beanから渡されるパラメータにします。これにより、Beanで必要な処理をすべて実行し、結果をパラメーター変数に割り当てて、レポートに渡すことができます。

4
Sean

Boolean.valueOf(!($P{accWise}.equals("AC" ) && $F{RQAC_ACCREJ}.equals("R")))は、ireportプロパティに複数の条件を与えるのに役立ちます。

1
Divya