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 03/02/2012, 10h56   #1
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Par défaut Génerer un rapport page par page

Bonjour, j'aimerais génerer une rapport page par page. je genere au préalable le rptdocument bien sûr, mais ce que j'aimerais savoir, c'est si pour le rendu, je peux utiliser un RenderTask créer une fois, ou pour chaque page, je dois créer un RenderTask à partir du ReportEngine et le fermer à la fin et puis recommencer.
Si je pose la question, c'est parceque, j'ai dans mon code utilisé un seul RenderTask, de la manière suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
     reportDocument = reportEngine.openReportDocument(documentPath);
  		HTMLRenderOption htmlOption = new HTMLRenderOption();
			htmlOption.setOutputFormat(IRenderOption.OUTPUT_FORMAT_HTML);
			htmlOption.setEmbeddable(false);
			htmlOption.setImageDirectory(session.getImageFolder());
			htmlOption.setSupportedImageFormats("PNG;GIF;JPG;BMP");
			htmlOption.setHtmlPagination(true);
			htmlOption.setMasterPageContent(true);
			htmlOption.setImageHandler(new HTMLServerImageHandler());
			htmlOption.setBaseImageURL(imageUrl);
      renderTask = reportEngine.createRenderTask(reportDocument);
			for (int j = 1; j <= pageCount; j++) {
				htmlOption.setOutputFileName(session.getReportPath(j));
				renderTask.setPageNumber(j);
				renderTask.setRenderOption(htmlOption);
				renderTask.render();
			}
    reportDocument.close();
    renderTask.close();
mais parfois dans mes logs, j'obtiens de message d'erreur inattendus lors de l'exécution de l'instruction IRenderTask.render(). J'aimerais savoir cela peut être dû à l'utilisation d'un seul IRenderTask.
J'ai modifié mon code de la manière suivante, mais je suis entrain de le tester.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
			HTMLRenderOption htmlOption = new HTMLRenderOption();
			htmlOption.setOutputFormat(IRenderOption.OUTPUT_FORMAT_HTML);
			htmlOption.setEmbeddable(false);
			htmlOption.setImageDirectory(session.getImageFolder());
			htmlOption.setSupportedImageFormats("PNG;GIF;JPG;BMP");
			htmlOption.setHtmlPagination(true);
			htmlOption.setMasterPageContent(true);
			htmlOption.setImageHandler(new HTMLServerImageHandler());
			htmlOption.setBaseImageURL(imageUrl);
			// renderTask.setLocale(ServerTools.getLocale(locale));
			for (int j = 1; j <= pageCount; j++) {
				reportDocument = reportEngine.openReportDocument(documentPath);
				renderTask = reportEngine.createRenderTask(reportDocument);
				htmlOption.setOutputFileName(session.getReportPath(j));
				renderTask.setPageNumber(j);
				renderTask.setRenderOption(htmlOption);
				renderTask.render();
				reportDocument.close();
				renderTask.close();
			}
J'aimerais avoir des observations sur ces deux méthodes.

Merçi.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h20   #2
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut besoin

Vous voulez générer les pages comment?

1 rptdocument pour chaque page? 1 pdf pour chaque page?
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h41   #3
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
je génere un seul rptdocument, mais pour le rendu, je voudrais le faire page par page, c'est un rendu en html et non en pdf
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 12h01   #4
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut ?

Le Viewer Web de BIRT fait ça nativement.

Vous voulez "paginer" dans une appli Java à la place d'une appli Web?
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 12h51   #5
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
La deuxième méthode fonctionnera à coup sûr, et la première est en effet plus suspecte, perso je n'ai pas encore rencontré d'exemples où on enchaine plusieurs "render" avec le même IRenderTask. A la limite externaliser l'ouverture et la fermeture du document en dehors de la boucle devrait fonctionner, mais n'apportera pas de gain de performance significatif, les render seront tout de même très rapides avec la 2eme méthode puisque le rptdocument est dans tous les cas créé une fois pour toutes.

