User Tools

Site Tools


wiki:epims4_1m1:developer:epwebreport

Implémentation des rapports

[A partir de la RC1]
Les rapports sont générés à l'aide de la librairie Jasper.

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.

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.

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 iReport par exemple), Pour l'intégrer il faut suivre les étapes suivantes :

  1. 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).
  2. 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.
wiki/epims4_1m1/developer/epwebreport.txt · Last modified: 2009/02/02 10:39 (external edit)