Bonjour,
Je cherche le moyen d'exécuter un report qui attend un seul paramétre n fois en automatique. Savez-vous si il existe une solution ?
D'avance merci de vos réponses.
@+
Bonjour,
Je cherche le moyen d'exécuter un report qui attend un seul paramétre n fois en automatique. Savez-vous si il existe une solution ?
D'avance merci de vos réponses.
@+
Personne n'a jamais essayé de lancer le même rapport n fois ?
Je pensais au départ au cascade parameter, mais je n'abouti pas de ce côté là non plus. D'autres idées ?
Pour moi il s'agit de la génération de rapports en mode batch.
Il va sûrement falloir programmer un petit peu ...
Voilà, soit en mode batch il faut faire une petite boucle.
Soit en Java, il faut également faire une petite boucle.
Mais juste en passant par BIRT (en faisant Preview ou View as...), ce n'est pas possible et ce n'est pas prévu pour ca. Le RCP Designer et le plugin sont des outils de développement et non de production.
Merci pour ces infos, est-ce que je peux abuser et vous demander ou je pourrais trouver un exemple ?
Merci d'avance.
Bonjour,
J'ai récupéré sur le forum un exemple de lancement batch (Edition.java) fourni gracieusement par BiM que je remercie d'ailleurs.
Tout fonctionne le report est bien executé.
Maintenant deux petites questions complémentaires :
1 - A quoi sert le fichier rptDocument généré ?
2 - Puis-je afficher les documents généré ?
3 - Est-ce possible de faire du publipostage ,
Pour cette dernière question je m'explique. En fait j'ai un report qui attend un paramètre. Avec l'exécution en mode Batch tout fonctionne bien il me génére bien n document. Par contre est-ce possible de faire la même chose mais que dans un seul report ? Dites moi si c'estpas assez clair.
D'avance merci de vos réponses.
- A quoi sert le fichier rptDocument généré ?
Il s'agit d'un rapport contenant la structure et les données. Il permet de générer rapidement le rapport sous différents formats.
- Puis-je afficher les documents généré ?
Double-clic sur le fichier.
Qu'entends-tu par afficher les documents générés ?
- Est-ce possible de faire du publipostage ?
Tu peux utiliser un composant List au sein de test rapports pour itérer sur une liste d'éléments et ainsi créer un seul document.
Bonjour,
Et bien de rien.
Mais cela ne correspond pas à un lancement batch mais à un lancement en Java tout simplement Le batch, c'est de la ligne de commande.
En fait, il y a deux étapes à la génération d'un état :
- Run (Exécution) : Le run correspond à l'éxécution du rapport. En gros c'est le chargement et l'organisation des données. Il fait toutes les méthodes onPrepare et onCreate de l'édition entre autre, charge les DataSets, exécute les éléments, etc.
- Render (Rendu) : Le render correspond au rendu. En gros, les méthodes onRender sont éxécutées, les styles sont appliqués, les propriétés visibility sont prises en compte, etc.
Donc en gros on a :
- Run : rptDesign > rptDocument
- Render : rptDocument > PDF, HTML, XLS, DOC, PPT, etc.
Donc si on veut donner le rendu en HTML avec un bouton PDF sur la page par exemple. On conserve le rptDocument pour éviter de recharger toutes les données et de n'avoir à refaire que le rendu.
Pour le publipostage, je pense qu'il est mieux de rééxécuter une partie :
Code Java : 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 IReportRunnable design = engine.openReportDesign(new File(realPath, "WEB-INF/etats/" + etat + ".rptdesign").getAbsolutePath()); /* Exécution */ IRunTask runTask = engine.createRunTask(design); runTask.setLocale(langue); /* Paramètres */ for (String clef : parametres.keySet()) { runTask.setParameterValue(clef, parametres.get(clef)); } /* Publipostage */ for (String nom : publipostage) { runTask.setParameterValue("nom", nom); runTask.run(chemin+".rptdocument"); /* Récupération du rptDocument */ IReportDocument doc = engine.openReportDocument(chemin+".rptdocument"); /* Rendu */ IRenderTask renderTask = engine.createRenderTask(doc); 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 }
Un truc un peu comme ça...
Tu ne recharges alors que le ou les paramètres nécéssaires au publipostage, tu fais l'éxécution puis le rendu.
D'autre part, séparer l'éxécution et le rendu est plus efficace en terme de performances .
Personnellement, je suis dans ce cas (génération unique) et il me semble avoir constaté un léger mieux. C'est peut être uniquement psychologique mais je ne pense pas
Erwan :
Ok, pour le rptDocument, mais comment est-ce que je peux l'utiliser après ?
Pour le point 2 on oublie c'était une erreur de ma part.
pour le 3 : en fait j'ai un report contenant un dataSet qui attend 1 paramètre.
je voudrais pouvoir lui passer une liste et itérer sur la liste de paramètre et donc généré n fois le même report.
Cela tient du batch ou du petit programme java qui itére sur les paramétres, mais je voudrais tout dans le même doc.
J'ai bien noté ta proposition de faire un list dans mon rapport mais je ne vois pas du coup comment itérer sur la liste de paramètre et du coup générer n fois le même doc au sein d'un même rapport.
BiM :
Si merci j'y tiens. Effectivement c'est du java, mais bon c'est ce que je voulais dire par lancement en batch, car pour moi le java c'est ma troisième langue.
(j'ai créer un projet web à partir du plugin BIRT[2.2.2] intégré à mon Eclipse.)
Merci pour le publipostage c'est presque ce que j'étais en cours d'écrire dans ma servlet.
Comment puis-je séparer l'exécution du rendu ?
D'avance merci de vos réponses à tous les deux
L'exécution du rendu est déjà séparée dans l'exemple.
Ensuite, pour ce qui est d'itérer sur la liste de paramètres il faut créer un ScriptedDataSet (voir FAQ).
En gros, tu passes la liste de publipostage en paramètre normalement sous forme de liste ou de tableau puis tu crées un ScriptedDataSet. De là, une itération se fera comme sur n'importe quel DataSet.
Voudrais pas faire mon gros lourd, mais un ScriptedDataSet c'est pour utiliser en programmation pas côté Designer directement ?
J'ai pas trouvé trace dans la FAQ.
Suis peut-être miro.
En effet...
En fait c'est de la programmation dans le designer ou via ton appli Java directement.
Bref, l'exemple de la FAQ c'est via le designer : http://www.developpez.net/forums/sho...6&postcount=15
NB : Dans la FAQ, il n'était pas précisé qu'il s'agissait d'un ScriptedDataSet. C'est pourquoi j'ai rajouté une petite phrase d'introduction.
pardon non pas tapé
Bon, ok je viens de parcours ton poste mais je ne vois pas dans le designer ou je peux rajouter des infos sur le open ou sur le fetch.
C'est pas grave
Bon alors, tu sélectionnes ton ScriptedDataSet. Dans la partie principale du designer, tu as un onglet Script (après celui de Master Page).
Quand tu es sur ton ScriptedDataSet, dans cet onglet tu as en haut un menu déroulant avec entre autre open et fetch. C'est ces deux méthodes qu'il faut remplir.
Bon courage !
Ok parfait, désolé je connais pas encore bien l'interface.
Pour ce qui est de remplir maintenant ok.
Le truc c'est que j'ai mon DataSet qui attend un seul paramètre (un identifiant pour le moment récupéré par par autre DataSet qui fait un distinct sur une table). Bref, je demande donc à mon utilisateur de sélectionner un ou plusieurs identifiant. Donc je vais les récupérer dans mon AfterOpen, jusque là j'ai bien compris. Le truc c'est que toi dans ton exemple tu parles de la récupération immédiate des objets alors que moi, mon DataSet attend juste ce paramètre pour me retourner les données. Comprend tu ma problématique ?
D'avance un grand merci pour ton expertise.
J'ai essayé pas mal de chose avec les scripts onBeforeOpen et onfetch mais je n'aboutis pas pour le moment.
Est-ce que quelqu'un aurait une idée ?
D'avance merci.
Dans les ScriptedDataSet les méthodes onFetch et onBeforeOpen n'existent pas !
Tu n'utilises donc pas le bon type de DataSet.
Pour créer un ScriptedDataSet. Il faut d'abord créer un ScriptedDataSource (il n'y a aucun paramétrage à faire). Ensuite, il suffit de créer un nouveau DataSet, on sélectionne alors le ScriptedDataSource et on crée les colonnes. Ensuite tu peux remplir les méthodes.
Désolé de te déranger encore, mais du coup je ne vois pas comment me sortir de mon soucis. J'ai bien créer un Scripted Data Source et un Data Set basé sur le Scripted Data Source, par contre pour le reste je comprends décidément rien.
Aurais-tu par hasard un exemple ?
D'avance merci de ton aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager