これまで、私は常にジャスパーレポートに関する1つのことに制約されてきました。
各ドキュメントには1つのデータクエリしか記述できません。
別のクエリを作成する必要がある場合、サブレポートを作成し、必要なパラメーターを渡す必要があります。
しかし、私はそれがそれを行うための良い方法だと確信していません。
単一のジャスパードキュメントで複数のデータクエリを実行する別の方法はありますか?
subDataset
とdatasetRun
を使用して、単一のレポートから複数のクエリを実行することができます。この動作は、1つ以上のサブレポートを1つのレポートファイルに埋め込むようなものです。
次のようなsubDatasetを定義します。
<subDataset name="dataset1">
<parameter name="someParam" class="Java.lang.String"/>
<queryString><![CDATA[SELECT column1, column2 FROM table1 WHERE column1=$P!{someParam}]]></queryString>
<field name="column1" class="Java.lang.String"/>
<field name="column2" class="Java.lang.String"/>
</subDataset>
サブデータセットには、レポートと同様に、パラメーター、フィールド、変数、およびグループを含めることができます。各サブデータセットには独自のクエリを含めることができ、レポートには必要な数のサブデータセットを含めることができます。
サブデータセットを使用するには、datasetRun
を定義する必要があります。これは、特定の要素(チャート、クロス集計、テーブル、リスト)内でのみ実行できます。リストは、他の詳細バンドとほぼ同じように動作するため、リストを使用します。
このコードは、サブデータセットを使用するリストを定義します。
<componentElement>
<reportElement x="0" y="0" width="100" height="40"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="dataset1">
<datasetParameter name="someParam"><datasetParameterExpression><![CDATA["some value for column 1"]]></datasetParameterExpression></datasetParameter>
</datasetRun>
<jr:listContents height="40">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression class="Java.lang.String"><![CDATA[$F{column1}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="20" width="100" height="20"/>
<textElement/>
<textFieldExpression class="Java.lang.String"><![CDATA[$F{column2}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
いくつかのメモ:
jr:listContents
要素は、詳細バンド要素に類似しています。他のほとんどの要素を内部に配置できます。
datasetRun
要素は、サブレポート要素によく似ています。内部にdataSourceExpression
またはconnectionExpression
を含めることができます。これにより、データの送信元が変更されます。これらのどちらも存在しない場合、レポートデータソースが使用されます。
同じsubDatasetを多くのdatasetRunsで使用できるため、異なるパラメーターを使用してクエリを複数回簡単に実行できます。