IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

iReport Discussion :

Problème de transmission des paramètres vers un sub dataset


Sujet :

iReport

  1. #1
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut Problème de transmission des paramètres vers un sub dataset
    Bonjour,

    Comment peut-on transmettre un paramètre déclaré comme paramètre d'entrée d'un report, vers un DataSet ?

    J'ai eu beau déclarer des variables et des paramètres propres au DataSet mais jusqu'à présent, impossible d'obtenir la valeur d'un paramètre 'global'.

    Au sein du dataset, lorsque je créé ma requête, l'éditeur ne me propose pas les paramètres du rapport principal, uniquement ceux qui sont présents par défaut.

    Y a-t-il une solution ?

    Merci d'avance.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  2. #2
    Membre éprouvé

    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 1 253
    Points
    1 253
    Billets dans le blog
    2
    Par défaut
    Oui c'est assez puissant comme possibilité (mais lourd si tu veux retransmettre les paramètres du rapport principal au dataset) :

    un SubDataSet comporte des paramètres indépendants tout comme le DataSet principal.
    => Dans iReport, dans le panneau d'explorateur de report, tu retrouve le noeud Parameters.

    Il faut donc redéclarer les parametres.

    Ensuite à l'endroit où tu utilise ton SubDataSet (un Chart, un Crosstab...), tu as la possibilité d'affecter une expression à chaque paramètre du subdataset.

    Les champs expression sont assez souple : tu peux composer ta formule à partir de tout ce qui est diponible à cette instant (paramètres du rapport principal, field en particulier si tu es dans la bande détail...)

    Je pourrais avancer l'analogie suivante :
    Tu défini autant de SubDataSet que tu veux, un peut comme un objet. Et pour chaque utilisation tu as autant d'instance que nécessaire (au besoin avec des paramètres différents).

    Equivalent JRXML :
    Définition du SubDataSet (dataset1 avec un paramètre : parameter1):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <subDataset name="dataset1">
    	<parameter name="parameter1" class="java.lang.String"/>
    	(...)
    </subDataset>
    Dans un pieChart, utilisation du dataset1 avec la valeur du parametre1 définie (à "Test_"+valeur du paramètre type du rapport principal) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <pieDataset>
    	<dataset>
    		<datasetRun subDataset="dataset1">
    			<datasetParameter name="parameter1">
    				<datasetParameterExpression><![CDATA["Test_"+$P{type}]]></datasetParameterExpression>
    			</datasetParameter>
    			<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
    		</datasetRun>
    	</dataset>
    	(...)
    </pieDataset>

    NB : au passage, cela fonctionne exactement de la même manière lorsque tu inclus un subreport (qui lui aussi dispose de ces propres parametres qu'il faut mappé).

  3. #3
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Merci jmini,

    En fait, je viens juste de trouver ce que tu sembles vouloir expliquer (pas simple à expliquer textuellement cette histoire )

    Donc oui, ça j'avais capté qu'il fallait reporter les paramètres du rapport principal vers ceux du DataSet1 et donc faire un mapping entre ces deux "scopes".

    Ensuite effectivement, tout se passe dans le paramétrage de l'élément qui va utiliser le DataSet1, comme source de données (en l'occurrence dans mon cas c'est un Pie 3D Chart). Alors qu'au départ, je pensais que ce mapping aurait dû se faire directement entre le rapport principal et le DataSet... mais non.

    En tombant sur ce post http://jasperforge.com/plugins/espfo...&topicid=31029 j'ai compris comment devait être fait le mapping et donc que la chose était possible (déjà ça m'a soulagé).
    Par contre, une fois qu'on a compris où faire le mapping, il faut évidemment faire attention à être cohérent dans l'utilisation de ces paramètres. On a vite fait de se planter et d'inverser les paramètres du rapport principal et ceux du DataSet... De plus, lorsque l'on élabore la requête du DataSet, il faut évidemment faire référence aux paramètres mappés, ce qui empêche l'éditeur SQL de valider correctement la requête...

    Voici l'endroit, pour le Pie Chart, où j'ai fait mon mapping :



    Donc, je récapitule pour ceux qui voudraient y voir plus clair.
    Dans mon cas, j'ai deux dates 'Début' et 'Fin' pour délimiter un période.
    Ces deux paramètres sont fournis en entrée du rapport et sont utilisés pour délimiter les valeurs affichées dans le rapport principal, ainsi que dans la requête d'un DataSet utilisé comme source d'un Pie Chart :

    Paramètres (de type TimeStamp dans mon cas) du rapport principal :

    • IN_PARAM_DATE_DEB
    • IN_PARAM_DATE_FIN

    Paramètres (de type TimeStamp dans mon cas) du DataSet (DataSet1 par exemple) :

    • DATE_DEB
    • DATE_FIN

    Requête du DataSet :
    SELECT *
    FROM ...
    WHERE
    date_deb >= $P{DATE_DEB}
    AND date_fin < $P{DATE_FIN}
    Le mapping est donc à faire dans les paramètres du Pie Chart, comme indiqué dans le screenshot ci-dessus.

    Par rapport à des questions que je me suis posées, voici mes déductions :

    • Aucune initialisation des paramètres DATE_DEB et DATE_FIN n'est à faire, à partir du moment où ils sont mappés.
    • Le nom des paramètres du DataSet n'ont pas à être identiques par rapport à ceux du rapport principal (contrairement à ce que j'ai pu croire un moment et surtout ce que j'ai pu lire)
    • Inutile d'utiliser des variables, les paramètres sont suffisants.


    Bon voilà, j'ai perdu pas mal de temps à trouver cette solution, qui ne me semble vraiment pas intuitive... Profitez-en !
    Images attachées Images attachées  
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 1 253
    Points
    1 253
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Laurent.B Voir le message
    De plus, lorsque l'on élabore la requête du DataSet, il faut évidemment faire référence aux paramètres mappés, ce qui empêche l'éditeur SQL de valider correctement la requête...
    Moi j'ai l'impression que dès qu'un paramètre est introduit, l'éditeur SQL a du mal (parfois ça marche partiellement, si une valeur par défaut est fournie.
    => Ce que je fais dans ces cas là c'est d'écrire la bonne requete SQL, mais sans paramètres (soit sans clause WHERE, soit avec des valeurs arbitraire). Cela permet d'avoir les "Fieds" renseigné automatiquement par iReport.

    D'ailleurs je le signale aussi au passage (parce que je l'avais cherché):
    Pour accéder à l'éditeur SQL du subdataset, il suffit de faire un clic droit sur le

    Citation Envoyé par Laurent.B Voir le message
    Aucune initialisation des paramètres DATE_DEB et DATE_FIN n'est à faire, à partir du moment où ils sont mappés.
    Je dirais plutôt qu'ils sont initialisés au moment ou le SubDataSet est utilisé.

    A signaler également la valeur à renseigner pour la valeur des paramètres du SubDataSet est une expression : il est possible de faire une opération (ajout de valeur, ...)
    Il est aussi possible de d'utiliser dans l'expression la valeur courante d'un field ou d'une variable.

    Exemple :
    La requête principale cherche une liste de personne. Pour chaque personne on veut un graphe qui dépend de cette personne (disons le nombre d'achat par secteur).
    Disons qu'on récupère les field $F{PERSONNE_ID}, $F{PERSONNE_NOM}, $F{PERSONNE_PRENOM}.
    On paramètre le SubDataSet pour attaquer la table des achats et pour attendre comme paramètre : ACHETEUR_ID.

    Dans la bande de détail on ajoute le Chart qui va utiliser ce SubDataSet et on aura alors le mapping : ACHETEUR_ID = $F{PERSONNE_ID}.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    Très intéressant cette utilisation des dataset... Pour les personnes qui connaissent bien, je soumets un autre problème que j'espère vous pourrez résoudre...

    J'ai une table d'évènements qui contient la valeur de l'évènement et l'Id de sont type associée à un ticket créé par un client. Les valeurs que l'évènement peuvent prendre dépendent du type, on a donc:
    event => id de l'event et value de l'event, id de l'action du client
    event_ref => id de l'event (PK), description de l'event

    Je veux afficher pour un sous groupe d'évènements (ceux dont l'Id=28), les valeurs du même évènement pour des ids différents.

    J'ai donc dans mon rapport principal, fait une requête ramenant la valeur de l'évènement pour un id=28.
    Ensuite j'ai créé autant de dataset que de valeurs d'évènements pour des ids d'évènements de valeurs <> 28 en faisant une jointure sur l'action du client (en paramètre) ramenée dans la requête du rapport principal.

    Le problème est qu'à l'affichage, je veux donc les n évènements pour les ids 28 et autres ... et en fait ireport m'affiche n fois la valeur de l'evenement pour l'id 28....

    Evidemment quand je mets en place la requête pour les ids 28 et autres à chaque fois le champs retourné par l'éditeur est la même variable $F{value}.

    SI vous avez une idée... merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] [UserForm] Passer des paramètres d'un Sub vers un UserForm (et vis versa)
    Par MyKroPhone dans le forum VBA Word
    Réponses: 3
    Dernier message: 26/08/2014, 08h52
  2. Réponses: 10
    Dernier message: 30/04/2011, 15h12
  3. Réponses: 2
    Dernier message: 30/10/2008, 16h29
  4. Réponses: 2
    Dernier message: 23/05/2008, 15h06
  5. Problème avec passer des paramètres
    Par Mac2k3 dans le forum WebDev
    Réponses: 6
    Dernier message: 29/05/2007, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo