This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
wiki:epims4_0m2:developer:epwebreport [2008/11/24 15:32] 132.168.73.9 |
wiki:epims4_0m2:developer:epwebreport [2008/11/25 10:30] (current) 132.168.73.9 |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Implémentation des rapports ====== | ====== Implémentation des rapports ====== | ||
- | Dans eP-Web les rapports sont générés à l'aide de la librairie Jasper. | + | **[A partir de la RC1]** \\ |
+ | Les rapports sont générés à l'aide de la librairie Jasper. | ||
- | ===== Fonctionnement général ===== | + | |
+ | ===== Architecture ===== | ||
+ | Les rapports sont gérés par des classes dérivés de //GenericReportBean// (ou dans le cas de rapport "simple", sans paramètres, directement par une instance de //GenericReportBean//). Ils sont ensuite construit et mis en forme par la classe //JasperReportFactory// qui va, pour cela faire appel aux fonctionnalités de la librairie Jasper. | ||
{{:wiki:epims4_0m2:developer:epw-report-diagramme_classes.png|}} | {{:wiki:epims4_0m2:developer:epw-report-diagramme_classes.png|}} | ||
- | {{:wiki:epims4_0m2:developer:diagramme-seq-report.png|}} | + | **Fig1 : Diagramme de classes du "moteur" de génération de rapport d'eP-Web** |
+ | |||
+ | ===== Fonctionnement ===== | ||
+ | La séquence de la génération d'un rapport est le suivant : | ||
+ | * L'utilisateur, à partir d'une page JSP, lance l'export. | ||
+ | * La page communique au ReportBean voulu les paramètres nécessaires à la constitution du rapport et lance la méthode export() (ou communication avec un Managed Bean intermédiaire qui transmettras les données au Bean du rapport). | ||
+ | * La méthode export() des ReportBean va, en tout premier lieu, appeler la méthode initExport() qui va permettre de préparer et mettre en forme les paramètres (méthode vide dans le cas de //GenericReportBean//). | ||
+ | * Puis une //JasperReportFactory// est créée. la commande d'export() va lui être passée avec les paramètres suivant : | ||
+ | * //reportParameters// : une map contenant les paramètres du rapport (ex : id d'une étude, modèle d'un spectro, etc...) | ||
+ | * //format// : le format dans lequel devra être construit le rapport : Excel, PDF, HTML (voir les attributs static de //GenericReportBean//) | ||
+ | * //jasperFilePath// : le lien complet (dossier et nom du fichier) vers le fichier .jasper de description du rapport. | ||
+ | * //exporterParameters// : une map contenant des paramètres de l'exporter (ex : Faut-il mettre une feuille par page pour un document excel, noms de ces feuilles) | ||
+ | * La méthode export() de la //JasperReportFactory// va remplir le rapport (en se connectant à la base de donnée) puis vas le faire mettre au format voulu en le passant à la méthode adéquate. | ||
+ | * Une fois le rapport formaté il va être renvoyé sous la forme d'un tableau de byte (//byte[]//) qui va être attrapé par le ReportBean et encapsulé dans une réponse HTTP. Le ReportBean envoie cette réponse ainsi qu'un message JSF de succès de l'opération. | ||
+ | {{:wiki:epims4_0m2:developer:diagramme-seq-report.png|test}} | ||
+ | |||
+ | **Fig2 : Diagramme de séquence de la génération de rapport dans eP-Web** | ||
+ | |||
+ | ===== Intégration d'un nouveau rapport ===== | ||
+ | Une fois un descripteur de rapport créé (avec [[http://jasperforge.org/plugins/project/project_home.php?group_id=83|iReport]] par exemple), Pour l'intégrer il faut suivre les étapes suivantes : | ||
+ | - Recenser les paramètres nécessaires au rapport. 2 possibilités : | ||
+ | * Si il n'a besoin d'aucun paramètre pas de nouvelle classe à créer. Il utilisera directement //GenericReportBean//. | ||
+ | * Si il a besoin de paramètre. Il va falloir alors : | ||
+ | * créer un ReportBean héritant de GenericReportbean (son nom sera si possible de la forme XXXReportBean). | ||
+ | * dans le constructeur positionner l'attribut jasperFileName. | ||
+ | * lui donner les attributs et les Getter & Setter adéquats. | ||
+ | * Surcharger la méthode initExport() de //GenericReportBean// pour pouvoir renseigner les paramètres qu'il faut dans reportParameters et si besoin dans exporterParameters. Penser aussi a donner le format voulu et le nom du fichier final (reportFileName). | ||
+ | - Déclarer la classe du rapport dans le fichier faces-managed-beans.xml | ||
+ | * Si c'est un //GenericReportBean// : | ||
+ | * Dans //<managed-bean-name>// donner un nom en rapport avec ce sur quoi va porter le rapport | ||
+ | * Dans //<managed-bean-class>// donner le path de //GenericReportBean// | ||
+ | * Ajouter les //<managed-property>// suivantes : | ||
+ | * jasperFileName : le nom du fichier .jasper de description du rapport | ||
+ | * choosedFormat : le format dans lequel sera le rapport (**ATTENTION** a bien utiliser les attributs static de //GenericReportBean//) | ||
+ | * reportFileName : le nom du fichier de sortie du rapport. Si rien n'est spécifié ce sera //null//. | ||
+ | * Si c'est une nouvelle classe : | ||
+ | * Dans //<managed-bean-name>// donner le nom de la classe | ||
+ | * Dans //<managed-bean-class>// donner le path de la classe. | ||
+ | |||