Paramètres des rapports
Les principales entrées pour remplir un rapport sont: le modèle de rapport, les paramètres et les sources de données. Ce chapitre décrira les paramètres et dans le prochain chapitre, nous discuterons des sources de données.
Les paramètres sont les références d'objet, celles-ci sont transmises lors des opérations de remplissage de rapport au moteur de rapport. Les données qui ne peuvent pas être transmises via la source de données peuvent être transmises à l'aide de paramètres. Des données telles que le nom de l'auteur, le titre du rapport, etc. peuvent être transmises via des paramètres. Un modèle JasperReports ou un modèle JRXML peut avoir zéro ou plusieurs éléments de paramètre.
Déclaration des paramètres
Déclaration des paramètres comme suit -
<parameter name = "exampleParameter" class = "java.lang.String" />
L'attribut de nom
L' attribut name de l'élément <parameter> est obligatoire. Il fait référence au paramètre dans les expressions de rapport par son nom. Le nom du paramètre doit être un seul mot. Il ne doit contenir aucun caractère spécial comme un point ou une virgule.
L'attribut de classe
L' attribut class est également obligatoire et spécifie le nom de classe des valeurs de paramètre. Sa valeur par défaut est java.lang.String . Cela peut être changé en n'importe quelle classe disponible au moment de l'exécution. Quel que soit le type d'un paramètre de rapport, le moteur se charge de transtyper les expressions de rapport dans lesquelles le jeton $ P {} est utilisé, par conséquent il n'est pas nécessaire de procéder à des transtypages manuels.
Les valeurs des paramètres du rapport sont toujours regroupées dans un objet java.util.Map, qui a le nom du paramètre comme clé. Les paramètres de rapport peuvent être utilisés dans la chaîne de requête du rapport, afin de personnaliser davantage l'ensemble de données, extrait de la base de données. Ceux-ci agissent comme des filtres dynamiques dans la requête qui fournit des données pour le rapport.
Paramètres intégrés
Voici les paramètres de rapport prédéfinis, prêts à être utilisés dans les expressions -
S.NON | Nom et description du paramètre |
---|---|
1 | REPORT_PARAMETERS_MAP Contient une carte avec tous les paramètres définis par l'utilisateur et intégrés. |
2 | REPORT_CONNECTION Cela pointe vers la classe java.sql.Connection fournie par l'utilisateur, utilisée pour les sources de données JDBC. |
3 | REPORT_DATA_SOURCE Il s'agit d'une instance fournie par l'utilisateur de JRDataSource représentant l'un des types de source de données intégrés ou défini par l'utilisateur. |
4 | REPORT_MAX_COUNT Il s'agit d'une valeur java.lang.Integer , permettant aux utilisateurs de limiter les enregistrements de la source de données. |
5 | REPORT_SCRIPTLET Cela pointe vers net.sf.jasperreports.engine.JRAbstractScriptlet et contient une instance du scriptlet de rapport fourni par l'utilisateur. |
6 | REPORT_LOCALE Il s'agit d'une instance java.util.Locale , contenant les paramètres régionaux souhaités du groupe de ressources. |
sept | REPORT_RESOURCE_BUNDLE Cela pointe vers l' objet java.util.ResourceBundle et contient des messages localisés. |
8 | REPORT_TIME_ZONE Il s'agit d'une instance java.util.TimeZone , utilisée pour le formatage de la date. |
9 | REPORT_VIRTUALIZER Il s'agit d'une instance de l' objet net.sf.jasperreports.engine.JRVirtualizer , et utilisée pour la virtualisation de page (optimiser la consommation de mémoire). |
dix | REPORT_CLASS_LOADER Il s'agit d'une instance java.lang.ClassLoader à utiliser pendant le processus de remplissage du rapport pour charger des ressources telles que des images, des polices et des modèles de sous-rapport |
11 | IS_IGNORE_PAGINATION S'il est défini sur java.lang.Boolean.TRUE, le rapport sera généré sur une longue page et le saut de page ne se produira pas. |
Exemple
Passons ReportTitle et Author au rapport (généré par JasperReportFill.java). Fichier réviséC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java est comme suit -
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 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;
}
}
Ajoutons les paramètres <ReportTitle> et <Author> à notre modèle de rapport existant (Chapter Report Designs ). Le titre et l'auteur du rapport seront affichés au début du rapport. 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>
<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[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
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 comme 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 suit -
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 indiqué dans l'écran suivant -
Ici, nous voyons que, le ReportTitle «Liste des contacts» et l'auteur «Préparé par Manisha» sont affichés au début du rapport.