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 :

Utiliser le résultat d'une requête pour définir un dataset


Sujet :

BIRT

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Points : 9
    Points
    9
    Par défaut Utiliser le résultat d'une requête pour définir un dataset
    Bonjour à tous,
    Débutant sous Birt et Java, j'ai grand besoin de votre aide. Voici mon problème :

    J'ai créé un rapport qui présente sous forme d'arborescence un ensemble d'enregistrements dépendants hiérarchiquements.

    C'est-à-dire que ma table de données comprend les champs suivants:
    Code - Intitulé - Parent

    et les enregistrements sont liés par le champ Parent. Par exemple, la ligne 2 est enfant de la ligne 1 :
    Code Intitulé Parent
    ---------------------------
    Code1 Intitulé1
    Code2 Intitulé2 Code1

    Le rapport fonctionne bien mais je voudrais complexifier un peu la chose .
    Je voudrais que lorsqu'on saisit en paramètre d'entrée n'importe quel code, le rapport recherche le code de l'enregistrement de sommet (le parent de tous les autres) et qu'il se base sur cet enregistrement pour construire la hiérarchie.

    En fait, quelque chose de ce genre :

    On exécute de manière itérative la requête pour obtenir le parent le plus élevé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Do until ficheParent == null
       ficheSommet.setQuery("select parent from maTable where code = '" + codeSaisiEnParametre + "'");
       ficheParent = ficheSommet.get("parent")
    Loop
    Et après j'utilise le contenu de la variable ficheParent pour exécuter ma requête principale.

    La difficulté est que je ne sais pas comment rédiger ce bout de code ni où le placer (dans quelle méthode, sur une méthode du dataset ou autre, ... ?).

    J'espère avoir été clair dans mes explications...
    Pouvez vous m'aider svp ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut 2 choix
    Vous avez 2 choix.

    1. SQL : faire du SQL recursif pour trouver le 'parent'. ( Nested Loops ).
    https://postgresql.developpez.com/do...tion/francais/ pour Postgres par exemple.

    2. Java dans BIRT.

    Coder un array Java sur le OnFetch du dataset afin d'y stocker toutes les valeurs.
    Coder une petite routine pour trouver le Parent sur le BeforeFactory du rapport
    en utilisant l'array.
    Filtrer le tableau par rapport au parent trouvé dans le BeforeFactory du Tableau.

    En fonction du volume de données, privilègier l'un ou l'autre.

    Sur une grosse volumétrie , ce sera très pénalisant. Il va falloir alors denormaliser le modèle en dépliant cette table sur plusieurs colonnes supplémentaires.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Bonjour et merci pour cette réponse rapide.

    J'ai essayé de mettre en oeuvre la seconde solution mais je ne suis arrivé à rien

    Mon rapport utilise un scripted data set. Dans un premier temps j'ai essayé de stocker les données ramenées par le dataset dans un tableau pour ensuite simplement les afficher mais cela n'a pas marché.

    Voici la méthode open :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Ces 2 lignes proviennent d'un modèle tout prêt à partir duquel mon rapport est construit
    mxDataSet = MXReportDataSetProvider.create(this.getDataSource().getName(), this.getName());
    mxDataSet.open();
     
    var sqlText = new String();
    sqlText = "select pmnum, description, parent from pm where parent = 'AS10285'";
     
    mxDataSet.setQuery(sqlText);
     
    currentrow = 0;
    et la méthode fetch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if (currentrow >= totalrows) {
    	return (false);
    }
     
    var ligne_dataSet = mxDataSet.get(currentrow);
     
    var Pmnum = ligne_dataSet[0];
    var Description = ligne_dataSet[1];
    var Parent = ligne_dataSet[2];
     
    row["pmnum"] = Pmnum;	
    row["description"] = Description;	
    row["parent"] = Parent;	
     
    currentrow = currentrow + 1;
     
    return (true);
    Depuis je me casse la tête dessus sans aucun résultat .

    Je ne vois pas bien non plus comment mettre en oeuvre la suite de la solution. Pourriez m'expliquer un peu plus en détail comment faire, et éventuellement me donner un exemple ?

    Merci pour votre aide.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/06/2010, 16h38
  2. [FPDF] Utilisation du résultat d'une requête MySQL
    Par ns_deux dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/01/2009, 01h02
  3. [MySQL] Utiliser le résultat d'une requête donnant plusieurs résultats
    Par Invité dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 01/02/2008, 15h58
  4. Réponses: 2
    Dernier message: 21/09/2007, 15h12
  5. Utilisation du résultat d'une requête
    Par Manu14400 dans le forum Access
    Réponses: 1
    Dernier message: 15/10/2005, 13h01

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