Reports

Version 2.5 by Maurice Gasco on 2015/10/23 18:46

Introduction

The REQUEA platform integrates the JasperReports reporting engine.

This engine allows you to create reports as lists, graphics or detail sheets. These reports can be generated as PDF, stored in the database or sent by email.

These JasperReports reports are defined as .jrxml file. They are typically created with iReport reports design tool.

NOTE: iReport documentation is available as a book we recommend reading:

'' 'Requea provides no support, or assistance with the design of reports iReport / JasperReports' ''.

Please see the iReport documentation, purchase books published by JasperSoft, or buy service or training iReport / JasperSoft if you need it.

iReport is an open source tool developed by JasperSoft offers a number of services around its tool. Requea does not provide services around iReport paying nor free.

Installation

NOTE: Versions of iReport / JaspertReports
iReport is a tool that evolves pretty quickly. Requea actually provides integration with iReport version 4.0.1.

Integration is done as a netbeans plugin offering the following features :

- Dynapage connexion to use  HQL queries (DynapageQL) on top of Dynapage model.

- HTTP / HTTPS connexion allowing the use of a remote serveur.

To install the Dyanapage plugin:

  • Download Dynapage pglugin here: Dynapage IReport plugin
  • Download iReport 4.0.1 from JasperReports website.
  • in the Tools / Plugins menu, in the"Downloaded" tab, click on "Add Plugins..." button, select the .nbm file
  • Then select the plugin and click "Install".

VoilaCapture25.png

VoilaCapture26.png

HQL vs SQL

You can choose between 2 query langages for your reports

SQL

'''Pros''':

  • more powerful, more flexible

'''Cons''':

  • no portability between database engines (Oracle / mySQL / MSSQL)
  • SQL expressions more complicated
  • Dynapage Option labels not managed
  • You need to look into the database to discover table and columns names

HQL (Hibernate Query Language)

Pros :

  • Works with any database engine
  • Simpler expressions (specially for joins)

Cons :

Conclusion

  • Use SQL if it is a single project and you are a SQL expert
  • Use HQL if you build a product that can be used in various environment

Building a connection

Click on the Datasource button in the iReport toolbar

jsr-tool.jpg

Click "New" to create your datasource: JDBC for a SQL connection, or "Dynapage Instance" for a HQL based connection

jsr-datasource.jpg

jsr-sourceinst.jpg

Dynapage Query

When you are in the report editor(Hit "New" menu to create one), you can enter the query that will populate the report

jsr-queryl.jpg

Query language selection

For Requea Dynapage based HQL, select"Dynapage QL", not "Hibernate Query Language (HQL)"

Query

Here is a simple query example On the right, a tree view shows the available properties. Note: you need sometimes to modify the query (add / remove a character) for the list to be refreshed

png

Field selection

jsr-queryfields.jpg

References / components / extensions

Double click on a cardinality 1 reference and you can pickup properties from the referenced object.

jsr-field.jpg

List of values

For property defined with a "List of values", the returned value by default is the value stored in the database. You can "double click" on the field to access on the "title" field. You will then get the corresponding title instead of the value stored in the database.

jsr-opttitle.jpg

Using fields

Once you have selected the fields and added them with the "Add selected fields" button, you can use them in your report.

jsr-fields.jpg

Subreports

In Jasperreports, sub lists and graphics must be managed as subreports . 

Please read the iReport  documentation (JasperSoft) for further help.

Important things to know are:

  • You need to use the "SUBREPORT_DIR" parameter to manage the subreport directory in order to be ready for the deployment on the Requea server
  • The connection

Here are the steps to create a subreport.

jsr-subreport1.jpg

jsr-subreport2.jpg

jsr-subreport3.jpg

jsr-subreport4.jpg

SUBREPORT_DIR

This parameter is mandatory for the reporting engine to find the subreports when running in the Requea platform.

We advise you to always define this parameter

Put your local directory where you put your reports in order to test the report in iReport. The value will be automatically overridden when the report will be processed with the Requea platform:

jsr-subreportdir.jpg

A noter: le subreport_dir doit aussi être utilisé pour les images fixes (Propriété "Image Expression"):

jsr-subreportdir2.jpg

