web-dev-qa-db-ja.com

単一のジャスパードキュメント内の複数のクエリ

これまで、私は常にジャスパーレポートに関する1つのことに制約されてきました。
各ドキュメントには1つのデータクエリしか記述できません。
別のクエリを作成する必要がある場合、サブレポートを作成し、必要なパラメーターを渡す必要があります。

しかし、私はそれがそれを行うための良い方法だと確信していません。

単一のジャスパードキュメントで複数のデータクエリを実行する別の方法はありますか?

47
Manuel Leduc

subDatasetdatasetRunを使用して、単一のレポートから複数のクエリを実行することができます。この動作は、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で使用できるため、異なるパラメーターを使用してクエリを複数回簡単に実行できます。

67
GenericJon