Variables de rapport

Les variables de rapport sont des objets spéciaux construits au-dessus de l'expression de rapport.

Les variables de rapport simplifient les tâches suivantes -

  • Expressions de rapport, qui sont largement utilisées dans le modèle de rapport. Ces expressions ne peuvent être déclarées qu'une seule fois à l'aide des variables de rapport.

  • Les variables de rapport peuvent effectuer divers calculs en fonction des valeurs d'expressions correspondantes telles que le nombre, la somme, la moyenne, la plus basse, la plus élevée, la variance, etc.

Si des variables sont définies dans une conception de rapport, elles peuvent être référencées par de nouvelles variables dans les expressions. Par conséquent, l'ordre dans lequel les variables sont déclarées dans une conception de rapport est important.

Déclaration de variable

Une déclaration de variable est la suivante -

<variable name = "CityNumber" class = "java.lang.Integer" incrementType = "Group"
   incrementGroup = "CityGroup" calculation = "Count">
   <variableExpression>
      <![CDATA[Boolean.TRUE]]>
   </variableExpression>
</variable>

Comme vu ci-dessus, l'élément <variable> contient un certain nombre d'attributs. Ces attributs sont résumés ci-dessous -

L'attribut de nom

Comme pour les paramètres et les champs , l' attribut name de l'élément </variable> est obligatoire. Il permet de référencer la variable par son nom déclaré dans les expressions du rapport.

L'attribut de classe

L' attribut de classe est également obligatoire et spécifie le nom de classe pour les valeurs de variable. Sa valeur par défaut est java.lang.String . Cela peut être changé en n'importe quelle classe disponible dans le chemin de classe, à la fois au moment de la compilation du rapport et au moment du remplissage du rapport. Le moteur prend en charge la conversion de type dans les expressions de rapport pour lesquelles le jeton $ V {} est utilisé, la conversion de type manuelle n'est donc pas nécessaire.

Calcul

Cet attribut détermine - quel calcul effectuer sur la variable lors du remplissage du rapport. Les sous-sections suivantes décrivent toutes les valeurs possibles pour l'attribut de calcul de l'élément <variable>.

  • Moyenne - La valeur de la variable est la moyenne de chaque valeur non nulle de l'expression de variable. Valide pour les variables numériques uniquement.

  • Count - La valeur de la variable est le nombre d'instances non nulles de l'expression de variable.

  • First - La valeur de la variable est la valeur de la première instance de l'expression de variable. Les valeurs suivantes sont ignorées.

  • La plus élevée - La valeur de la variable est la valeur la plus élevée de l'expression de variable.

  • La plus basse - La valeur de la variable est la valeur la plus basse de l'expression de variable dans le rapport.

  • Rien - Aucun calcul n'est effectué sur la variable.

  • StandardDeviation - La valeur de la variable est l'écart type de toutes les valeurs non nulles correspondant à l'expression du rapport. Valide pour les variables numériques uniquement.

  • Somme : la valeur de la variable est la somme de toutes les valeurs non nulles renvoyées par l'expression de rapport.

  • Système - La valeur de la variable est un calcul personnalisé (calculant la valeur de cette variable vous-même, en utilisant la fonctionnalité de scriptlets de JasperReports).

  • Variance - La valeur de la variable est la variance de toutes les valeurs non nulles renvoyées par l'évaluation de l'expression de la variable de rapport.

Incrementer FactoryClass

Cet attribut détermine la classe utilisée pour calculer la valeur de la variable lors du remplissage de l'enregistrement actuel sur le rapport. La valeur par défaut serait n'importe quelle classe implémentantnet.sf.jasperreports.engine.fill.JRIncrementerFactory. La classe d'usine sera utilisée par le moteur pour instancier des objets incrémenteurs au moment de l'exécution en fonction de l' attribut de calcul défini pour la variable.

IncrementType

Cela détermine quand recalculer la valeur de la variable. Cet attribut utilise des valeurs, comme ci-dessous -

  • Colonne - La valeur de la variable est recalculée à la fin de chaque colonne.

  • Group - La valeur de la variable est recalculée lorsque le groupe spécifié par incrementGroup change.

  • Aucun - La valeur de la variable est recalculée avec chaque enregistrement.

  • Page - La valeur de la variable est recalculée à la fin de chaque page.

  • Rapport - La valeur de la variable est recalculée une fois, à la fin du rapport.

IncrementGroup

