Parametry raportów

Główne dane wejściowe do wypełnienia raportu to - szablon raportu, parametry i źródła danych. W tym rozdziale zostaną opisane parametry, aw następnym omówimy źródła danych.

Parametry to odwołania do obiektów, które są przekazywane podczas operacji wypełniania raportów do silnika raportów. Dane, których nie można przekazać przez źródło danych, można przekazać za pomocą parametrów. Dane takie jak nazwisko autora, tytuł raportu itp. Mogą być przekazywane przez parametry. Szablon JasperReports lub szablon JRXML może mieć zero lub więcej elementów parametrów.

Deklaracja parametrów

Deklaracja parametrów w następujący sposób -

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

Atrybut nazwy

Nazwa atrybutem <parameter> element jest obowiązkowe. Odwołuje się do parametru w wyrażeniach raportu według nazwy. Nazwa parametru powinna być pojedynczym słowem. Nie powinien zawierać żadnych znaków specjalnych, takich jak kropka czy przecinek.

Atrybut klasy

Klasa atrybut jest również obowiązkowe i określa nazwę klasy dla wartości parametrów. Jego domyślną wartością jest java.lang.String . Można to zmienić na dowolną klasę dostępną w czasie wykonywania. Niezależnie od typu parametru raportu silnik dba o rzutowanie w wyrażeniach raportu, w których używany jest token $ P {}, dlatego ręczne rzutowanie jest zbędne.

Wartości parametrów raportu są zawsze umieszczane w obiekcie java.util.Map, którego kluczem jest nazwa parametru. Parametry raportu mogą być używane w ciągu zapytania raportu, aby dodatkowo dostosować zestaw danych pobieranych z bazy danych. Działają one jak dynamiczne filtry w zapytaniu dostarczającym dane do raportu.

Wbudowane parametry

Poniżej znajdują się wstępnie zdefiniowane parametry raportu, gotowe do użycia w wyrażeniach -

S.NO Nazwa i opis parametru
1

REPORT_PARAMETERS_MAP

Zawiera mapę ze wszystkimi parametrami zdefiniowanymi i wbudowanymi przez użytkownika.

2

REPORT_CONNECTION

Wskazuje to na dostarczoną przez użytkownika klasę java.sql.Connection, używaną dla źródeł danych JDBC.

3

REPORT_DATA_SOURCE

Jest to dostarczona przez użytkownika instancja JRDataSource reprezentująca jeden z wbudowanych typów źródeł danych lub zdefiniowane przez użytkownika.

4

REPORT_MAX_COUNT

To jest wartość java.lang.Integer , która umożliwia użytkownikom ograniczenie rekordów ze źródła danych.

5

REPORT_SCRIPTLET

Wskazuje to na net.sf.jasperreports.engine.JRAbstractScriptlet i zawiera instancję skryptletu raportu dostarczonego przez użytkownika.

6

REPORT_LOCALE

To instancja java.util.Locale zawierająca pakiet zasobów o żądanym ustawieniu narodowym.

7

REPORT_RESOURCE_BUNDLE

Wskazuje na obiekt java.util.ResourceBundle i zawiera zlokalizowane komunikaty.

8

REPORT_TIME_ZONE

To jest instancja java.util.TimeZone , używana do formatowania daty.

9

REPORT_VIRTUALIZER

Jest to instancja obiektu net.sf.jasperreports.engine.JRVirtualizer , używana do wirtualizacji strony (optymalizacja zużycia pamięci).

10

REPORT_CLASS_LOADER

To jest instancja java.lang.ClassLoader używana podczas wypełniania raportu w celu ładowania zasobów, takich jak obrazy, czcionki i szablony podraportów

11

IS_IGNORE_PAGINATION

Jeśli ustawione na java.lang.Boolean.TRUE, raport zostanie wygenerowany na jednej długiej stronie i nie nastąpi podział strony.

Przykład

Przejdźmy ReportTitle i Autor raportu (wygenerowanej przez JasperReportFill.java). Poprawiony plikC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java wygląda następująco -

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

Zawartość pliku POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java są jak poniżej -

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

Zawartość pliku C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java są jak podano poniżej -

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

Dodajmy parametry <ReportTitle> i <Author> do naszego istniejącego szablonu raportu (Rozdział Projekty raportów ). Tytuł raportu i autor zostaną wyświetlone na początku raportu. Zmieniony szablon raportu (jasper_report_template.jrxml) jest następujący. Zapisz go w katalogu 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>

Generowanie raportów

Skompilujemy i uruchomimy powyższy plik przy użyciu naszego zwykłego procesu budowania ANT. Zawartość pliku build.xml (zapisanego w katalogu C: \ tools \ jasperreports-5.0.1 \ test) jest następująca.

Plik importu - baseBuild.xml jest pobierany z rozdziału Konfiguracja środowiska i powinien być umieszczony w tym samym katalogu co 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>

Następnie otwórzmy okno wiersza poleceń i przejdźmy do katalogu, w którym znajduje się plik build.xml. Na koniec wykonaj polecenieant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport jest domyślnym celem) w następujący sposób -

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

W wyniku powyższej kompilacji otworzy się okno JasperViewer, jak pokazano na poniższym ekranie -

Tutaj widzimy, że ReportTitle „Lista kontaktów” i autor „Przygotowane przez Manishę” są wyświetlane na początku raportu.