Parâmetros de relatórios

As principais entradas para preencher um relatório são - modelo de relatório, parâmetros e fontes de dados. Este capítulo descreverá os parâmetros e no próximo capítulo discutiremos as fontes de dados.

Os parâmetros são as referências do objeto, que são passadas durante as operações de preenchimento do relatório para o mecanismo de relatório. Os dados que não podem ser transmitidos pela fonte de dados, podem ser transmitidos usando parâmetros. Dados como nome do autor, título do relatório, etc. podem ser passados ​​por meio de parâmetros. Um modelo JasperReports ou modelo JRXML pode ter zero ou mais elementos de parâmetro.

Declaração de Parâmetro

Declaração de parâmetro da seguinte forma -

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

O Atributo de Nome

O atributo name do elemento <parameter> é obrigatório. Ele faz referência ao parâmetro em expressões de relatório por nome. O nome do parâmetro deve ser uma única palavra. Não deve conter nenhum caractere especial, como ponto ou vírgula.

O atributo de classe

O atributo class também é obrigatório e especifica o nome da classe para os valores dos parâmetros. Seu valor padrão é java.lang.String . Isso pode ser alterado para qualquer classe disponível em tempo de execução. Independentemente do tipo de parâmetro de relatório, o mecanismo cuida da conversão nas expressões de relatório nas quais o token $ P {} é usado, portanto, fazer as conversões manuais é desnecessário.

Os valores dos parâmetros do relatório são sempre compactados em um objeto java.util.Map, que possui o nome do parâmetro como sua chave. Os parâmetros do relatório podem ser usados ​​na string de consulta do relatório, de modo a personalizar ainda mais o conjunto de dados recuperado do banco de dados. Eles agem como filtros dinâmicos na consulta que fornece dados para o relatório.

Parâmetros internos

A seguir estão os parâmetros de relatório predefinidos, prontos para uso nas expressões -

S.NO Nome e descrição do parâmetro
1

REPORT_PARAMETERS_MAP

Contém um mapa com todos os parâmetros integrados e definidos pelo usuário.

2

REPORT_CONNECTION

Isso aponta para a classe java.sql.Connection fornecida pelo usuário, usada para origens de dados JDBC.

3

REPORT_DATA_SOURCE

Esta é uma instância fornecida pelo usuário de JRDataSource que representa um dos tipos de origem de dados integrados ou um definido pelo usuário.

4

REPORT_MAX_COUNT

Este é um valor java.lang.Integer , permitindo aos usuários limitar os registros da fonte de dados.

5

REPORT_SCRIPTLET

Isso aponta para net.sf.jasperreports.engine.JRAbstractScriptlet e contém uma instância do scriptlet de relatório fornecido pelo usuário.

6

REPORT_LOCALE

Esta é uma instância java.util.Locale , contendo a localidade desejada do pacote de recursos.

7

REPORT_RESOURCE_BUNDLE

Isso aponta para o objeto java.util.ResourceBundle e contém mensagens localizadas.

8

REPORT_TIME_ZONE

Esta é uma instância java.util.TimeZone , usada para a formatação de data.

9

REPORT_VIRTUALIZER

Esta é uma instância do objeto net.sf.jasperreports.engine.JRVirtualizer , e usada para a virtualização da página (otimizar o consumo de memória).

10

REPORT_CLASS_LOADER

Esta é uma instância java.lang.ClassLoader a ser usada durante o processo de preenchimento do relatório para carregar recursos como imagens, fontes e modelos de sub-relatório

11

IS_IGNORE_PAGINATION

Se definido como java.lang.Boolean.TRUE, o relatório será gerado em uma página longa e não ocorrerá quebra de página.

Exemplo

Vamos passar ReportTitle e Author para o relatório (gerado por JasperReportFill.java). Arquivo revisadoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java é o seguinte -

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

O conteúdo do arquivo POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java são como abaixo -

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

O conteúdo do arquivo C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java são os dados abaixo -

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

Vamos adicionar parâmetros ao <ReportTitle> e <Author> ao nosso modelo de relatório existente (Capítulo Report Designs ). O Título e o Autor do Relatório serão exibidos no início do relatório. O modelo de relatório revisado (jasper_report_template.jrxml) é o seguinte. Salve-o no diretório 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>

Geração de relatório

Vamos compilar e executar o arquivo acima usando nosso processo normal de construção ANT. O conteúdo do arquivo build.xml (salvo no diretório C: \ tools \ jasperreports-5.0.1 \ test) é o seguinte.

O arquivo de importação - baseBuild.xml é escolhido no capítulo Configuração do ambiente e deve ser colocado no mesmo diretório do 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 seguir, vamos abrir a janela da linha de comando e ir para o diretório onde build.xml está colocado. Finalmente, execute o comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport é o destino padrão) da seguinte forma -

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 da compilação acima, uma janela JasperViewer é aberta conforme mostrado na tela a seguir -

Aqui, vemos que o ReportTitle "Lista de contatos" e o autor "Preparado por Manisha" são exibidos no início do relatório.