Berichtsvariablen

Berichtsvariablen sind spezielle Objekte, die auf dem Berichtsausdruck basieren.

Berichtsvariablen vereinfachen die folgenden Aufgaben:

  • Berichtsausdrücke, die in der gesamten Berichtsvorlage häufig verwendet werden. Diese Ausdrücke können mithilfe der Berichtsvariablen nur einmal deklariert werden.

  • Berichtsvariablen können verschiedene Berechnungen basierend auf den entsprechenden Ausdruckswerten wie Anzahl, Summe, Durchschnitt, niedrigster, höchster Wert, Varianz usw. durchführen.

Wenn Variablen in einem Berichtsentwurf definiert sind, können diese durch neue Variablen in den Ausdrücken referenziert werden. Daher ist die Reihenfolge wichtig, in der die Variablen in einem Berichtsentwurf deklariert werden.

Variable Aussage

Eine Variablendeklaration lautet wie folgt:

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

Wie oben gezeigt, enthält das <variable> -Element eine Anzahl von Attributen. Diese Attribute sind unten zusammengefasst -

Das Namensattribut

Ähnlich wie Parameter und Felder , die Namen Attribut </ variable> Element ist obligatorisch. Es ermöglicht die Referenzierung der Variablen anhand ihres deklarierten Namens in den Berichtsausdrücken.

Das Klassenattribut

Das Klassenattribut ist ebenfalls obligatorisch und gibt den Klassennamen für die Variablenwerte an. Der Standardwert ist java.lang.String . Dies kann in jede Klasse geändert werden, die im Klassenpfad verfügbar ist, sowohl zur Berichtserstellungszeit als auch zur Berichtsfüllzeit. Die Engine kümmert sich um das Typ-Casting in Berichtsausdrücken, für die das Token $ V {} verwendet wird. Daher ist kein manuelles Typ-Casting erforderlich.

Berechnung

Dieses Attribut bestimmt, welche Berechnung für die Variable beim Ausfüllen des Berichts durchgeführt werden soll. In den folgenden Unterabschnitten werden alle möglichen Werte für das Berechnungsattribut des Elements <variable> beschrieben.

  • Durchschnitt - Der Variablenwert ist der Durchschnitt aller Nicht-Null-Werte des Variablenausdrucks. Gilt nur für numerische Variablen.

  • Count - Der Variablenwert ist die Anzahl der Nicht-Null - Instanzen des variablen Ausdrucks.

  • First - Der Variablenwert ist der Wert der ersten Instanz des Variablenausdrucks. Nachfolgende Werte werden ignoriert.

  • Höchster - Der Variablenwert ist der höchste Wert für den Variablenausdruck.

  • Niedrigster Wert - Der Variablenwert ist der niedrigste Wert für den Variablenausdruck im Bericht.

  • Nichts - Für die Variable werden keine Berechnungen durchgeführt.

  • StandardDeviation - Der Variablenwert ist die Standardabweichung aller Nicht-Null-Werte, die mit dem Berichtsausdruck übereinstimmen. Gilt nur für numerische Variablen.

  • Summe - Der Variablenwert ist die Summe aller vom Berichtsausdruck zurückgegebenen Nicht-Null-Werte.

  • System - Der Variablenwert ist eine benutzerdefinierte Berechnung (Berechnung des Werts für diese Variable selbst mithilfe der Scriptlet-Funktionalität von JasperReports).

  • Varianz - Der Variablenwert ist die Varianz aller Nicht-Null-Werte, die durch Auswertung des Ausdrucks der Berichtsvariablen zurückgegeben werden.

Inkrementierer FactoryClass

Dieses Attribut bestimmt die Klasse, mit der der Wert der Variablen beim Füllen des aktuellen Datensatzes im Bericht berechnet wird. Der Standardwert wäre eine implementierte Klassenet.sf.jasperreports.engine.fill.JRIncrementerFactory. Die Factory-Klasse wird von der Engine verwendet, um Inkrementiererobjekte zur Laufzeit abhängig vom für die Variable festgelegten Berechnungsattribut zu instanziieren .

IncrementType

Dies bestimmt, wann der Wert der Variablen neu berechnet werden muss. Dieses Attribut verwendet Werte wie folgt:

  • Spalte - Der Variablenwert wird am Ende jeder Spalte neu berechnet.

  • Gruppe - Der Variablenwert wird neu berechnet, wenn sich die durch incrementGroup angegebene Gruppe ändert.

  • Keine - Der Variablenwert wird bei jedem Datensatz neu berechnet.

  • Seite - Der Variablenwert wird am Ende jeder Seite neu berechnet.

  • Bericht - Der Variablenwert wird am Ende des Berichts einmal neu berechnet.

