Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 13h07   #1
Invité régulier
 
Inscription : décembre 2010
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2010
Messages : 31
Points : 9
Points : 9
Par défaut [2.6.1] Intégrer et exporter un rapport BIRT dans un Projet Java

BIM BIM BIM !!

il n'y a que vous qui pouvez m'aider,
la je suis sensé m'adresser à la reine du BI, donc si vous n'avez pas pu m'aider, alors la je suis vraiment mal, j'ai fait le tour de tous les tuto, j'ai même parfois repris bêtement le code tel qu'il est pour que ça marche mais walou !!
portant le but est très simple comme j'ai écrit dans le titre o_O
j'ai créé un joli rapport sous BIRT, avec des graphes et des tableaux, les données sont récupérées à partir d'un serveur SQL, la connexion marche nickel, la génération en HTML est très bien, je peux du coup l'enregistrer sous format pdf.

ce que je veux alors, Miss BIM c'est de pouvoir lancer ce rapport .rptdesign et l'exporter automatiquement chaque lundi matin par exemple, le fichier pdf doir etre archivé quelque part.

bref, voici mon code, c'est presque le même dans tous les tuto mais j'arrive pas à le faire fonctionner (juste ouverture et export du rapport) :


Code :
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
import java.util.logging.Level;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IRenderOption;
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.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.RenderOption;
import org.eclipse.birt.report.engine.api.impl.RunAndRenderTask;
 
/**
* Simple BIRT Design Engine API (DEAPI) demo.
*/
 
public class ExecuteReport
{
 
public static void main( String[] args ) throws EngineException
{
    EngineConfig config = new EngineConfig();
    IReportEngine engine = null ;
 
    try{
        config.setBIRTHome( "D:\\Eclipse\\Eclipse_BIRT\\birt-runtime-2_6_1\\ReportEngine" );
        config.setLogConfig("c:/birt", Level.FINE);
        System.out.println("1");
 
        Platform.startup( config ); 
        IReportEngineFactory factory = (IReportEngineFactory) Platform
                .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
        System.out.println("2");
     engine = factory.createReportEngine( config );
        System.out.println("3");
        engine.changeLogLevel( Level.WARNING );
        System.out.println("4");
 
    }
    catch( Exception ex)
    {
        System.out.println("catch");
    }    
 
    System.out.println("5");
 
    //Open the report design
    IReportRunnable design = engine.openReportDesign("D:\\Eclipse\\Eclipse_BIRT\\workspace\\BIRT_Report\\AlarmReport.rptdesign"); 
    System.out.println("6");
 
 
    //Create task to run and render the report,
    IRunAndRenderTask task = engine.createRunAndRenderTask(design); 
    //Set parent classloader for engine
    task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, RunAndRenderTask.class.getClassLoader()); 
 
    //Set parameter values and validate
    //task.setParameterValue("Top Percentage", (new Integer(3)));;
    //task.setParameterValue("Top Count", (new Integer(5)));
    //task.validateParameters();
 
    //Save as PDF File
    IRenderOption options = new RenderOption();        
    options.setOutputFormat("pdf");
    options.setOutputFileName("c:/birt/resultat.pdf");
 
    task.setRenderOption(options);
 
    //run and render report
    task.run();
    task.close();
 
}
}
et voici l'erreur :

