2011-01-31 41 views
0

複雑な分岐ステートメントの最終結果に基づいてレポート内のフィールドを埋める必要があります。どのようにiReportでこれを行うのですか?レポートは、データベースの異なるフィールドにあるものに応じて異なる文字列を表示する必要があります。私は本当に複雑なSQL文を作成しますか?変数は使用しますか?iReportまたはJasperで複雑な分岐を処理する方法

したがって、例えば、

フィールドX = 1 場合はy = 1 IF Z IF X = 1 = 1 Y IF場合、Z = 1 フィールド=

を読み取る必要がある場合2 フィールドはBを読む必要があります

答えて

0

これを行う最も簡単な方法は、バッキングBeanから渡されたパラメータでフィールドを埋めることです。 jdbc接続はBean内で作成され、レポートに渡されます。必要なフィールドに比較的簡単にアクセスし、分岐結果を決定するメソッドを使用してデータを実行する必要があります。結果をパラメータに割り当て、JasperFillManager.fillReport(ファイル、パラメータ、jdbcConnection)のjasperParameter変数にレポートに渡します。

($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で

1

通常この

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

0

のような式を書き、私はジャスパーレポートエンジンにデータを渡す前に、すべてのプログラムロジックを処理しますが、いくつかのケースでは、後処理または後チェックが必要です。それがそのシナリオであり、チェックするケース(文字列)がたくさんある場合は、「Jasper Report Scriptlet」をコーディングしてそのロジックを処理します(コード/レポートは読み込み可能で保守性があり、コードの再利用も可能です)。チェックする文字列が2か3の場合は、 '3進'演算子を使用します。

スクリプトレットを使用する場合は、スクリプトレットクラスを作成するか、既存のスクリプトレットを使用し、このロジック(Ex: 'checkString'メソッド)を処理し、$ P {REPORT_SCRIPTLET} .checkString(someString )をTextFieldの式に追加します。

関連する問題