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 :

BIRT Script Data Source


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut BIRT Script Data Source
    Bonjour à tous,

    Comme vous pouvez le constater je suis nouveau sur le forum, et il me faut mettre ne place une solution de reporting plutôt évoluée. Disons que le simple traitement record par record avec retouche de JavaScript n'est pas suffisant. C'est pourquoi j'ai opté pour une solution tout Java, j'ai suivi le petit tutoriel suivant . Ainsi aucune limite ne m'est posée et je peux créer mes propres données.

    Je me suis donc lancé, j'ai ainsi réalisé mes classes, les ai fait tourner avec un main, tout fonctionne correctement. Par la suite j'ai fait la liaison avec BIRT en créant un nouveau Data Source, puis un Data Set et en l'initialisant notamment avec l'objet Packages de JavaScript.

    Mon problème arrive maintenant, lorsque je visualise les résultats du Data Set dans la fenêtre de dialogue de celui-ci, impeccable, les résultats sont corrects. Mais lorsque je génère le rapport après avoir fait les bonnes liaisons, mon rapport est vide !!

    Si quelqu'un aurait une idée à me proposer ?! Car la aucune erreur, aucun message, quelques warnings (mais inutiles car, ils sont liés à mes classes java...).

    J'ai également une autre question, je ne sais pas comment réaliser créer un Data Set à partir d'un fichier XML stocké sur mon système de fichier et qui ne changera jamais... Chose que je pourrais contourner avec JDOM et mes classes Java. C'est juste pour pouvoir récupérer des constantes (workflows au format xml)...

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Essaye de suivre cette version en français plus actuelle

    http://www.developpez.net/forums/m3151166-15/

    Je ne sais pas si tu as un mapping Hibernate tout ça mais il existe un connecteur pour Hibernate (qui n'est pas nativement implémenté dans BIRT).
    (lien ici : http://www.developpez.net/forums/d73...re-connecteur/)

    D'autre part, pour les fichiers XML, il existe les XML Data Source :
    http://www.developpez.net/forums/m4117666-5/

    Ensuite, si tu ne fais que récupérer quelques constantes dans ces fameux fichiers XML et que tu as du Java qui appelle le moteur BIRT, essaye de parser ton fichier XML et de passer tes données XML en paramètres :
    http://www.developpez.net/forums/m2959331-6/
    (Pour la partie Java, voir premier lien )

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Je te remercie ton tutoriel est très clair, et semblable à la solution que j'ai mis en place. Comme je l'ai dit, j'insiste sur le fait que je peux voir mes résultats dans la boite de dialogue du DataSet (onglet preview result), mais aucun record lorsque je génère mon rapport...

    Une petite question, je ne comprend comment ton objet personne peut être une liste passé en paramètre... tu es obligé de refaire un traitement au préalable en créant un nouveau paramètre ? Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Array(params["id"].value,params["nom"].value,params["prenom"].value, params["age"].value)
    Merci de m'éclairer sur cet objet, et également sur mon problème initial.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Je suis perdu, de plus ce problème est critique et il me bloque dans l'avancée de mes travaux.

    Une petite piste peut être ! J'ai vu qu'il y avait une différence entre le dataSetRow et le row, or en JavaScript nous alimentons le row['myValue'] du DataSet. Cependant lorsque je drag'n drop les colonnes de mon ScriptedDataSet, je m'aperçois que dans le tableau les variables sont des dataSetRow['myValue'] (avec clique droit sur le tableau, puis Edit Data Binding).

    Etrange non ?

    J'ai essayé de mettre les row['myValue'] dans le tableau mais rien n'y fait, une erreur survient :


    + Binding "pkey" has dependancy cycle.


    Je pense effectivement que ce doit être le comportement logique de laissé les variables dataSetRow['myValue'] dans le tableau... Mais alors pourquoi aucune occurence dans le rapport alors que dans le preview result les données sont chargées...

    PS : En ce qui concerne le fichier XML je pense savoir d'ou provient mon erreur, car je n'insère pas de XML Schema, or je pense qu'il est obligatoire, pouvez vous me confirmez cela ? Je ne me suis pas trop penché sur cette question qui est secondaire... pour le moment.

    Merci.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Me voici de nouveau, pour le même problème... Je n'ai pas eu de réponse significative, et mon problème n'est toujours pas résolu... J'ai bien regardé ton tutoriel BiM, mais il est presque identique à celui que j'ai suivi, et j'en ai très bien compris le mécanisme. De plus, je prend soin de mettre params.['nom'].value.

    Mon Data Set est bien rempli, cependant lorsque je pré visualise le rapport, le tableau est vide !!

    Mon tableau provient ni plus ni moins, du drag n drop du Data Set dans ma feuille de rapport (layout), donc les Data Binding correspondent parfaitement.

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Peux-tu joindre ton rapport au prochain message s'il te plaît ?

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Voici mon rapport, mais il fonctionne avec 5 classes, dont une qui se connecte à une BD. Celle qui se connecte à la BD et qui créé des instances des autres objets est appelée avec l'objet Packages JavaScript (MainReport).

    Merci de ton aide.

    PS : Peut être ai-je omis d'importer les autres classes ? mais je ne comprend pas pourquoi mon DataSet fonctionne bien... Le fichier ne sera pas exploitable mais au moins tu pourras vérifier l'appel à ma classe.
    Fichiers attachés Fichiers attachés

  8. #8
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Je peux aussi avoir MainReport.java et .class stp ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Oui je peux te les passer, cependant je ne peux te passer le modèle de donnée interrogé. A toi de comprendre un peu comment cela se déroule. Petit explication, les projects contiennent des issues, et les issues contiennent des stepissues.

    La méthode readData créé le vecteur de données.

    Merci encore...
    Fichiers attachés Fichiers attachés

  10. #10
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ah je ne pensais pas qu'il y avait des requêtes derrière tout ça. C'est là où je me pose la question de l'utilité du ScriptedDataSet. Enfin bref...

    As-tu essayé de faire en sorte que ta classe te renvoie déjà un jeu de données bidon ?

    Par exemple, au lieu de faire tout ton tintouin derrière, tu renvoies des données bidon. Donc quand tu fais myReport.getMyData(), tu renvoies une ArrayList comme celle ci par exemple :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList liste = new ArrayList();
    liste.add(new String[]{"Projet1", "Demande1", "Creation1", "Update1", "TMAC011", "TMAC021", "TMAC031"});
    liste.add(new String[]{"Projet2", "Demande2", "Creation2", "Update2", "TMAC012", "TMAC022", "TMAC032"});
    liste.add(new String[]{"Projet3", "Demande3", "Creation3", "Update3", "TMAC013", "TMAC023", "TMAC033"});
    liste.add(new String[]{"Projet4", "Demande4", "Creation4", "Update4", "TMAC014", "TMAC024", "TMAC034"});

    Déjà pour tester !

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Donc voilà, j'ai modifié la méthode readData() dans MainReport, j'y ai mis ton code. Cela fonctionne correctement dans le Data Set mais aussi dans le Report !!

    L'idée est de calculer des périodes, à partir des résultats de la requête, or je ne voyais pas comment procéder, pour faire un affichage sur une ligne et remanier mes colonnes... Moi aussi cela ne me convient pas !

    Voilà l'idée de rapport sur laquelle j'étais parti initialement, beaucoup moins complexe, mais ne maitrisant pas BIRT et ne trouvant pas mon bonheur, je me suis rabattu sur cette solution... Je te joins un rapport type.

    Il y a un group by sur le pname, et les durées (en l'occurrence TMAC01), sont calculées à partir des données qui sont agrégées dans le group by (et même des données pas affichées mais ce n'est pas un problème).

    Comprends tu mon soucis, qui n'est ni plus ni moins que de l'affichage ? Et le fais de passer par Java me permettais de réaliser un tableau comme je le souhaitais.

    Mais je ne voix toujours pas d'ou pourrais provenir mon problème initial, si ce n'est que BIRT ne prenne pas en compte ce genre d'utilisation (bien que cela soit légitime ^^).

    PS : Si tu as compris la problèmatique, penses tu que cela serait réalisable, si j'utilise plusieurs Data Set ?! Je crois que c'est la solution en fait un Join Data Set, un ou il y aurait les traitements et un ou l'affichage se ferait correctement.
    Images attachées Images attachées

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bon je suis revenu à quelque chose de plus simple, et j'ai réussi à répondre à mon besoin. Je suis passé par JavaScript pour créer des instances à chaque onFetch, et sur les événements BeforeOpen et BeforeClose. J'ai un peu mieux compris le fonctionnement de Java par JavaScript, et cela va me faciliter mes futurs travaux.

    Merci d'avoir consacré du temps, à ce problème qui était, je te l'accorde, un peu "farfelus" !! ^^

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2014, 03h47
  2. Réponses: 6
    Dernier message: 23/11/2010, 15h44
  3. Réponses: 3
    Dernier message: 12/03/2009, 17h26
  4. Réponses: 2
    Dernier message: 02/06/2008, 17h31
  5. [2.2.0] Scripted Data Source et Web Viewer
    Par TheDuke dans le forum BIRT
    Réponses: 7
    Dernier message: 25/07/2007, 17h14

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