Cela détermine le nom du groupe auquel la valeur de la variable est recalculée, lorsque incrementType est Group . Cela prend le nom de tout groupe déclaré dans le modèle de rapport JRXML.

ResetType

Cela détermine quand la valeur d'une variable est réinitialisée. Cet attribut utilise des valeurs, comme ci-dessous -

  • Colonne - La valeur de la variable est réinitialisée au début de chaque colonne.

  • Group - La valeur de la variable est réinitialisée lorsque le groupe spécifié par incrementGroup change.

  • Aucun - La valeur de la variable n'est jamais réinitialisée.

  • Page - La valeur de la variable est réinitialisée au début de chaque page.

  • Rapport - La valeur de la variable est réinitialisée une seule fois, au début du rapport.

ResetGroup

Cela détermine le nom du groupe auquel la valeur de la variable est réinitialisée, lorsque resetType est Group . Les valeurs de cet attribut seraient le nom de tout groupe déclaré dans le modèle de rapport JRXML.

Variables de rapport intégrées

Il existe des variables système intégrées, prêtes à être utilisées dans les expressions, comme suit -

S.NON Nom et description de la variable
1

PAGE_NUMBER

La valeur de cette variable est son numéro de page actuel. Il peut être utilisé pour afficher à la fois le numéro de la page actuelle et le nombre total de pages en utilisant une fonction spéciale des éléments de champ de texte JasperReports, l' attribut evaluationTime .

2

COLUMN_NUMBER

Cette variable contient le numéro de colonne actuel.

3

REPORT_COUNT

Cette variable de rapport contient le nombre total d'enregistrements traités.

4

PAGE_COUNT

Cette variable contient le nombre d'enregistrements qui ont été traités lors de la génération de la page actuelle.

5

COLUMN_COUNT

Cette variable contient le nombre d'enregistrements traités lors de la génération de la colonne actuelle.

6

GroupName_COUNT

Le nom de cette variable est dérivé du nom du groupe auquel elle correspond, avec le suffixe de la séquence _COUNT. Cette variable contient le nombre d'enregistrements dans le groupe actuel.

Exemple

Ajoutons une variable (countNumber) à notre modèle de rapport existant (Chapter Report Designs ). Nous préfixerons le décompte à chaque enregistrement. Le modèle de rapport révisé (jasper_report_template.jrxml) est le suivant. Enregistrez-le dans le répertoire C: \ tools \ jasperreports-5.0.1 \ test -

<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
   "//JasperReports//DTD Report Design//EN"
   "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
   http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
   name = "jasper_report_template" pageWidth = "595"
   pageHeight = "842" columnWidth = "515"
   leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
	
   <parameter name = "ReportTitle" class = "java.lang.String"/>
   <parameter name = "Author" class = "java.lang.String"/>

   <queryString>
      <![CDATA[]]>
   </queryString>

   <field name = "country" class = "java.lang.String">
      <fieldDescription>
         <![CDATA[country]]>
      </fieldDescription>
   </field>

   <field name = "name" class = "java.lang.String">
      <fieldDescription>
         <![CDATA[name]]>
      </fieldDescription>
   </field>
   
   <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
      <variableExpression>
         <![CDATA[Boolean.TRUE]]>
      </variableExpression>
   </variable>
   
   <title>
      <band height = "70">
         
         <line>
            <reportElement x = "0" y = "0" width = "515" height = "1"/>
         </line>
			
         <textField isBlankWhenNull = "true" bookmarkLevel = "1">
            <reportElement x = "0" y = "10" width = "515" height = "30"/>
            
            <textElement textAlignment = "Center">
               <font size = "22"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{ReportTitle}]]>
            </textFieldExpression>
            
            <anchorNameExpression>
               <![CDATA["Title"]]>
            </anchorNameExpression>
         </textField>
         
         <textField isBlankWhenNull = "true">
            <reportElement  x = "0" y = "40" width = "515" height = "20"/>
            
            <textElement textAlignment = "Center">
               <font size = "10"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{Author}]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </title>

   <columnHeader>
      <band height = "23">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "3" width = "535"	height = "15"
               backcolor = "#70A9A9" />
            
            <box>
               <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
            </box>
            
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
         </staticText>
         
         <staticText>
            <reportElement x = "414" y = "3" width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
            
            <text><![CDATA[Country]]></text>
         </staticText>
         
         <staticText>
            <reportElement x = "0" y = "3" width = "136" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
            
            <text><![CDATA[Name]]></text>
         </staticText>
      
      </band>
   </columnHeader>

   <detail>
      <band height = "16">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14"
               backcolor = "#E5ECF9" />
            
            <box>
               <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
            </box>
				
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
         </staticText>
         
         <textField>
            <reportElement x = "414" y = "0" width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font size = "9" />
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{country}]]>
            </textFieldExpression>
         </textField>
         
         <textField>
            <reportElement x = "0" y = "0" width = "136" height = "15" />
            <textElement textAlignment = "Center" verticalAlignment = "Middle" />
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA["  " + String.valueOf($V{countNumber}) +"."+$F{name}]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </detail>