IncrementGroup

Dies bestimmt den Namen der Gruppe , zu dem der Wert der Variablen neu berechnet wird, wenn incrementType ist Gruppe . Dies ist der Name einer Gruppe, die in der JRXML-Berichtsvorlage deklariert ist.

ResetType

Dies bestimmt, wann der Wert einer Variablen zurückgesetzt wird. Dieses Attribut verwendet Werte wie folgt:

  • Spalte - Der Variablenwert wird am Anfang jeder Spalte zurückgesetzt.

  • Gruppe - Der Variablenwert wird zurückgesetzt, wenn sich die durch incrementGroup angegebene Gruppe ändert.

  • Keine - Der Variablenwert wird niemals zurückgesetzt.

  • Seite - Der Variablenwert wird am Anfang jeder Seite zurückgesetzt.

  • Bericht - Der Variablenwert wird zu Beginn des Berichts nur einmal zurückgesetzt.

ResetGroup

Dies bestimmt den Namen der Gruppe , zu dem der Variablenwert zurückgesetzt wird , wenn resetType ist Gruppe . Die Werte für dieses Attribut sind der Name einer Gruppe, die in der JRXML-Berichtsvorlage deklariert ist.

Integrierte Berichtsvariablen

Es gibt einige integrierte Systemvariablen, die wie folgt in Ausdrücken verwendet werden können:

S.NO. Variablenname und Beschreibung
1

PAGE_NUMBER

Der Wert dieser Variablen ist die aktuelle Seitenzahl. Mithilfe einer speziellen Funktion der JasperReports-Textfeldelemente, dem Attribut EvaluationTime , können sowohl die aktuelle Seitenzahl als auch die Gesamtzahl der Seiten angezeigt werden.

2

COLUMN_NUMBER

Diese Variable enthält die aktuelle Spaltennummer.

3

REPORT_COUNT

Diese Berichtsvariable enthält die Gesamtzahl der verarbeiteten Datensätze.

4

PAGE_COUNT

Diese Variable enthält die Anzahl der Datensätze, die beim Generieren der aktuellen Seite verarbeitet wurden.

5

COLUMN_COUNT

Diese Variable enthält die Anzahl der Datensätze, die beim Generieren der aktuellen Spalte verarbeitet wurden.

6

GroupName_COUNT

Der Name dieser Variablen leitet sich vom Namen der Gruppe ab, der sie entspricht und an die die Sequenz _COUNT angehängt ist. Diese Variable enthält die Anzahl der Datensätze in der aktuellen Gruppe.

Beispiel

Fügen wir eine Variable hinzu (countNumber) zu unserer vorhandenen Berichtsvorlage (Kapitel Berichtsentwürfe ). Wir werden jedem Datensatz die Zählung voranstellen. Die überarbeitete Berichtsvorlage (jasper_report_template.jrxml) lautet wie folgt. Speichern Sie es im Verzeichnis 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>

Die Java-Codes für das Ausfüllen von Berichten bleiben unverändert. Der Inhalt der DateiC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sind wie unten angegeben -

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

Der Inhalt der POJO-Datei C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java sind wie unten angegeben -

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

Der Inhalt der Datei C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java sind wie unten angegeben -

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

Berichterstellung

Wir werden die obige Datei mit unserem regulären ANT-Erstellungsprozess kompilieren und ausführen. Der Inhalt der Datei build.xml (gespeichert im Verzeichnis C: \ tools \ jasperreports-5.0.1 \ test) ist wie folgt.

Die Importdatei - baseBuild.xml wird aus dem Kapitel Umgebungs-Setup ausgewählt und sollte im selben Verzeichnis wie die build.xml abgelegt werden.

<?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>

Öffnen Sie als Nächstes das Befehlszeilenfenster und wechseln Sie in das Verzeichnis, in dem build.xml abgelegt ist. Führen Sie abschließend den Befehl ausant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport ist das Standardziel) als -

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

Als Ergebnis der obigen Kompilierung wird ein JasperViewer-Fenster wie im folgenden Bildschirm geöffnet -

Hier sehen wir, dass der Zählung für jeden Datensatz ein Präfix vorangestellt ist.