Jasper-reports-jasper-report-expression
レポート表現
レポート式はJasperReportsの強力な機能であり、計算されたデータをレポートに表示できます。 計算データは、静的データではなく、レポートパラメーターまたはデータソースフィールドとして明確に渡されないデータです。 レポート式は、レポートパラメーター、フィールド、および静的データを組み合わせて構築されます。 Java言語は、デフォルトでレポート式を作成するために使用されます。 Groovyスクリプト言語、JavaScript、BeanShellスクリプトなど、レポート式用の他のスクリプト言語は、JasperReportsコンパイラーでサポートされています。
この章では、レポート式がJava言語のみを使用して記述されていることを前提に、レポート式がどのように機能するかを説明します。 JRXMLレポートテンプレートには、式を定義する要素がいくつかあります-
- <変数式>
- <initialValueExpression>
- <groupExpression>
- <printWhenExpression>
- <imageExpression>
- <textFieldExpression>
式の宣言
基本的に、すべてのレポート式はJava式であり、レポートフィールド、レポート変数、およびレポートパラメーターを参照できます。
式のフィールド参照
式でレポートフィールド参照を使用するには、以下に示すように、フィールドの名前を** $ F \ {* and } *文字シーケンスの間に配置する必要があります-
以下は、既存のJRXMLファイルからのコードの一部です(チャプターリンク:/jasper_reports/jasper_report_designs [Report Designs)]-
式の変数参照
式で変数を参照するには、以下の例に示すように、* $ V \ { and } *の間に変数の名前を入れる必要があります-
式のパラメーターリファレンス
式でパラメータを参照するには、以下の例に示すように、パラメータの名前を** $ P \ {* and } *の間に配置する必要があります-
次に、既存のJRXMLファイルのコードを示します。これは、式内のパラメーターの参照を示しています。 (チャプターリンクからのJRXML:/jasper_reports/jasper_report_designs [レポートデザイン])-
上で見たように、パラメーター、フィールド、および変数の参照は実際には実際のJavaオブジェクトです。 レポートテンプレートで作成されたパラメーター、フィールド、または変数の宣言からクラスを知ると、式のオブジェクト参照でメソッドを呼び出すこともできます。
次の例は、java.lang.Stringレポートフィールド「Name」から最初の文字を抽出して表示する方法を示しています-
式のリソースバンドルリファレンス
式でリソースを参照するには、以下の例に示すように、_ $ _を** $ R \ {* and } *の間に配置する必要があります-
ランタイム提供のロケールと_report.title_キーに基づいて、レポートテンプレートに関連付けられたリソースバンドルがロードされます。 したがって、リソースバンドルから文字列値を抽出することにより、レポートのタイトルが表示されます。 国際化の詳細については、章のリンク:/jasper_reports/jasper_Internationalization [Internationalization]を参照してください。
電卓
計算機はJasperReportsのエンティティであり、レポート入力時に式を評価し、変数またはデータセットをインクリメントします。 コンパイルプロセス中に、コンパイラによって情報が生成され、コンパイルレポートに保存されます。 この情報は、レポート入力時にnet.sf.jasperreports.engine.fill.JRCalculatorクラスのインスタンスを構築するために使用されます。
Javaソースファイルは、Javaベースのレポートコンパイラによってオンザフライで生成およびコンパイルされます。 この生成されたクラスはJRCalculatorのサブクラスであり、それをコンパイルして生成されたバイトコードはJasperReportオブジェクト内に保存されます。 このbytcodeは、レポートの入力時にロードされ、結果のクラスがインスタンス化されて、式の評価に必要な計算機オブジェクトが取得されます。
条件式
JasperReportsは、変数式を定義するときにif-elseステートメントをサポートしません。 代わりに、三項演算子 \ {cond}を使用できますか? \ {ステートメント1}:\ {ステートメント2} 。 この演算子をJava式内にネストして、複数の条件に基づいて目的の出力を取得できます。
レポートの条件式の例
既存のレポートテンプレート(チャプターリンク:/jasper_reports/jasper_report_designs [Report Designs])を変更して、フィールド国の条件式を追加してみましょう。 改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。 C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
レポート入力のJavaコードは次のとおりです。 ファイル C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguides \ JasperReportFill.java の内容は次のとおりです-
POJOファイル C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguides \ DataBean.java の内容は-
Java Beanリストに、国フィールドが空の新しいレコードを追加します。 ファイル C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguides \ DataBeanList.java の内容は次のとおりです-
レポート生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルおよび実行します。 ファイルbuild.xmlの内容(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testに保存)は以下のとおりです。
インポートファイル-baseBuild.xmlは、章のリンク:/jasper_reports/jasper_environment_setup [Environment Setup]から選択され、build.xmlと同じディレクトリに配置する必要があります。
次に、コマンドラインウィンドウを開き、build.xmlが配置されているディレクトリに移動します。 最後に、コマンド ant -Dmain-class = com.finddevguides.JasperReportFill (viewFullReportがデフォルトのターゲットです)を-として実行します
上記のコンパイルの結果、JasperViewerウィンドウが開き、以下の画面に表示されます-
ここでは、最後のレコードについて、フィールドcountryのデータを渡さなかったことがわかります。「NO COUNTRY」が印刷されています。