これがあなたの言っていることかどうかはわかりませんが、実際には、サブレポートのJRXMLの定義を使用から使用に変更できますString
。net.sf.jasperreports.engine.JasperReport
たとえば、サブレポートを追加すると、通常、レポートに次のパラメータが追加されます。
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\reports\\"]]
</defaultValueExpression>
</parameter>
また、サブレポート要素自体には、次のようなものが追加されます。
<subreport>
<reportElement uuid="64d21a88-9389-49f5-ba63-1f33aac5a39f" x="821" y="0" width="200" height="100"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report4_subreport1.jasper"]]></subreportExpression>
</subreport>
SUBREPORT_DIR
代わりに、コンパイルされたJasperReport
オブジェクトでintパスを渡します。したがって、パラメータを次のように変更します。
<parameter name="SUBREPORT" class="net.sf.jasperreports.engine.JasperReport" isForPrompting="false"/>
次に、サブレポート要素も:
<subreport>
<reportElement uuid="64d21a88-9389-49f5-ba63-1f33aac5a39f" x="821" y="0" width="200" height="100"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT}]]></subreportExpression>
</subreport>
次に、特定のレポートに必要なサブレポートを知るだけです。
注:これには、で実行されないという不幸な副作用がありますが、通常は、テストして回避するためにiReport
、パラメーターをaJasperReport
からString
インスタンスに交換するだけです。iReport