|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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 :
J'ai modifié mon code de la manière suivante, mais je suis entrain de le tester. Code :
Merçi. |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : avril 2008 Messages : 1 053 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : avril 2008 Messages : 1 053 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Consultant en Business Intelligence Inscription : mai 2009 Messages : 186 ![]() |
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. |
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
|
|
#8 |
![]() ![]() Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT Inscription : janvier 2005 Messages : 7 299 ![]() |
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. |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
|
|
#10 |
![]() ![]() Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT Inscription : janvier 2005 Messages : 7 299 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com