Pour le reste je suis un peu surpris je rejoins l'avis de Stephan, si l'idée est d'obtenir un contenu déconnecté, un PDF serait la solution la plus simple et la plus performante. J'en déduis que tu souhaites générer les pages en une seule fois pour ne pas avoir à générer à nouveau le rptdocument si les utilisateurs naviguent d'une page à une autre dans ton appli? Si c'est le cas ça fonctionnera mais il y a peut être une meilleure solution, en reproduisant plus où moins ce que fait le web viewer: il faut garder le rptdocument courant un certain temps sur le disque, disons 20mn, avec un nom "thread safe" lié à l'identifiant de session, et générer les pages à la demande à partir de ce document.
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 23h16   #6
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Merçi de vos indications et vos conseils, mais si je génère tous les fichiers html d'un seul coup, c'est parceque c'est nécessaire pour l'application, car je ne veux pas réaliser un viewer, mais afficher le rapport en forme de diaporama dans mon application web. A intervalle régilier de temps, je dis donc re-générer les rapports pour las afficher de nouveau en diaporama.

Le soucis que j'avais donc est que j'obtenais des erreurs inattendus lorsque de l'exécution du render avec la première méthode. j'ai même posté une erreur obtenue sur ce même forum.

J'ai donc modifié mon approche pour adopté celle que je présente dans mon second exemple. J'ai lancé des tests sur le serveur et je verrais les résultats en début de semaine.

Merçi encore pour votre aide.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 08h32   #7
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
J'ai résolu mon problème,

En fait mon application faisait que deux IrenderTask pouvait utiliser le même fichier rptdocument pour générer des rapports sous le format HTML dans un même répertoire et tout cela simultanément. Ainsi donc, une exception était levée et malgré le fait que je fasse des "close" sur les IRenderTask et les rptdocuments, la mémoire n'était pas vidée. Si quelqu'un pouvait d'ailleurs me l'expliquer, j'ai hâte de l'écouter.

Merçi à tous de votre aide.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 11h25   #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
Bonjour,

Ce ne serait pas tes appels qui se chevauchent ? N'hésitent pas à faire des blocs synchronized pour éviter ce genre de problèmes.
__________________
__~{@ 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 17/02/2012, 10h18   #9
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Bonjour BiM,
En fait je travaille sur une application web. Des appels de service qui sont exécuté simultanément peuvent donc utiliser un même modèle de rapport et même génerer des rptdocument ou des rapports au format html dans des répertoires identiques. Et c'est donc cette collision qui je crois génère des exceptions. Je ne connais pas exactement la raison, mais je conjecture que il doit y avoir une perturbation qui se crée dans les flux utilisé dans le code interne de BIRT et qui mène donc aux Exceptions que je connais. Si tu as de pus précises explications, j'aimerais bien les avoir.

Merçi.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 10h57   #10
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
Ce problème est connu, certaines librairies dont BIRT dépend ne supportent pas les accès multiples, d'où des exceptions. On suggère dans ce cas de gérer une file d'attente et d'utiliser le mot clef synchronized sur les méthodes d'appel à BIRT. D'autre part, si tu veux vraiment faire plusieurs traitements simultanés, il va falloir dupliquer plusieurs fois BIRT et que tes services gèrent chacun l'accès à l'une des instances de BIRT.

L'autre soucis, si tu n'as qu'un seul service non synchronisé pour faire l'opération c'est qu'une première génération crée le rptdocument correspondant à X.rptdesign et qu'une deuxième génération fasse de même et écrase le rptdocument précédent. D'où l'important de bien synchronisé quand c'est nécessaire. Tu peux aussi donner un nom aléatoire à chaque rptdocument, ce qui peut t'éviter des écrasements.
__________________
__~{@ 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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h10.


 
 
 
 
Partenaires

Hébergement Web