12 votes

Comment retourner la valeur de la source de données d'une table vers le rapport principal dans iReport ?

J'ai une table dans mon iReport qui a naturellement son jeu de données et j'ai une variable, qui est définie et initialisée dans le jeu de données de la table, qui renvoie une valeur (qui est certainement dans la portée de la table, pas en dehors) que je veux utiliser dans mon rapport principal qui contient la table.

Comment puis-je faire cela ou y a-t-il des alternatives ?

12voto

Petter Friberg Points 14931

La manière correcte (rapport jasper v.5/v.6) de retourner les valeurs d'un composant en utilisant subDataset est d'utiliser des variables, de définir des variables à la fois dans le rapport principal et dans les subDataset .

Exemple (retourner le nombre d'enregistrements de la table au rapport principal)

  1. Dans le rapport principal, définissez une variable

    <variable name="TABLE_COUNT" class="java.lang.Integer" resetType="None">
       <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
  2. Sur subdataset Définir une variable (dans l'exemple, une variable intégrée sera utilisée). $V{REPORT_COUNT} ).

  3. Sur datasetRun indiquer lequel subDataset variable ( fromVariable ) doit être retournée à quelle variable principale du rapport ( toVariable )

    <datasetRun subDataset="tableData" uuid="fa5df3de-f4c5-4bfc-8274-bd064e8b81e6">
       <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
       <returnValue fromVariable="REPORT_COUNT" toVariable="TABLE_COUNT"/>
    </datasetRun>

El TABLE_COUNT peut ensuite être utilisée dans le rapport principal, n'oubliez pas de définir correctement la variable evaluationTime

Afficher la valeur (dans le rapport principal)

<textField evaluationTime="Report">
    <reportElement x="0" y="0" width="100" height="20" uuid="d67ddb3e-b0cc-4fae-9e05-f40eb0f7e059"/>
    <textFieldExpression><![CDATA[$V{TABLE_COUNT}]]></textFieldExpression>
</textField>

11voto

Andrey Frunt Points 111

Si vous souhaitez obtenir des données à partir d'un ensemble de données de la table, vous pouvez effectivement le faire. J'ai trouvé une astuce pour y parvenir.

  1. Créer une VARIABLE variableMapName de type java.util.Map dans le rapport principal et l'initialiser avec l'expression new java.util.HashMap()

  2. Créer PARAMÈTRE parameterMapName de type java.util.Map dans l'ensemble des données du tableau

  3. Lier l'ensemble de données PARAMETER avec une variable du rapport principal en utilisant la méthode suivante "Editer la table source de données -> Paramètres -> Ajouter -> $P{parameterMapName} = $V{variableMapName}" (clic droit sur le tableau dans le modèle de rapport principal)

  4. Créer une variable putResult de type java.lang.String dans la source de données de la table. L'expression pour cette variable sera la suivante

$P{parameterMapName}.put("KEY", $F{fieldYouWantReturn}) + $P{parameterMapName}.put("KEY2", $F{otherFieldYouWantReturn})

Maintenant vous avez la possibilité d'utiliser les données de la source de données de la table dans le rapport principal en utilisant $V{variableMapName}.get("KEY")

C'est vraiment un sale hack, mais parfois vous n'avez pas d'autre moyen de faire quelque chose. Merci !

1voto

mdahlman Points 5700

Cela semble raisonnable... mais je ne suis pas sûr que ce soit possible. Cela pourrait être une demande d'amélioration utile.

Une alternative consiste à utiliser un sous-rapport. Tout ce qui est possible dans un tableau est possible dans un sous-rapport. Les sous-rapports ont des valeurs de retour, ce qui vous permet de renvoyer les informations dont vous avez besoin.

0voto

Gopinagh.R Points 1842

Vous ne pourrez pas renvoyer une variable du jeu de données d'une table vers le rapport principal, alors que l'inverse est possible. Une alternative peut être comme suggéré par mdahlman. Utilisez un sous-rapport à la place.

0voto

gpanzl Points 41

Vous pouvez maintenant renvoyer la valeur de l'ensemble de données d'un tableau vers le rapport principal.

Sur jasper studio 6.0.1,I J'ai trouvé une propriété nommée dataset de la table, elle a un ensemble de valeurs de retour. Mais en entrant dans le jeu, j'ai trouvé que le formulaire "configurer les valeurs de retour" est erroné, Jasper Studio se trompe avec "de variable à variable", Stuio inverse les deux variables. "de la variable" est la variable locale de la table, "à la valeur" est la variable du rapport principal. "incrementerFactoryClass=""".

J'ai testé, c'est ok, la valeur de retour est imprimée sur le rapport principal.

Le suivant est un morceau de mon jrxml.

<jr:table 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="workscore" uuid="307278bc-db98-4de2-9b50-dea5dc69b496">
                        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                        <returnValue fromVariable="returnscore" toVariable="workscore"/>
                    </datasetRun>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X