2011-01-13 36 views
13

私は列を表示する必要があります。 - を送る - を受け取る - 「ステータス」であるDBからの値をチェックすることにより、レポート列でのif-else-IF-ELSEテキストフィールドの式の

をキャンセルしました。したがって、ステータスが1の場合、送信、= 2受信、= 3キャンセル。

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

答えて

23

これを達成するためにネストされた3値ステートメントを使用できますが、面倒です。例えば

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

私はこの数回も行いましたが、3つまでの条件では大丈夫ですが、5つ以上の条件を記述すると誰が解読しますか? – davorp

+0

ありがとう、私もこれを行った..しかし@davorpのように.. 3は最大です。 – cherit

+0

この答えは、確かにコード臭の原因となります。 @Seanは正しい:あなたのbean内のロジックを行い、結果をレポートに渡す。 – inanutshellus

4

は、ステータスフィールドにBeanから渡されたパラメータを確認します。そうすれば、Beanで必要な処理を行い、その結果をパラメータ変数に代入してレポートに渡すことができます。

+0

ありがとうございました。Beanの設定は、レポート自体で表現するのではなく、実行可能な解決策である可能性があります。 – cherit

7

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

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

私の好ましい方法は、に置換したパラメータを作成することです大きなグループの変電所がある場合や変わる可能性がある場合は、HashMapのフォームを使用してください。

実行時に置換を渡すことも、デフォルト値を設定することもできます。メリットは、レポートを再コンパイルせずにマップを更新できることです。例えば

あなたがあなたのコードで

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

のようなものに、パラメータのデフォルト値を設定したい「risk_types」(グルーヴィーとしてデフォルトの言語を使用して)という名前のパラメータを持っていた場合、あなたがしたいです(risk_typeは、データベースからのルックアップフィールドである。)として、あなたのテキストフィールドの発現を有する:マップに不足している項目については

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

は、あなたがnull値を取得したいが、私はあることを、テキストフィールド式を拡張:

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

Boolean.valueOf(!($P{accWise}.equals("AC") && $F{RQAC_ACCREJ}.equals("R")))は、ポート特性で複数の条件を与えるのに便利です。

関連する問題