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

BIRT Discussion :

Ne pas generer si le rapport est vide


Sujet :

BIRT

  1. #1
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut Ne pas generer si le rapport est vide
    Bonjour,

    J'ai une problématique que j'aimerai résoudre de façon générale avec Birt.
    A l'heure actuel, je génère des rapports Birt de façon quotidienne en Java.
    C'est le rapport qui porte la requête à la base de données.

    Mon problème est que Birt génère le PDF même si la requête ne renvoie aucun résultat. Ce n'est pas le comportement que je souhaite.

    J'ai identifié plusieurs solutions :
    1 - Je duplique la requête et avant de lancer la génération je vérifie qu'il y a des résultats. J'aimerai éviter cette solution : il faut maintenir deux fois la requête et elle est exécutée deux fois.

    2 - Je récupère la requête à partir du rapport, et je fais la même chose que la solution 1. La requête est exécutée deux fois, mais comme la génération se fait la nuit c'est pas si grave. Par contre, je ne sais pas récupérer la requête du rapport.

    3 - C'est Birt qui gère tout. Par contre, je ne sais pas comment je peux faire. Je n'ai pas trouvé l'option "magique".

    4 - La requête n'existe que dans le programme Java. Et je passe les résultats à Birt (là je sais faire). Cette solution m'embête un peu car le rapport n'est plus prévisualisable dans le desiger.

    Qu'est-ce que vous me conseillez ? Personnellement, je préfère la solution 3 mais je ne sais pas si c'est possible.

    Merci d'avance.
    Gronono.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Citation Envoyé par gronono Voir le message
    1 - Je duplique la requête et avant de lancer la génération je vérifie qu'il y a des résultats. J'aimerai éviter cette solution : il faut maintenir deux fois la requête et elle est exécutée deux fois.

    2 - Je récupère la requête à partir du rapport, et je fais la même chose que la solution 1. La requête est exécutée deux fois, mais comme la génération se fait la nuit c'est pas si grave. Par contre, je ne sais pas récupérer la requête du rapport.
    Tu pourrai utiliser l'intruction TOP 1 dans ta requete pour limiter les enregistrements ramenés.
    La solution 2 parait mieux mais surement plus dure.

    Citation Envoyé par gronono Voir le message
    3 - C'est Birt qui gère tout. Par contre, je ne sais pas comment je peux faire. Je n'ai pas trouvé l'option "magique".
    Ce que tu faire au mieux dans BIRT, c'est de tout cacher.
    Aussi, tu obtiendras toujours au moins une page blanche.

    Citation Envoyé par gronono Voir le message
    4 - La requête n'existe que dans le programme Java. Et je passe les résultats à Birt (là je sais faire). Cette solution m'embête un peu car le rapport n'est plus prévisualisable dans le desiger.
    C'est vrai, c'est embêttant pour développer.
    Mais c'est une bonne solution.
    Ca peut te permettre d'utiliser le résultat de ta requete du coté JAVA.
    Celà sera p-e utile un jour.

    Sûr que la solution 3 est la plus intéressante.

    Choisi bien,
    Ne pas oublier le bouton RESOLU

    Mes lois informatiques qui n'ont pas encore trouvées de contre exemple:
    - Quand on gagne d'un coté, on perd très souvent voire toujours d'un autre.
    - Il est très rare de gagner sans rien perdre.
    - Quand la solution devient trop complexe à mettre en oeuvre, c'est qu'elle ne convient pas à ce que l'on attend, voire qu'elle est tout bonnement mauvaise.

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par gronono Voir le message
    Bonjour,

    J'ai une problématique que j'aimerai résoudre de façon générale avec Birt.
    A l'heure actuel, je génère des rapports Birt de façon quotidienne en Java.
    C'est le rapport qui porte la requête à la base de données.

    Mon problème est que Birt génère le PDF même si la requête ne renvoie aucun résultat. Ce n'est pas le comportement que je souhaite.

    J'ai identifié plusieurs solutions :
    1 - Je duplique la requête et avant de lancer la génération je vérifie qu'il y a des résultats. J'aimerai éviter cette solution : il faut maintenir deux fois la requête et elle est exécutée deux fois.

    2 - Je récupère la requête à partir du rapport, et je fais la même chose que la solution 1. La requête est exécutée deux fois, mais comme la génération se fait la nuit c'est pas si grave. Par contre, je ne sais pas récupérer la requête du rapport.

    3 - C'est Birt qui gère tout. Par contre, je ne sais pas comment je peux faire. Je n'ai pas trouvé l'option "magique".

    4 - La requête n'existe que dans le programme Java. Et je passe les résultats à Birt (là je sais faire). Cette solution m'embête un peu car le rapport n'est plus prévisualisable dans le desiger.

    Qu'est-ce que vous me conseillez ? Personnellement, je préfère la solution 3 mais je ne sais pas si c'est possible.

    Merci d'avance.
    Gronono.

    Bonjour,

    Voici les certitudes :

    • La solution #3 n'existe pas
    • Ton rapport dois être utilisé en mode online et en mode batch


    Tu dois donc vérifier dans ton programme batch que ton rapport contient qqchose (que ta requête retourne qqchose dans ton cas) avant de lancer la génération ...

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Merci de vos réponses.


    Citation Envoyé par birt1976
    Tu pourrai utiliser l'instruction TOP 1 dans ta requête pour limiter les enregistrements ramenés.
    C'est quoi l'instruction TOP ? La base de données est Oracle.

    Citation Envoyé par birt1976
    La solution 2 parait mieux mais surement plus dure.
    Pas de solution pour récupérer la requête à partir du rapport ?

    Citation Envoyé par birt1976
    C'est vrai, c'est embêttant pour développer.
    Surtout que ce n'est pas un développeur qui fait les rapports.

    Citation Envoyé par birt1976
    Mais c'est une bonne solution.
    Ca peut te permettre d'utiliser le résultat de ta requete du coté JAVA.
    Celà sera p-e utile un jour.
    C'est bien que ce que je pensais. Mais j'aurais préféré la solution 3. C'est une option manquante à Birt. N'y a-t-il pas moyen en faisant du javascript dans le rapport ?
    Le batch sert uniquement à générer des rapports. Donc je ne pense pas que ce soit utile d'avoir les résultats en Java.

    Citation Envoyé par erwan.bodere
    Ton rapport dois être utilisé en mode online et en mode batch
    Non, le rapport ne sera disponible qu'en fichier PDF. Et pour le mode online, je passe toujours par le Java car la boite de dialogue des paramètres est faite pour Eclipse RCP.

    Merci bien. Je vais discuter avec le designer des rapports pour voir si c'est possible de ne pas avoir la requête dans le rapport (je peux peut-être lui fournir un outil permettant de générer le PDF pour ces tests.)

    Gronono

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Citation Envoyé par gronono Voir le message
    C'est quoi l'instruction TOP ? La base de données est Oracle.
    L'instruction TOP est une instruction SQL natif si je ne me trompe pas.
    Aussi ça doit être accessible pour toutes les bases SQL.

    En fait, ça sert à dire combien d'enregistrement tu veux obtenir dans le tas d'enregistrements que tu peux obetnir.

    Exemple:
    ---------
    select top 1 *
    from <maTable>
    where <Condition>

    Résultat:
    --------
    Ca me renvoie que le 1er enreg trouvé avec tous les champs


    Citation Envoyé par gronono Voir le message
    Pas de solution pour récupérer la requête à partir du rapport ?
    Non, et je pense que la seule solution ce serai de recherche la requête en lisant le fichier rptdesign.
    A priori, je dirai que c'est un TRES gros travail.
    MAUVAISE SOLUTION, sauf autre idée.

    Citation Envoyé par gronono Voir le message
    Surtout que ce n'est pas un développeur qui fait les rapports.
    Les PAUVRES utilisateurs

    Citation Envoyé par gronono Voir le message
    C'est bien que ce que je pensais. Mais j'aurais préféré la solution 3. C'est une option manquante à Birt. N'y a-t-il pas moyen en faisant du javascript dans le rapport ?
    Et non, tu peux faire tout le JavaScript que tu veux, tu obtiendra toujours au minimum une page blanche.
    Ou alors tu peux toujours écrire sur cette page, un message disant qu'il n'y a rien à éditer.
    Enfin, tous les outils ont leurs failles qui sont corrigés certaines fois, faut attendre.
    Ne pas oublier le bouton RESOLU

    Mes lois informatiques qui n'ont pas encore trouvées de contre exemple:
    - Quand on gagne d'un coté, on perd très souvent voire toujours d'un autre.
    - Il est très rare de gagner sans rien perdre.
    - Quand la solution devient trop complexe à mettre en oeuvre, c'est qu'elle ne convient pas à ce que l'on attend, voire qu'elle est tout bonnement mauvaise.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Sais-tu que l'on peut récupérer le jeu de données de n'importe quel composant de ton rapport : http://www.eclipse.org/birt/phoenix/...extractiontask

    Ce que tu pourrais faire :
    • Avoir un rapport avec ta requête dedans
    • Tu fais un RunTask sur ce rapport
    • Tu récupères le jeu de données et vérifies la présence de données (DataExtractionTask)
      • Si oui tu fais un RenderTask
      • Si non, tu supprimes le rptdocument

  7. #7
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Désolé de répondre si tard, mais j'étais un peu pris.

    Citation Envoyé par birt1976
    Exemple:
    ---------
    select top 1 *
    from <maTable>
    where <Condition>
    Résultat:
    --------
    Ca me renvoie que le 1er enreg trouvé avec tous les champs
    Sous Oracle, l'instruction TOP n'est pas reconnue. D'après une recherche rapide sous Google, elle le serait pour SQLServer. Sous Oracle on peut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from maTable where rownum = 1
    Citation Envoyé par erwan.bodere
    Ce que tu pourrais faire :
    • Avoir un rapport avec ta requête dedans
    • Tu fais un RunTask sur ce rapport
    • Tu récupères le jeu de données et vérifies la présence de données (DataExtractionTask)
      • Si oui tu fais un RenderTask
      • Si non, tu supprimes le rptdocument

    Exact. Je n'avais pas pensé à cette solution. Je pense que c'est la meilleure solution.

    Merci à vous tous pour votre aide.

    A+
    Gronono

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

Discussions similaires

  1. Supprimer une section dont le sous-rapport est vide
    Par n.brandt dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 25/06/2015, 13h01
  2. Réponses: 4
    Dernier message: 25/06/2013, 13h25
  3. Réponses: 1
    Dernier message: 04/02/2013, 14h22
  4. Ksh - tester si un fichier est vide ou pas?
    Par mzt.insat dans le forum Linux
    Réponses: 1
    Dernier message: 25/04/2006, 14h22
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

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