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éneration d'un rapport BIRT à partir d'un code java et MySQL


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Géneration d'un rapport BIRT à partir d'un code java et MySQL
    Bonjour,
    je suis nouveau en BIRT, je veux réaliser une class Java où je génère un rapport (PDF) à partir d'un rptdesign en utilisant engine Birt.
    J'ai utilisé le Tuto: http://business-intelligence.develop...n_donnees_jdbc.
    Jusque ici tout marche bien, je génere un rapport simple qui n'utilise pas une connexion à la base de données.
    J'ai une base de données Mysql et j'ai utilisé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	IReportRunnable design = engine.openReportDesign(new File(realPath, "WEB-INF/etats/" + etat + ".rptdesign").getAbsolutePath());
    			IDataSource dataSource = design.getDesignInstance().getDataSource("ReportingDB");
    			try {
     
    				dataSource.setPrivateDriverProperty("odaDriverClass", "com.mysql.jdbc.Driver");
    				dataSource.setPrivateDriverProperty("odaURL", "jdbc:mysql://****:3306/****");
    				dataSource.setPrivateDriverProperty("odaUser", "root");
    				dataSource.setPrivateDriverProperty("odaPassword", "*****");
    			}
    			catch (ScriptException e) {
    				e.printStackTrace();
    			}
    Pour me connecter à la base de données afin de générer un rapport qui utilise une base de données.
    J'aurai cette Erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception in thread "main" java.lang.NullPointerException
    	at org.eclipse.birt.report.engine.script.internal.element.DataSource.setPrivateDriverProperty(DataSource.java:51)
    	at com.Edition.runBirt(Edition.java:106)
    	at com.Edition.main(Edition.java:161)
    La ligne: 106:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dataSource.setPrivateDriverProperty("odaDriverClass", "com.mysql.jdbc.Driver");
    Je comprend pas où est le problème!
    SVP quelqu'un a une réponse??

  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,

    Quand tu fais ça :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    IDataSource dataSource = design.getDesignInstance().getDataSource("ReportingDB");
    Tu récupères un DataSource qui existe déjà dans ton rapport. Et tu en settes les données ensuite. Dans ton cas, il semble que tu n'aies pas de DataSource et que tu veuilles le créer donc un simple get va te renvoyer null (cf NPE).

    Pour créer ou améliorer un report via Java, il vaut mieux que t'inspires de ce tuto : http://fcornolle.developpez.com/tuto...ne-api/#LV-G-3

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse;
    En fait, j'essaye d'appliquer ce qu'il y a dans le tuto, sinon comment je dois créer une Data source?? Y a t'il une classe exemple qui assure la connexion avec Mysql? car je sais même pas comment avancer suite à cette erreur!
    Voici la classe que je l'utilise:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    package com;
     
     
     
    import java.io.File;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;
     
     
    import org.eclipse.birt.core.exception.BirtException;
    import org.eclipse.birt.core.framework.Platform;
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IRenderOption;
    import org.eclipse.birt.report.engine.api.IRenderTask;
    import org.eclipse.birt.report.engine.api.IReportDocument;
    import org.eclipse.birt.report.engine.api.IReportEngine;
    import org.eclipse.birt.report.engine.api.IReportEngineFactory;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunTask;
    import org.eclipse.birt.report.engine.api.RenderOption;
    import org.eclipse.birt.report.engine.api.script.ScriptException;
    import org.eclipse.birt.report.engine.api.script.element.IDataSource;
     
     
     
     
    /**
     * Cette classe permet la génération dans n'importe quel format
     * de n'importe quelle édition.
     * Il faut d'abord l'instancier, puis l'initialiser et la lancer.
     * 
     * Si nécessaire, cette classe peut être threadée facilement.
     */
    public final class Edition {
     
    	private static Edition m_Instance = null;
    	private IReportEngine engine;
    	private String realPath;
    	private IRenderOption option;
    	private String etat;
    	private String chemin;
    	private Map<String, Object> parametres;
    	private String format;
    	private Locale langue;
     
    	/**
             * Constructeur
             * Il configure le moteur BIRT de sorte à ce qu'il puisse retrouver
             * les ressources BIRT mais également les librairies le faisant tourner
             * Il est alors démarrer avec cette configuration.
             * @throws BirtException
             */
    	Edition() throws BirtException {
    		EngineConfig config = new EngineConfig();
    		realPath = "/home/atef/workspace1.0/Reporting/WebContent";
    		config.setResourcePath(new File(realPath, "WEB-INF/classes/ressources").getAbsolutePath());
    		config.setBIRTHome(new File(realPath, "WEB-INF/ReportEngine/lib").getAbsolutePath());//endroit où se trouvent les librairies du Runtime
    		Platform.startup(config);
    		IReportEngineFactory factory = (IReportEngineFactory) Platform
    			.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
    		engine = factory.createReportEngine(config);
    		option = new RenderOption();
    	}
     
    	/**
             * Instanciation du service
             * @return l'instance en cours du service
             * @throws BirtException
             */
    	public static Edition getInstance() throws BirtException {
    		if (m_Instance == null) {
    			m_Instance = new Edition();
    		}
    		return m_Instance;
    	}
     
    	/**
             * Initialisation
             * @param etat nom du rptdesign
             * @param chemin chemin et nom du fichier de sortie
             * @param parametres paramètres à passer à l'état
             * @param format format de sortie (PDF, XLS, DOC, etc.)
             * @param langue langue de l'édition
             */
    	public void init(String etat, String chemin, Map<String, Object> parametres, String format, String langue) {
    		this.etat = etat;
    		this.chemin = chemin;
    		this.parametres = parametres;
    		this.format = format;
    		this.langue = new Locale(langue);
    	}
     
    	/**
             * Lancement de l'état
             * @throws ScriptException 
             */
    	public void runBirt(){
    		try {
    			/* Récupération du rptDesign */
    			IReportRunnable design = engine.openReportDesign(new File(realPath, "WEB-INF/etats/" + etat + ".rptdesign").getAbsolutePath());
    			IDataSource dataSource = design.getDesignInstance().getDataSource("ReportingDB");
    			try {
    				dataSource.setPrivateDriverProperty("odaDriverClass", "com.mysql.jdbc.Driver");
    				dataSource.setPrivateDriverProperty("odaURL", "jdbc:mysql://****:3306/*****");
    				dataSource.setPrivateDriverProperty("odaUser", "root");
    				dataSource.setPrivateDriverProperty("odaPassword", "****");
    			}
    			catch (ScriptException e) {
    				e.printStackTrace();
    			}
     
     
    			System.out.println("Récupération du rptDesign");
    			/* Exécution */
    			IRunTask runTask = engine.createRunTask(design);
    			System.out.println("Exécution");		
    			/* Paramètres */
    			for (String clef : parametres.keySet()) {
    				runTask.setParameterValue(clef, parametres.get(clef));
    			}
    			System.out.println("Paramètres");		
     
    			/* Langue */
    			runTask.setLocale(langue);
    			System.out.println("Langue  Chmn:"+chemin);			
    			runTask.run(chemin+".rptdocument");
     
    			/* Récupération du rptDocument */
    			IReportDocument doc = engine.openReportDocument(chemin+".rptdocument");
    		//IDataSet dat=design.getDesignInstance().getDataSet("MyData");
     
     
    			System.out.println("Récupération du rptDocument 2");	
    			/* Rendu */
    			IRenderTask renderTask = engine.createRenderTask(doc);
    			System.out.println("Rendu");		
    			option.setOutputFileName(chemin);//Nom du fichier de sortie
    			option.setOutputFormat(format);//Format du fichier de sortie
     
    			renderTask.setRenderOption(option);//Chargement du fichier
     
    			renderTask.render();//Création du fichier
    		}
    		catch (EngineException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public void destructeur() {
    		engine.destroy();
    	}
     
    	public static void main(String[] args) throws BirtException {
    		HashMap<String, Object> map = new HashMap<String, Object>();
     
    Edition e= new Edition();
    e.init("test", "test", map, "pdf", "");
    	e.runBirt();
    	}
    }
    Sinon qu'est ce que je dois modifier dans cette classe?
    Merci infiniment

  4. #4
    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
    Le plus simple serait de créer un DataSource bidon nommé ReportingDB dans ton rapport pour pouvoir le relier, mais je voudrais savoir ce que tu veux faire exactement, quel est ton but ? Parce que j'ai peur que tu mélanges tout.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Je veux réaliser une application java Web, dont l'utilisateur a une liste des rapport (rptdesign) avec des données Mysql dynamiques. Alors, je veux une classe que je la passe un rptdesign et me retourne un pdf ou xls ... (selon le choix de l'utilisateur). c'est tout .
    Ah j'ai oublié, je ne dois pas modifier le rptdesign!! car la liste est prête.
    Lorsque j’enlève la partie de DataSource du code précédent j'aurai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    org.eclipse.birt.report.engine.api.impl.ParameterValidationException: Required parameter jndiUrl is not set. (Element ID:354)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask.validateAbstractScalarParameter(EngineTask.java:786)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask.access$0(EngineTask.java:772)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask$ParameterValidationVisitor.visitScalarParameter(EngineTask.java:702)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask$ParameterVisitor.visit(EngineTask.java:1498)
    	at org.eclipse.birt.report.engine.api.impl.EngineTask.doValidateParameters(EngineTask.java:688)
    	at org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTask.java:207)
    	at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask.java:86)
    	at com.Edition.runBirt(Edition.java:119)
    	at com.Edition.main(Edition.java:151)
    J’espère que j'ai bien définie mes besoins comme ça
    Merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/03/2008, 10h54
  2. Réponses: 0
    Dernier message: 14/02/2008, 21h35
  3. Réponses: 5
    Dernier message: 11/10/2007, 13h55
  4. éxécution d'un programme à partir d'un code java
    Par mehdiing dans le forum Langage
    Réponses: 1
    Dernier message: 01/05/2007, 00h26
  5. Creer une table a partir d'un code java
    Par steph60 dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2006, 13h17

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