Parámetros de informes

La entrada principal para completar un informe son: plantilla de informe, parámetros y fuentes de datos. Este capítulo describirá los parámetros y en el próximo capítulo discutiremos las fuentes de datos.

Los parámetros son las referencias de objeto, que se pasan durante las operaciones de llenado de informes al motor de informes. Los datos que no se pueden pasar a través de la fuente de datos, se pueden pasar utilizando parámetros. Los datos como el nombre del autor, el título del informe, etc. se pueden pasar a través de parámetros. Una plantilla JasperReports o una plantilla JRXML puede tener cero o más elementos de parámetro.

Declaración de parámetros

Declaración de parámetros de la siguiente manera:

<parameter name = "exampleParameter" class = "java.lang.String" />

El atributo de nombre

El atributo de nombre del elemento <parameter> es obligatorio. Hace referencia al parámetro en las expresiones del informe por su nombre. El nombre del parámetro debe ser una sola palabra. No debe contener caracteres especiales como puntos o comas.

El atributo de clase

El atributo de clase también es obligatorio y especifica el nombre de la clase para los valores de los parámetros. Su valor predeterminado es java.lang.String . Esto se puede cambiar a cualquier clase disponible en tiempo de ejecución. Independientemente del tipo de parámetro de informe, el motor se encarga de convertir las expresiones de informe en las que se utiliza el token $ P {}, por lo que no es necesario realizar las conversiones manuales.

Los valores de los parámetros del informe siempre se empaquetan en un objeto java.util.Map, que tiene el nombre del parámetro como clave. Los parámetros del informe se pueden utilizar en la cadena de consulta del informe para personalizar aún más el conjunto de datos recuperados de la base de datos. Actúan como filtros dinámicos en la consulta que proporciona datos para el informe.

Parámetros incorporados

A continuación se muestran los parámetros de informe predefinidos, listos para usar en las expresiones:

S.NO Nombre y descripción del parámetro
1

REPORT_PARAMETERS_MAP

Contiene un mapa con todos los parámetros integrados y definidos por el usuario.

2

REPORT_CONNECTION

Esto apunta a la clase java.sql.Connection proporcionada por el usuario, utilizada para fuentes de datos JDBC.

3

REPORT_DATA_SOURCE

Esta es una instancia proporcionada por el usuario de JRDataSource que representa uno de los tipos de fuente de datos incorporados o uno definido por el usuario.

4

REPORT_MAX_COUNT

Este es un valor java.lang.Integer , que permite a los usuarios limitar los registros de la fuente de datos.

5

REPORT_SCRIPTLET

Esto apunta a net.sf.jasperreports.engine.JRAbstractScriptlet y contiene una instancia del scriptlet de informe proporcionado por el usuario.

6

REPORT_LOCALE

Esta es una instancia de java.util.Locale , que contiene la configuración regional deseada del paquete de recursos.

7

REPORT_RESOURCE_BUNDLE

Esto apunta al objeto java.util.ResourceBundle y contiene mensajes localizados.

8

REPORT_TIME_ZONE

Se trata de una instancia de java.util.TimeZone , que se utiliza para formatear la fecha.

9

REPORT_VIRTUALIZER

Esta es una instancia del objeto net.sf.jasperreports.engine.JRVirtualizer y se utiliza para la virtualización de la página (optimizar el consumo de memoria).

10

REPORT_CLASS_LOADER

Esta es una instancia de java.lang.ClassLoader que se utilizará durante el proceso de llenado del informe para cargar recursos como imágenes, fuentes y plantillas de subinformes.

11

IS_IGNORE_PAGINATION

Si se establece en java.lang.Boolean.TRUE, el informe se generará en una página larga y no se producirán saltos de página.

Ejemplo

Pasemos ReportTitle y Author al informe (generado por JasperReportFill.java). Archivo revisadoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java es como sigue -

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();
      }
   }
}

El contenido del archivo POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java son los siguientes:

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;
   }
}

El contenido del archivo C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java son los que se indican a continuación:

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;
   }
}

Agreguemos parámetros el <ReportTitle> y <Author> a nuestra plantilla de informe existente ( Diseños de informe de capítulo ). El título y el autor del informe se mostrarán al principio del informe. La plantilla de informe revisada (jasper_report_template.jrxml) es la siguiente. Guárdelo en el directorio 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>

La generación del informe

Compilaremos y ejecutaremos el archivo anterior utilizando nuestro proceso de compilación ANT habitual. El contenido del archivo build.xml (guardado en el directorio C: \ tools \ jasperreports-5.0.1 \ test) es el siguiente.

El archivo de importación, baseBuild.xml, se selecciona del capítulo Configuración del entorno y debe colocarse en el mismo directorio que 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>

A continuación, abramos la ventana de la línea de comandos y vayamos al directorio donde se coloca build.xml. Finalmente, ejecute el comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport es el destino predeterminado) de la siguiente manera:

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

Como resultado de la compilación anterior, se abre una ventana de JasperViewer como se muestra en la siguiente pantalla:

Aquí, vemos que el ReportTitle "Lista de contactos" y el Autor "Preparado por Manisha" se muestran al comienzo del informe.