Il est possible d'utiliser l'exécution de plusieurs requêtes à partir d'un seul rapport en utilisant un fichier de type subDataset
et datasetRun
. Ce comportement revient à avoir un ou plusieurs sous-rapports intégrés dans un seul fichier de rapport.
Définissez un subDataset comme ceci :
<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>
Les sous-datasets peuvent avoir des paramètres, des champs, des variables et des groupes, tout comme un rapport. Chaque sous-ensemble de données peut avoir sa propre requête, et le rapport peut avoir autant de sous-ensembles de données que vous le souhaitez.
Pour utiliser un sous-dataset, vous devez définir un fichier datasetRun
. Cela ne peut se faire qu'à l'intérieur d'éléments particuliers : graphiques, tableaux croisés, tableaux et listes. Nous utiliserons une liste car elle se comporte presque exactement comme une autre bande de détail.
Ce code définit une liste qui utilise notre sous-dataset :
<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>
Quelques notes :
-
Le site jr:listContents
est analogue à un élément de bande de détail. Vous pouvez y placer presque tous les autres éléments.
-
Le site datasetRun
est semblable à un élément de sous-rapport. Il peut avoir un dataSourceExpression
ou connectionExpression
à l'intérieur, ce qui changera l'origine des données. Si aucun de ces éléments n'est présent, la source de données du rapport est utilisée.
-
Le même subDataset peut être utilisé par plusieurs datasetRuns, ce qui vous permet d'exécuter facilement une requête plusieurs fois avec des paramètres différents.
0 votes
Comment ? J'ai cherché mais je ne comprends vraiment pas.
2 votes
Je ne vois pas comment le fait de passer une requête en paramètre résout le problème. Vous êtes toujours limité à une requête par rapport.
2 votes
@Alex K. Si j'ai bien compris la question, Manuel demande comment mettre plusieurs requêtes dans un seul rapport. Pour l'instant, cela ne peut se faire qu'en utilisant des sous-ensembles de données.
0 votes
Merci pour vos commentaires. Alors, existe-t-il une méthodologie que je puisse utiliser pour écrire correctement un document jasperreport sans avoir besoin d'avoir des sous-sous-sous-rapports pour obtenir le comportement demandé.
0 votes
J'ai le même problème, pouvez-vous m'aider ? stackoverflow.com/questions/49903520/