Citation:
1
2
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/CoreException
at org.eclipse.birt.report.engine.api.impl.ReportEngine.<init>(ReportEngine.java:110)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory$1.run(ReportEngineFactory.java:18)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory$1.run(ReportEngineFactory.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory.createReportEngine(ReportEngineFactory.java:14)
at sql.birt.connexion.ExecuteReport.main(ExecuteReport.java:40)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.CoreException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more
comme vous voyez, il affiche 1 et 2 et s'arrête au niveau de
engine = factory.createReportEngine( config );

il ne trouve pas la classe org/eclipse/core/runtime/CoreException
portant j'ai bien ajouté le org.eclipse.core.runtime.jar

effectivement le .jar que j'ai ajouté ne contient pas cette classe mais je n'arrive pas à la trouver ailleurs, savez vous comment le télécharger ce org.eclipse.core.runtime.jar svp ?

pouvez vous me filer juste un petit bout de code qui crée un ReportEngine ?

excusez moi si c'était long mais j'ai voulu bien expliquer mon problème pour gagner du temps.

versions :
Latest BIRT Report Designer Release Build: 2.6.1 ( All in One )
Latest BIRT Runtime Release Build: 2.6.1

si vous avez vu des erreurs dans mon code merci bien de me les noter

Merci Infiniment d'avance BIM pour ta réponse, et si quelqu'un d'autre peux m'aider ça sera très gentil de sa part.

Cordialement

MRB
Rammazotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 14h47   #2
Candidat au titre de Membre du Club
 
Inscription : août 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 13
Points : 14
Points : 14
EDIT

Finalement, je vois une différence,
essaye de remplacer la ligne
Code :
config.setBirthome(...);
par
Code :
config.setEngineHome(...);
FIN EDIT

Salut Rammazotti,
normalement, les jars devant être rajoutés à ton application sont ceux situés dans le répertoire <ReportEngine>/lib.
D'autres jars sont présents dans le répertoire plugins (dont celui que tu cherches org.eclipse.core.runtime_xxx.jar) mais nul besoin de les rajouter car l'engine les trouve tout seul (normalement ^^).

Ton installation du runtime est-elle correcte ? Contient-elle toujours le répertoire plugins ?

Je ne te file pas mon code, il me semble identique.

++
Nicolas
miaou_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/12/2010, 16h30   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2006
Messages : 13
Points : 11
Points : 11
J'ai récemment réalisé un programme java faisant ce que tu souhaites.
Mais avant toute chose, Miaou a raison :
Citation:
Envoyé par miaou_
Finalement, je vois une différence,
essaye de remplacer la ligne
Code :
config.setBirthome(...);
par
Code :
config.setEngineHome(...);
Mon appli gère donc des taches CRON (Basé sur Quartz), elle s'appuie sur un ou plusieurs designs, les fusionne en un seul PDF (si nécessaire ) et envoi le tout par mail (Apache Commons Email ) à une liste de destinataire.
Je ne te mettrai pas mon programme sur le forum (trop lourd, long, ...) mais je peux bien évidement t'aider sur tel ou tel étape.
N'hésites pas!
theazyfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 10h41   #4
Invité régulier
 
Inscription : décembre 2010
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2010
Messages : 31
Points : 9
Points : 9
Nicolas, tu assure mon pot, pourtant je l'ai déja fait, et avant c'était setEngineHome et non pas setBirtHome, car dans d'autre forum, ils préféraient ça, mais bon, la ça marche, merci
mais le soucis n'était pas seulement ça, car j'ai viré tout mes JARs et je n'ai importé que ceux du ReportEngine, je confirme ce que t'as dit, c'est le moteur qui les cherche, sinon, si on importe chaque JAR à part, ça embourbe la création du moteur.
Merci encore une fois Niko

theazyfa, l'histoire des mails m’intéresse beaucoup, d'ailleurs c'est logiquement la suite de mon appli
en fait, je dois créer 5 rapport, un pour chaque batiment (c'est une usine), on doit reporter toutes les alarmes du mois dernier ou de la semaine dernière, si je peux donc les coller, ces 5 rapports (5 rptdesign) et les exporter dans un seul fichier PDF et ensuite les envoyer par mail (j utilise déja un serveur Apache pour la visualisation des rapport sur internet) ça sera génial
peux tu me dire comment les coller et les envoyer STP
Merci
Rammazotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 18h27   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2006
Messages : 13
Points : 11
Points : 11
Bien sur que je vais te le dire!
et avec un plaisir non dissimulé car...
Pour une fois, c'est moi qui aide

Bon j'ai pas beaucoup de mérite... juste eu beaucoup de temps pour chercher (le dite pas a mes boss....)

je suis d'abord tomber sur cet excellent article pour combiner 2 rapports PDF en un seul.
Combine multiple birt to generate single report

Pour faire un résumé,
en gros tu génères tes rapports sous forme de OutputStream.
pour se faire, il faut fournir dans les options un outputStream :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Création des options
IRenderOption  options = new PDFRenderOption();
/Définir son format de sortie
options.setOutputFormat("pdf");
 
//Création du OutputStream pour récupérer le rapport généré
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//Ajouter aux options
options.setOutputStream(byteArrayOutputStream);
 
//Et ajouter le tout à ta tache
task.setRenderOption(options);
//et faire tourner la moulinette
task.run();
task.close();
Après tu gardes précieusement tes outputStream pour ensuite les combiner :
Code :
1
2
3
4
5
6
7
8
9
10
11
List<PdfReader> pdfReaders = new ArrayList<PdfReader>();
PdfCopyFields pdfCopyFields = new PdfCopyFields(new FileOutputStream(DESTINATION_FILE_PATH + System.getProperty("file.separator") + outputName));
for (ByteArrayOutputStream byteArrayOutputStream : byteArrayOutputStreams) {
  PdfReader pdfReader = new PdfReader(byteArrayOutputStream.toByteArray());
  pdfReaders.add(pdfReader);
}
 
for (PdfReader pdfReader : pdfReaders) {
  pdfCopyFields.addDocument(pdfReader);
}
pdfCopyFields.close();
Et hop!
tu as un joli rapport combinant tes designs !!!

Pour la partie Mail, j'ai utilisé Apache Mail.
Ca ne devrait pas te poser de soucis SAUF peut être attacher le pdf au mail.

Pour ma part j'ai pris le partie de générer le rapport et de le déposer sur le disque ( ca me permet de vérifier ) et ensuite d'associer le pdf au mail avant de l'envoyer.

Donc voici un petit bout de la partie Mail où j'associe le fichier PDF au mail
Code :
1
2
3
4
5
6
7
8
9
MimeBodyPart mbpdf = new MimeBodyPart();
//Génerer un tableau de Byte du fichier PDF
byte[] pdfData = this.convertDocToByteArray(<chemin/du/fichier/pdf>);
mbpdf.setDataHandler(new DataHandler(new ByteArrayDataSource(pdfData, "application/pdf")));
mbpdf.setFileName(<nomDu.pdf>);
//après on crée un mail multi partie
Multipart mp = new MimeMultipart();
//et on ajoute le pdf , pense a créer une partie pour ajouter un texte au mail ou autre...
mp.addBodyPart(mbpdf);
La fameuse méthode qui génère ton tableau de byte a partir de ton pdf :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private byte[] convertDocToByteArray(String sourcePath) {
 
byte[] byteArray = null;
try {
  InputStream inputStream = new FileInputStream(sourcePath);
  byteArray = new byte[inputStream.available()];
  inputStream.read(byteArray);
  inputStream.close();
  } catch (FileNotFoundException e) {
   //Fichier pdf non trouvée
  } catch (IOException e) {
  //La, c'est la loose...
  }
return byteArray;
}
Et voila, normalement t'as un programme qui génère plusieurs designs, qui les combine en un seul PDF et qui envoi le tout par mail.
Bien entendu, il manque pas mal de chose dans la partie mail notamment mais le reste n'est que détail dépendant de tes envies !

L'étape suivante est de faire un Cron (je pense ) histoire que tout ca se fasse tout seul, de facon périodique et sans que tu y penses!
Pour ca, je me suis appuyé sur Quartz mais ca, ca sera pour la prochaine fois !
theazyfa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2010, 15h01   #6
Invité régulier
 
Inscription : décembre 2010
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2010
Messages : 31
Points : 9
Points : 9
Par défaut Merci

THEAZYFA ... t'es mon sauveur
c'est exactement ce qu'il me faut, le tout dans un seul rapport, c'est tout simplement M O R T E L je peux même négocier une augmentation graçe à ça
la je vais faire en sorte que ça sera envoyé périodiquement, chaque début de semaine, je vais voir le lien sur le Quartz que tu m'a envoyé.
les mails j'en ai déjà envoyé quelques uns avant donc j'ai pas eu de soucis
mais tu m'as beaucoup aidé, MERCI !!
Je te doit un coup de main, donc n'hésite pas de le dire en cas de besoin, je peux aider aussi, parfois
Rammazotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 12h08   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2006
Messages : 13
Points : 11
Points : 11
Citation:
Envoyé par Rammazotti
je peux même négocier une augmentation graçe à ça
j'prends 10%

sinon pour Quartz, pense a faire des jobStateful ( pour éviter qu'il se déclenche si l'ancien job n'est pas fini ^^ et pense a mettre un pool supérieur à 1)
car crois moi... une fois que tes boss auront vu le rapport...
vont t'en demander plein!
sinon....
A TON SERVICE!
theazyfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h51   #8
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
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 299
Points : 8 650
Points : 8 650
(J'adore me faire remercier dans une discussion à laquelle je n'ai pas répondu (ni lue d'ailleurs), ça prouve au moins que d'autres personnes participent )
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h42   #9
Invité régulier
 
Inscription : décembre 2010
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2010
Messages : 31
Points : 9
Points : 9
Citation:
Envoyé par BiM Voir le message
(J'adore me faire remercier dans une discussion à laquelle je n'ai pas répondu (ni lue d'ailleurs), ça prouve au moins que d'autres personnes participent )
En effet, ma chère demoiselle
s'il y a des gens qui aident ds ce forum, c'est en grande partie grâce à toi (attention, je ne suis pas entrain de draguer là ) car on a presque tous commencé par un de tes tutos, donc un petit remerciement de temps en temps ça ne nous fait rien mais ça fera plaisir à la reine du BI (sur ce site au moins )
t'éloigne pas trop, j'aurai peu être besoin de toi prochainement
Rammazotti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h37.


 
 
 
 
Partenaires

Hébergement Web