最もシンプルなケースでは、JasperReports のサブレポート機能によって、同じテーブル、同じデータベースの別のテーブル、または別のデータ・ソース全体から、 レポートの各行項目の関連データを印刷できます。 より複雑なケースでは、このトピックの範囲を超えるため、このような情報については、JasperReports の資料を参照してください。
<queryString><![CDATA[SELECT * FROM ADMINISTRATOR.CUSTOMER]]></queryString> <field name="CUST_NO" class="java.lang.Integer"> </field> <field name="CUST_NAME" class="java.lang.String"> </field> <detail> <band height="100"> <subreport> <reportElement positionType="Float" mode="Opaque" x="0" y="31" width="709" height="12" isRemoveLineWhenBlank="true"/> <subreportParameter name="CURRENT_CUST"> <subreportParameterExpression><![CDATA[$F{CUST_NO}]]> </subreportParameterExpression> </subreportParameter> <connectionExpression> <![CDATA[$P{REPORT_CONNECTION}]]> </connectionExpression> <subreportExpression class="java.lang.String"> <![CDATA[new String("C:¥¥workspace¥¥report_project¥¥bin¥¥report_package¥¥ my_subreport.jasper")]]></subreportExpression> </subreport> <textField> <reportElement positionType="Float" x="57" y="11" width="304" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"> <![CDATA[$F{CUST_NO} + " " + $F{CUST_NAME}]]></textFieldExpression> </textField> </band> </detail><subreport> タグは、JasperReports にサブレポートを実行するのに必要な情報を与えます。
<parameter name="CURRENT_CUST" class="java.lang.Integer"/> <queryString><![CDATA[SELECT * FROM ADMINISTRATOR.ORDERS WHERE CUST_NO = $P{CURRENT_CUST}]]></queryString> <field name="CUST_NO" class="java.lang.Integer"> </field> <field name="INVOICE_NO" class="java.lang.Integer"> </field> <field name="ORDER_TOTAL" class="java.lang.Float"> </field> <detail> <band height="100"> <textField> <reportElement positionType="Float" x="50" y="10" width="300" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"> <![CDATA["Invoice # " + $F{INVOICE_NO} + " total: " + $F{ORDER_TOTAL}]]> </textFieldExpression> </textField> </band> </detail>パラメーター CURRENT_CUST をサブレポートに渡しても、 <parameter> タグの class= 属性を使用して、レポートにパラメーターのタイプを指示する必要があります。 次に、照会ストリングがきます (JasperReports では、ファイル内タグの順序を非常に重要視します)。 ここで、CURRENT_CUST の値を $P{CURRENT_CUST} として参照します。このフィールド名で ORDERS テーブルの列名を参照します。 <textFieldExpression> タグ内でこれを参照することができます。
これらが、サブレポートを追加するのに行う必要がある唯一の変更です。 EGL レポート・ドライバー・プログラム内のコードは変更する必要はありません。 ただし、別のデータのソースまたは複雑な計算を組み込む場合は、 レポート・ハンドラーを作成する必要があります (『EGL レポート・ハンドラーの作成』を参照してください)。
ネストされたサブレポートを作成することができます。例えば、3 番目のテーブルから各送り状の行項目を呼び出す可能性があります。 これによって、<subreport> タグ内の情報をサブレポート my_subreport.jasper に追加し、 ネストされたサブレポートの別の設計ファイルを作成することになります (my_invoice_subreport.jasper と呼ばれることがあります)。 サブレポートをネストできる深さに制限はありません。
関連タスク
EGL レポート・ハンドラーの作成
レポート設計ファイルの作成
関連リファレンス
EGL レポート・ハンドラー