Skip to main content

7. Gestion des rapports Jasper

La plateforme Ontomantics permet de générer plusieurs types de rapports : les rapports Jasper, les rapports XDoc, les rapports JETT et les rapports PDF (avec l'API Ontomantics). Les rapports Jasper peuvent générer des fichiers sous différents formats (PDF, Excel, etc.) ; les rapports XDoc utilisent des fichiers au format Word Docx qu’ils remplissent avec des variables ; les rapports JETT utilisent des fichiers au format Excel qu’ils remplissent avec des variables. La génération via l'API Ontomantics n’utilise pas de fichier modèle, mais le Glisser - Déposer d’Ontomantics.

7.1 Génération de rapports Jasper

Afin de pouvoir créer une structure de PDF exploitable par Ontomantics, il faut préalablement installer Jaspersoft Studio 6, disponible à l’adresse suivante : https://community.jaspersoft.com/download-jaspersoft/community-edition/.

Ce logiciel génère des fichiers jrxml, qui peuvent être importés et exploités sous Ontomantics.

La première étape consiste à créer un rapport. Pour cela, il faut cliquer sur l’onglet fa-solid-pencil-ruler.png Conception, puis sur fa-solid-file-export.png (Gérer les rapports). L’écran suivant apparaît :

Nouveau_Rapport.png

Cliquer sur le bouton fa-solid-plus.png pour créer un rapport. Dans le champ Type, choisir JasperReports. Il est également possible de faire un clic droit sur la ligne Liste des rapports JasperReports puis sur Nouveau rapport pour créer directement un rapport Jasper. Il faut ensuite charger le fichier jrxml généré par le logiciel Jaspersoft Studio 6 :

Charger_jrxml.png

L’intérêt de ce module de la plateforme est de pouvoir synchroniser les champs (fields) de la structure du fichier jrxml avec des variables Ontomantics. Cela est possible via l’onglet Contenu.

Contenu.png

L’ensemble des champs contenus dans le jrxml est visible sur cet onglet. Chacun d’entre eux peut être rattaché à une variable, un jeu de données ou une constante Ontomantics. Les champs rattachés sont visibles sous Liste des champs liés.

Les champs sont séparés en 3 listes :

  • les champs non rattachés à une variable Ontomantics

  • les champs rattachés à une variable Ontomantics

  • les champs supprimés du rapport jrxml, anciennement détectés par la plateforme.

Les variables Ontomantics sont, elles, affectées aux comportements.

Il est impossible d’associer plus d’un jeu de données dans un rapport. En cas de besoin, il faut utiliser les sous-rapports.

7.2 Utilisation des sous-rapports

Dans le cas où il est nécessaire d’afficher plusieurs tableaux dans un même rapport, qui seront associés à des jeux de données différents, il faut créer des sous-rapports (subreport) et les insérer dans le rapport parent aux emplacements souhaités, comme dans l’image suivante :

3.png

Pour lier le sous-rapport au rapport parent, il faut sélectionner Connection type = Use a datasource expression dans les propriétés du sous-rapport qui a été inséré.

Dans le champ Data Source Expression, saisir l’expression correspondant au sous-rapport. Il existe trois types d’expressions :

  • Insertion d’un sous-rapport simple : dans ce cas, il faut saisir l’expression suivante :

    ((com.ontomantics.report.OntoJRDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("sousRapport")

    avec sousRapport qui correspond au nom du sous-rapport inséré à cet endroit.

  • Insertion d’un même sous-rapport plusieurs fois, mais avec un paramètre différent à chaque insertion. Ce cas se présente lorsque l'on veut afficher un même objet dans plusieurs tables différentes selon la catégorie de l’objet.

    Exemple : afficher tous les employés qui ont été recrutés en 2000 dans une table, ceux de 2003 dans une autre, ceux de 2006 dans une autre, etc.

    Au lieu d’avoir quatre sous-rapports différents, un seul est créé. Il ne faut remplir qu’un seul jeu de données avec tous les employés.

    L’expression à saisir dans ce cas est la suivante :

    ((com.ontomantics.report.OntoJRDataSource)$P{REPORT_DATA_SOURCE}).subDataSource($F{id}, "sousRapport", "id_user")

    Avec :

    • "id_user" qui représente le nom du field qu’il faut créer dans le sous-rapport

    • "sousRapport" qui représente le nom du sous-rapport

    • $F{id} qui représente le mot-clé qui différencie le remplissage de chaque insertion du sous-rapport.

  • Insertion d’un même sous-rapport plusieurs fois mais avec deux paramètres différents à chaque insertion. C’est le même fonctionnement que le cas précédent, à la différence près qu’il faut renseigner deux paramètres.

    ((com.ontomantics.report.OntoJRDataSource)$P{REPORT_DATA_SOURCE}).subDataSource($F{id1}, $F{id2}, "sousRapport", "id_user1", "id_user2")

7.3 Utilisation d'une image dans un rapport

Il faut préalablement créer un field de type java.io.InputStream qui pourra contenir le chemin de l’image de type files/Images, $RESOURCE_PATH}, une URL HTTP ou un identifiant de fichier (que l’utilisateur devra renseigner ensuite lui-même dans la plateforme). Puis, dans l’élément image que l’on souhaite utiliser, il faut mettre le chemin suivant dans le champ Image Expression : $F{chemin_image} (Field créé précédemment). Pour éviter les plantages en cas d’image introuvable, mettre la propriété On Error Type sur Blank ou Icon.

7.4 Options utiles

Pour étirer un champ à la verticale (passage en ligne si la chaîne de caractère est plus longue que la taille du champ), il faut sélectionner le champ en question, et activer le paramètre Stretch with Overflow.

Pour étirer une ligne verticale, il faut sélectionner dans la liste Stretch Type l’élément Relative to band height.

Pour éviter le chevauchement d’objets, il faut sélectionner dans la liste Position Type l’item Float.

Personnaliser une case en fonction de son contenu

Pour personnaliser une case en fonction du contenu, une des méthodes possibles est d’utiliser les styles conditionnels.

Un style est un ensemble de propriétés caractérisant des classes d’objets utilisées à l’intérieur d’un rapport. Un style conditionnel est un sous-ensemble d’un style conditionné par la valeur d’une expression logique : le style est appliqué si l’expression logique est vraie. Dans le cas d’un TextField affichant le field F1 dont l’utilisateur veut positionner la couleur de fond en fonction du contenu de F1 : vert si le champ est positif ou nul, et rouge dans le cas contraire. Nous supposons que le logiciel iReport NB est utilisé.

Il faut commencer par définir un nouveau style ST1 dans le rapport en allant tout en haut dans le Report Inspector et en effectuant un clic droit sur Styles et en choisissant Ajouter, puis Style. Aller dans Propriétés, modifier le nom en mettant ST1 et positionner éventuellement des éléments de styles à appliquer à la case quel que soit le contenu.

Toujours dans le Report Inspector, faire un clic droit sur le style ST1 et cliquer sur Ajouter Conditional Style. Cliquer ensuite sur Propriétés de ce nouveau style, puis définir une condition :

new Boolean( ${F1}>=0)

Positionner la propriété Backcolor à une valeur de vert grâce à la palette de couleur. Positionner éventuellement d’autres propriétés associées au fond vert.

Répéter l’étape précédente mais en définissant une condition :

new Boolean( ${F1}<0)

Et en positionnant une valeur de rouge pour la propriété Backcolor.

Ensuite, sélectionner le TextField concerné et positionner sa propriété Style à ST1.

Lors de l’exécution, le TextField aura bien comme couleur de fond la couleur définie en fonction de son contenu.

Voici le fichier template créé pour cet exemple : Téléchargement