Variabili del report

Le variabili di report sono oggetti speciali costruiti sopra l'espressione di report.

Le variabili di report semplificano le seguenti attività:

  • Espressioni di report, ampiamente utilizzate in tutto il modello di report. Queste espressioni possono essere dichiarate una sola volta utilizzando le variabili del report.

  • Le variabili del report possono eseguire vari calcoli in base ai valori delle espressioni corrispondenti come conteggio, somma, media, minima, massima, varianza, ecc.

Se le variabili sono definite in un progetto di report, queste possono essere referenziate da nuove variabili nelle espressioni. Pertanto, l'ordine in cui le variabili vengono dichiarate in un progetto di report è importante.

Dichiarazione di variabili

Una dichiarazione di variabile è la seguente:

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

Come visto sopra, l'elemento <variable> contiene un numero di attributi. Questi attributi sono riassunti di seguito:

L'attributo del nome

Simile ai parametri e ai campi , l' attributo name dell'elemento </variable> è obbligatorio. Consente di fare riferimento alla variabile tramite il suo nome dichiarato nelle espressioni del report.

L'attributo di classe

Anche l' attributo class è obbligatorio che specifica il nome della classe per i valori delle variabili. Il suo valore predefinito è java.lang.String . Questo può essere modificato in qualsiasi classe disponibile nel classpath, sia al momento della compilazione del report che al momento del riempimento del report. Il motore si occupa del casting del tipo nelle espressioni di report in cui viene utilizzato il token $ V {}, quindi il casting manuale del tipo non è richiesto.

Calcolo

Questo attributo determina: quale calcolo eseguire sulla variabile durante la compilazione del report. Le seguenti sottosezioni descrivono tutti i possibili valori per l'attributo di calcolo dell'elemento <variabile>.

  • Media : il valore della variabile è la media di ogni valore non nullo dell'espressione della variabile. Valido solo per variabili numeriche.

  • Conteggio : il valore della variabile è il conteggio delle istanze non nulle dell'espressione della variabile.

  • Primo : il valore della variabile è il valore della prima istanza dell'espressione della variabile. I valori successivi vengono ignorati.

  • Il più alto : il valore della variabile è il valore più alto per l'espressione della variabile.

  • Minimo : il valore della variabile è il valore più basso per l'espressione della variabile nel report.

  • Niente : nessun calcolo viene eseguito sulla variabile.

  • StandardDeviation : il valore della variabile è la deviazione standard di tutti i valori non nulli che corrispondono all'espressione del report. Valido solo per variabili numeriche.

  • Somma : il valore della variabile è la somma di tutti i valori non nulli restituiti dall'espressione del report.

  • Sistema - Il valore della variabile è un calcolo personalizzato (calcolando il valore per quella variabile da soli, utilizzando la funzionalità degli scriptlet di JasperReports).

  • Varianza : il valore della variabile è la varianza di tutti i valori non nulli restituiti dalla valutazione dell'espressione della variabile del report.

Incrementer FactoryClass

Questo attributo determina la classe utilizzata per calcolare il valore della variabile durante la compilazione del record corrente nel report. Il valore predefinito sarebbe qualsiasi implementazione di classenet.sf.jasperreports.engine.fill.JRIncrementerFactory. La classe factory verrà utilizzata dal motore per istanziare oggetti incrementer in fase di esecuzione a seconda dell'attributo di calcolo impostato per la variabile.

IncrementType

Questo determina quando ricalcolare il valore della variabile. Questo attributo utilizza valori, come di seguito:

  • Colonna : il valore della variabile viene ricalcolato alla fine di ogni colonna.

  • Gruppo : il valore della variabile viene ricalcolato quando il gruppo specificato da incrementGroup cambia.

  • Nessuno : il valore della variabile viene ricalcolato con ogni record.

  • Pagina : il valore della variabile viene ricalcolato alla fine di ogni pagina.

  • Report : il valore della variabile viene ricalcolato una volta, alla fine del report.

IncrementGroup

Ciò determina il nome del gruppo in cui viene ricalcolato il valore della variabile, quando incrementType è Group . Questo prende il nome di qualsiasi gruppo dichiarato nel modello di rapporto JRXML.

ResetType

Questo determina quando il valore di una variabile viene reimpostato. Questo attributo utilizza valori, come di seguito:

  • Colonna : il valore della variabile viene reimpostato all'inizio di ogni colonna.

  • Gruppo : il valore della variabile viene reimpostato quando il gruppo specificato da incrementGroup cambia.

  • Nessuno : il valore della variabile non viene mai reimpostato.

  • Pagina - Il valore della variabile viene reimpostato all'inizio di ogni pagina.

  • Report : il valore della variabile viene reimpostato solo una volta, all'inizio del report.

ResetGroup

Ciò determina il nome del gruppo in cui viene reimpostato il valore della variabile, quando resetType è Group . I valori per questo attributo sarebbero il nome di qualsiasi gruppo dichiarato nel modello di rapporto JRXML.

Variabili di report incorporate

Ci sono alcune variabili di sistema incorporate, pronte per l'uso nelle espressioni, come segue:

S.NO Nome e descrizione della variabile
1

PAGE_NUMBER

Il valore di questa variabile è il numero di pagina corrente. Può essere utilizzato per visualizzare sia il numero di pagina corrente che il numero totale di pagine utilizzando una caratteristica speciale degli elementi del campo di testo JasperReports, l' attributo evaluationTime .

2

COLUMN_NUMBER

Questa variabile contiene il numero di colonna corrente.

3

REPORT_COUNT

Questa variabile del report contiene il numero totale di record elaborati.

4

PAGE_COUNT

Questa variabile contiene il numero di record che sono stati elaborati durante la generazione della pagina corrente.

5

COLUMN_COUNT

Questa variabile contiene il numero di record che sono stati elaborati durante la generazione della colonna corrente.

6

GroupName_COUNT

Il nome di questa variabile deriva dal nome del gruppo a cui corrisponde, suffisso con la sequenza _COUNT. Questa variabile contiene il numero di record nel gruppo corrente.

Esempio

Aggiungiamo una variabile (countNumber) al nostro modello di report esistente (Chapter Report Designs ). Aggiungeremo un prefisso al conteggio a ogni record. Il modello di rapporto rivisto (jasper_report_template.jrxml) è il seguente. Salvalo nella directory 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>

I codici Java per la compilazione del report rimangono invariati. Il contenuto del fileC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sono come indicato di seguito -

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

Il contenuto del file POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java sono come indicato di seguito -

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

Il contenuto del file C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java sono come indicato di seguito -

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

Generazione di report

Compileremo ed eseguiremo il file sopra utilizzando il nostro normale processo di compilazione ANT. I contenuti del file build.xml (salvato nella directory C: \ tools \ jasperreports-5.0.1 \ test) sono i seguenti.

Il file di importazione - baseBuild.xml viene prelevato dal capitolo Configurazione dell'ambiente e dovrebbe essere posizionato nella stessa directory di 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>

Quindi, apriamo la finestra della riga di comando e andiamo alla directory in cui si trova build.xml. Infine, esegui il comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport è il target predefinito) come -

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

Come risultato della compilazione sopra, si apre una finestra di JasperViewer come nella schermata qui sotto -

Qui, vediamo che il conteggio è prefissato per ogni record.