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 :

Générer Rapport en utilisant l'API BiRT Script


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 Générer Rapport en utilisant l'API BiRT Script
    Bonjour,

    Je souhaite réaliser un rapport en utilisant l'API BiRT Script pour des raisons de maintenance.

    Je ne comprend pas très bien comment effectuer la connexion et exploiter les données, par la suite dans le fetch de ma classe héritant de ScriptedDataSetEventAdapter.

    Voici ma classe qui s'applique sur le Event Handler du rapport :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class ReportEH extends ReportEventAdapter {
    	public MainReport mrpt; //Classe perso qui définit toutes les données
     
    	public void initialize(IReportContext reportContext) {
     
    	}
     
    	public void beforeFactory(IReportDesign report, IReportContext reportContext) {
    		// TODO Auto-generated method stub
     
     
    		this.mrpt = new MainReport();
    		String contract = reportContext.getParameterDisplayText("contrat");
    		String debut = reportContext.getParameterDisplayText("dateDebut");
    		String fin = reportContext.getParameterDisplayText("dateFin");
     
    		//Connexion JDBC + instanciation d'objets me permettant de garder les données
    		try {
    			mrpt.loadExternalData("D:\\FICHIERS\\scripts\\file.csv");
    			mrpt.loadData(contract, debut, fin);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		reportContext.setGlobalVariable("mrpt", mrpt);
     
    		super.beforeFactory(report, reportContext);
    	}
    }
    Et celle ou s'effectue l'insertion dans les colonnes :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public class LoadDataEH extends ScriptedDataSetEventAdapter {
     
    	final static String PKEY = "pkey";
    	final static String CREATED = "created";
    	final static Date CREATED_TYPE = new Date();
    	final static String ISSUESTATUS = "issuestatus";
     
            public static MainReport myReport;
     
    	public void beforeOpen(IDataSetInstance dataSet,
    			IReportContext reportContext) {
     
    		this.myReport = (MainReport) reportContext.getGlobalVariable("mrpt");
     
    		super.beforeOpen(dataSet, reportContext);
    	}
     
    	public boolean describe(IDataSetInstance dataSet,
    			IScriptedDataSetMetaData metaData) {
     
    		metaData.addColumn(PKEY, PKEY.getClass());
    		metaData.addColumn(ISSUESTATUS, ISSUESTATUS.getClass());
    		metaData.addColumn(CREATED, CREATED_TYPE.getClass());
     
    		return super.describe(dataSet, metaData);
    	}
     
    	public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) {
    		try {
                            row.setColumnValue(PKEY, ((Project)myReport.getProjects().get(0)).getPname() ); 
    		} catch (ScriptException e) {
    			e.printStackTrace();
    		}
    		return super.fetch(dataSet, row);
    	}
    }
    Voici juste une simple utilisation, sauf que mon DataSet est vide et je souhaite l'alimenter avec mes données récupérées dans le loadData.

    J'ai me semble t il un problème de conception de mes classes, car je ne vois pas très bien comment m'y prendre. Bien entendu, j'ai correctement fait les liens avec les Event Handler de chacun des éléments concernés, dans le designer.

    J'ai également une autre question, est il possible d'utiliser une classe héritant de ScriptedDataSetEventAdapter sur un DataSet de type JDBC Connection ? Car j'ai cru comprendre que seul les classes héritant de ScriptedDataSetEventAdapter permettent de modifier les ligne notamment avec une instance de IUpdatableDataSetRow.

    Merci pour vos futures réponses.

  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 Non
    J'ai également une autre question, est il possible d'utiliser une classe héritant de ScriptedDataSetEventAdapter sur un DataSet de type JDBC Connection ?
    Non.

    Car j'ai cru comprendre que seul les classes héritant de ScriptedDataSetEventAdapter permettent de modifier les ligne notamment avec une instance de IUpdatableDataSetRow.

    Faux, il existe le OnFetch d'un dataset JDBC pour modifier les lignes.

  3. #3
    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
    Citation Envoyé par Stefan C Voir le message
    Faux, il existe le OnFetch d'un dataset JDBC pour modifier les lignes.
    Oui et non, sur le OnFetch tu ne peux pas forcer le changement d'une valeur d'une colonne normale. Pas de problème sur une colonne calculée.

  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
    Il faut vous mettre d'accord ^^.

    Car, en effet, seul l'instance d'une IUpdatableRow permet de modifier la valeur du DataSet, or un objet comme celui ci est disponible que dans le fetch d'un ScriptedDataSetEventAdapter.

    D'ou ma question, je ne voix pas comment peut-on modifier une valeur d'un DataSet JDBC... ?!

  5. #5
    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
    On ne peux pas !

    Il faut utiliser des Maps ou des colonnes calculées.

  6. #6
    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 Hibernate.
    Sinon on peut modifier les données en amont ( via Hibernate par exemple ). Mais ça revient un peu à faire du scripted dataset en quelques sorte.

    Je me renseigne sur le JDBC, BiM vient de soulever une limitation que je ne connaissais pas et qui me laisse un peu dubitatif.

  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
    Effectivement cela me laisse aussi perplexe, puisque cette fonctionnalité est permise lorsqu'on utilise le designer.

    En effet, considérons le cas suivant, je créé mon Data Source, puis mon Data Set (JDBC), or dans mon Data Set, sur le onFetch, il est possible de modifier les colonnes de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row['myColumn'] = traitement();
    En admettant que traitement(), retourne une valeur du même type que row['myColumn'], cela modifiera la valeur de cette dernière...

    Comment se fait il qu'il n'y ait pas d'équivalent avec le ScriptedDataSet ?

    Je souhaite également revenir à mon problème initial qui n'est toujours pas résolu. Je me suis un peu plus renseigné et j'ai mieux compris le fonctionnement, cependant j'ai encore des erreurs lié à la communication des classes (je pense).

    Mon problème est le suivant, lorsque je réalise une classe héritant de ScriptedDataSetEventAdapter qui réalise des connexion JDBC, je me retrouve avec une exception du type ClassNotFoundException, et ce lorsque je suis en mode "debug". Sinon, si je pré visualise mon rapport celui-ci m'indique un NullPointerException, normal me diriez vous car mes objets initialisés à partir des données sont null.

    Aucun problème de JAR/Libraries, le tout fonctionne normalement avec une classe Test simulant la génération d'un rapport. Mais peut être qu'en exploitant le BiRT Engine cela pose problème ?!

    Merci de m'éclairer sur ce point.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Et est ce que tu peux faire ça dans une application Java, avec l'API BIRT?

Discussions similaires

  1. Wikiloc : exemple d'utilisation des API SFR dans un script PHP
    Par hhoareau dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 22/02/2011, 11h16
  2. Wikiloc : exemple d'utilisation des API SFR dans un script PHP
    Par hhoareau dans le forum Téléchargez
    Réponses: 0
    Dernier message: 22/02/2011, 11h16
  3. Comment générer un rapport en utilisant Struts & EJB?
    Par charleydc5 dans le forum Jasper
    Réponses: 0
    Dernier message: 08/10/2010, 20h10
  4. Générer rapport fais avec Birt sous eclipse via du code java
    Par loic20h28 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/02/2009, 11h20
  5. Réponses: 0
    Dernier message: 05/09/2008, 12h12

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