</jasperReport>

Les codes java pour le remplissage des rapports restent inchangés. Le contenu du fichierC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sont comme indiqué ci-dessous -

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class JasperReportFill {
   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
      String sourceFileName =
      "C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";

      DataBeanList DataBeanList = new DataBeanList();
      ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource =
      new JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();
      /**
       * Passing ReportTitle and Author as parameters
       */
      parameters.put("ReportTitle", "List of Contacts");
      parameters.put("Author", "Prepared By Manisha");

      try {
         JasperFillManager.fillReportToFile(
         sourceFileName, parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

Le contenu du fichier POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java sont comme indiqué ci-dessous -

package com.tutorialspoint;

public class DataBean {
   private String name;
   private String country;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getCountry() {
      return country;
   }

   public void setCountry(String country) {
      this.country = country;
   }
}

Le contenu du fichier C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java sont comme indiqué ci-dessous -

package com.tutorialspoint;

import java.util.ArrayList;

public class DataBeanList {
   public ArrayList<DataBean> getDataBeanList() {
      ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();

      dataBeanList.add(produce("Manisha", "India"));
      dataBeanList.add(produce("Dennis Ritchie", "USA"));
      dataBeanList.add(produce("V.Anand", "India"));
      dataBeanList.add(produce("Shrinath", "California"));

      return dataBeanList;
   }

   /**
    * This method returns a DataBean object,
    * with name and country set in it.
    */
   private DataBean produce(String name, String country) {
      DataBean dataBean = new DataBean();
      dataBean.setName(name);
      dataBean.setCountry(country);
      
      return dataBean;
   }
}

Génération de rapports

Nous compilerons et exécuterons le fichier ci-dessus en utilisant notre processus de construction ANT normal. Le contenu du fichier build.xml (enregistré sous le répertoire C: \ tools \ jasperreports-5.0.1 \ test) est indiqué ci-dessous.

Le fichier d'importation - baseBuild.xml est choisi dans le chapitre Configuration de l'environnement et doit être placé dans le même répertoire que le build.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
   
   <import file = "baseBuild.xml" />
   <target name = "viewFillReport" depends = "compile,compilereportdesing,run"
      description = "Launches the report viewer to preview
      the report stored in the .JRprint file.">
      
      <java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
         <arg value = "-F${file.name}.JRprint" />
         <classpath refid = "classpath" />
      </java>
   </target>
   
   <target name = "compilereportdesing" description = "Compiles the JXML file and
      produces the .jasper file.">
      
      <taskdef name = "jrc"
         classname = "net.sf.jasperreports.ant.JRAntCompileTask">
         <classpath refid = "classpath" />
      </taskdef>
      
      <jrc destdir = ".">
         <src>
            <fileset dir = ".">
               <include name = "*.jrxml" />
            </fileset>
         </src>
         <classpath refid = "classpath" />
      </jrc>
   
   </target>
	
</project>

Ensuite, ouvrons la fenêtre de ligne de commande et allons dans le répertoire où build.xml est placé. Enfin, exécutez la commandeant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport est la cible par défaut) comme -

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

clean-sample:
   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint

compile:
   [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
   'includeantruntime' was not set, defaulting to build.sysclasspath=last;
   set to false for repeatable builds
   [javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes

compilereportdesing:
   [jrc] Compiling 1 report design files.
   [jrc] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
   [jrc] log4j:WARN Please initialize the log4j system properly.
   [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
   for more info.
   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
   [echo] Runnin class : com.tutorialspoint.JasperReportFill
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnvironment).
   [java] log4j:WARN Please initialize the log4j system properly.

viewFillReport:
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnvironment).
   [java] log4j:WARN Please initialize the log4j system properly.

BUILD SUCCESSFUL
Total time: 18 seconds

À la suite de la compilation ci-dessus, une fenêtre JasperViewer s'ouvre comme dans l'écran ci-dessous -

Ici, nous voyons que le décompte est préfixé pour chaque enregistrement.