Jasper-reports-jasper-create-subreports
サブレポートを作成する
サブレポートは、JasperReportsの優れた機能の1つです。 この機能により、レポートを別のレポートに組み込むことができます。つまり、あるレポートを別のレポートのサブレポートにすることができます。 サブレポートは、多くの単純なレポートを作成し、それらをマスターレポートにカプセル化できるため、レポートデザインをシンプルに保つのに役立ちます。 サブレポートは、通常のレポートと同様にコンパイルされ、入力されます。 (レポートテンプレートの)内部で何も変更せずに、任意のレポートテンプレートを別のレポートテンプレートに組み込むと、サブレポートとして使用できます。
サブレポートは、通常のレポートテンプレートに似ています。 これらは実際には_net.sf.jasperreports.engine.JasperReport_オブジェクトであり、_net.sf.jasperreports.engine.design.JasperDesign object_をコンパイルした後に取得されます。
<subreport>要素
<subreport>要素は、サブレポートをマスターレポートに導入するときに使用されます。 以下は、<subreport> JRXML要素のサブ要素のリストです。
- <reportElement>
- <parametersMapExpression>-これは、レポートパラメーターを含むマップをサブレポートに渡すために使用されます。 マップは通常、マスターレポートのパラメーターから取得するか、組み込みのREPORTS_PARAMETERS_MAPパラメーターを使用して親レポートのパラメーターをサブレポートに渡します。 この式は、キーがパラメーターである_java.util.Map_オブジェクトを常に返す必要があります 名前
- <subreportParameter>-この要素は、パラメータをサブレポートに渡すために使用されます。 _name_属性がありますが、これは必須です。
- <connectionExpression>-これは、_java.sql.Connection_をサブレポートに渡すために使用されます。 これは、レポート入力段階でサブレポートテンプレートにデータベース接続が必要な場合にのみ使用されます。
- <dataSourceExpression>-これは、データソースをサブレポートに渡すために使用されます。 通常、このデータソースは、マスターレポートのパラメーターから取得するか、組み込みのREPORT_DATA_SOURCEパラメーターを使用して親レポートのデータソースをサブレポートに渡します。
- 要素(connectionExpressionおよびdataSourceExpression)は、<subreport>要素宣言に同時に存在することはできません。 これは、データソースとサブレポートへの接続の両方を提供できないためです。 それらの1つを決定し、それに固執しなければなりません。
- <returnValue>-これは、サブレポートの変数の1つの値をマスターレポートの変数の1つに割り当てるために使用されます。 このサブ要素には、次のような属性があります-
- subreportVariable-この属性は、値が返されるサブレポート変数の名前を指定します。
- toVariable-この属性は、サブレポートの値で値がコピー/インクリメントされる親レポート変数の名前を指定します。
- calculation-この属性は値をとることができます:Nothing、Count、DistinctCount、Sum、Average、Lowest、Highest、StandardDeviation、Variance。 属性_calculation_のデフォルト値は「Nothing」です。
- incrementerFactoryClass-この属性は、増分インスタンスを作成するためのファクトリクラスを指定します。
- <subreportExpression>-これは、サブレポートのコンパイル済みレポートテンプレートの場所を示します。 この要素には class 属性があります。 _class_属性は、java.lang.String、java.io.File、java.net.URL、java.io.InputStream、net.sf.jasperreports.engine.JasperReportのいずれかの値を取ることができます。 デフォルト値は_java.lang.String_です。
- isUsingCache-これは<subreport>要素の属性です。 これはブール値です。_true_に設定すると、レポートエンジンは、指定されたソースを使用して、以前にロードされたサブレポートテンプレートオブジェクトを認識しようとします。 このキャッシュ機能は、ファイル名、URL、またはクラスパスリソースを表すjava.lang.Stringオブジェクトをサブレポートテンプレートソースとして返す式を持つサブレポート要素でのみ使用できます。
例
簡単な例を取り上げて、JRDataSourceを使用したサブレポートの作成を示します。 最初にサブレポートとマスターレポートの2つの新しいレポートテンプレートを作成しましょう。 サブレポート(address_report_template.jrxml)テンプレートの内容は次のとおりです。 C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します。
データソースを使用するため、以下に示すように、対応するPOJOファイル SubReportBean.java を記述する必要があります。 それをディレクトリC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguidesに保存します-
ここでは、2つのフィールド_'cityおよびstreet'_を宣言し、それぞれのgetterおよびsetterメソッドが定義されています。
それでは、既存の DataBean ファイルを更新しましょう。 新しいフィールド_subReportBeanList_を追加します。これはjava.util.Listです。 このフィールドには、SubReportBeanオブジェクトのリストが保持されます。 ファイルDataBeanの内容は次のとおりです。 ディレクトリC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguidesに保存します。
次に、ファイルC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguides \ DataBeanList.java を更新します。 このファイルの内容は次のとおりです-
上記のファイルのメソッドproduce()では、SubReportBeanのリストを設定しています。
それでは、新しいマスターレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。 このファイルをディレクトリ C:\ tools \ jasperreports-5.0.1 \ test に保存します。 このファイルの内容は次のとおりです-
上記のテンプレートでは、サブレポートのパスを定義する新しいパラメーター「SUBREPORT_DIR」を定義しています。 ファイルDataBeanのプロパティに対応するタイプ_java.util.List、_のフィールド_subReportBeanList_を定義しました。 要素<subreport>にはサブ要素<dataSourceExpression>があります。 リスト_subReportBeanList_をJRBeanCollectionDataSourceのインスタンスに配置しました。 サブ要素<subreportExpression/>で、サブレポート名(AddressReport.jasper)を指定しました。
次に、レポートテンプレートをコンパイルして実行する新しいクラス CreateReport を作成しましょう。 ファイル C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ finddevguides \ CreateReport.java の内容は以下のとおりです-
ここで、マスターレポートテンプレートとサブレポートテンプレートの両方をコンパイルし、レポート入力用のマスターレポート(.jasper)ファイルを渡していることがわかります。
レポート生成
これで、すべてのファイルの準備が整いました。通常の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.CreateReport (viewFullReportがデフォルトのターゲットです)を実行します-
上記のコンパイルの結果、JasperViewerウィンドウが開き、以下の画面に表示されます-
ここでは、属性Name、Country、およびAddressが表示されていることがわかります。