Déploiement sur plateforme cible

Le déploiement sur la plateforme Requea se fait par la création d'une entité "JasperReports".

Dans le menu "Design / Rapports et graphiques" lorsque vous êtes connecté comme "RequeaDev"

jsr-deploy1.jpg

jsr-deploy2.jpg

Les champs importants sont:

  • Le bundle est le bundle dans lequel le rapport sera placé.
  • Le format (par défaut, PDF)
  • Le fichier est le fichier jrxml du rapport principal
  • les sous rapports et logos doivent être uploadés
  • les paramètres. A noter la possibilité de mettre des valeurs de type ${xxx} qui seront évaluées lors de la génération du rapport.

jsr-deploy3.jpg

Génération du rapport

Les rapports peuvent être générés dans une action (sur click puis download du résultat par l'utilisateur), ou dans une opératio, ce qui permet de mettre le résultat en attachement d'un objet et donc de le stocker ou de l'envoyer via un workflow par exemple.

Dans une action

Dans une action, le rapport peut être généré en utilisant une étape de type "Print".

Par exemple, essayons d'imprimer un rapport qui contient 2 paramètres de type date à saisir par l'utilisateur.

Dans cet exemple, nous avons un rapport jrxml qui utilise les 2 paramètres de type java.util.Date: parameter1 et parameter2

jsr-deploy4.jpg

définition du rapport

Dans Design / Rapports et graphiques / Rapports Jasper, on crée un nouveau rapport:

jsr-deploy5.jpg

A noter les 2 paramètres qui sont définis : parameter1 et parameter2 et les expressions pour les valeurs (plus d'explications dans la suite)

définition de l'entité qui va permettre la saisie des paramètres

Les 2 paramètres doivent être saisis par l'utilisateur. Pour cela on crée une entitée non persistée.

jsr-deploy6.jpg

On lui ajoute 2 propriétés de type date: Param1 et Param2. Dans cet exemple, l'entité a été crée dans le bundle customisations, dont le préfixe est "cust". Le nom complet des propriétés est donc custParam1 et custParam2. D'ou le nom et la syntaxe des expressions des 2 paramètres. A adapter en fonction de vos entités.

jsr-deploy6.jpg

Puis on crée une action testPrint:

jsr-deploy8.jpg

La première étape construit un objet custTestReportParams en mémoire et le stocke dans la variable "params"

La seconde étape permet la saisie des 2 parametres par l'utilisateur de l'objet stocké dans "params"
jsr-deploy9.jpg

La 3ème étape déclache la géneration du rapport. Sa définition est la suivante:

jsr-deploy10.jpg

A noter le champs Entrée qui permet de préciser l'objet utilisé pour évaluer les expressions de valeur de paramètre (ici "params").
C'est cet objet qui servira de base au calcul des ${custParam1} défini dans l'objet "JasperReport" et dont les valeurs seront passées à JasperReports comme paramètres du rapport.

Le résultat est alors le suivant:

jsr-deploy11.jpg

jsr-deploy12.jpg

Dans une opération

Dans une opération, la génération du rapport se fait par du script:

 retrieve the report
  var report = sysReport.Get("402881ff1cbdc5aa011cbde9dfc915ac");
  
retrieve the PDF result
  var result = report.PrintReport(data);
  set the report as an attachement
  data.custFile = result.sysData;

Dans cet exemple, le rapport est attaché dans la propriété custFile de l'objet

Valorisation des paramètres dans l'appel d'opération

Les paramètres peuvent être valorisés de 2 manières:

  • soit en passant un objet en contexte. Les définitions de paramètres seront utilisées et les expressions ${xxxx} seront valorisées par rapport à cet objet.

 retrieve the PDF result
  var result = report.PrintReport(data); 
the params are calculated based on 'data'

  • soit en passant un tableau de paramètres en utilisant un objet avec une notation JSON
      retrieve the PDF result
      var params = {
                   param1:"test",
                   param2:"test2"
      }
      var result = JasperReports.Print(report, null, report.rqFormat, params); 
    the params are in params'
Tags:
Created by Pierre Dubois on 2011/10/03 07:15
     
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 9.11.5 - Documentation