Tham số báo cáo

Đầu vào chính để điền vào một báo cáo là - mẫu báo cáo, thông số và nguồn dữ liệu. Chương này sẽ mô tả các tham số và trong chương tiếp theo chúng ta sẽ thảo luận về các nguồn dữ liệu.

Tham số là các tham chiếu đối tượng, những tham số này được chuyển trong quá trình điền báo cáo vào công cụ báo cáo. Dữ liệu không thể được chuyển qua nguồn dữ liệu, có thể được chuyển bằng cách sử dụng các tham số. Dữ liệu như tên tác giả, tiêu đề của báo cáo, v.v. có thể được chuyển qua các tham số. Mẫu JasperReports hoặc mẫu JRXML có thể không có hoặc nhiều phần tử tham số.

Khai báo tham số

Khai báo tham số như sau:

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

Thuộc tính Tên

Các tên thuộc tính của thẻ <parameter> phần tử là bắt buộc. Nó tham chiếu đến tham số trong biểu thức báo cáo theo tên. Tên tham số phải là một từ duy nhất. Nó không được chứa bất kỳ ký tự đặc biệt nào như dấu chấm hoặc dấu phẩy.

Thuộc tính lớp

Các lớp thuộc tính cũng là bắt buộc và nó chỉ định tên lớp cho các giá trị tham số. Giá trị mặc định của nó là java.lang.String . Điều này có thể được thay đổi thành bất kỳ lớp nào có sẵn trong thời gian chạy. Bất kể loại thông số báo cáo là gì, công cụ sẽ xử lý việc truyền trong các biểu thức báo cáo trong đó mã thông báo $ P {} được sử dụng, do đó, việc thực hiện truyền thủ công là không cần thiết.

Các giá trị tham số báo cáo luôn được đóng gói trong một đối tượng java.util.Map, có tên tham số làm khóa của nó. Tham số báo cáo có thể được sử dụng trong chuỗi truy vấn của báo cáo, để tùy chỉnh thêm tập dữ liệu, được truy xuất từ ​​cơ sở dữ liệu. Các bộ lọc này hoạt động giống như các bộ lọc động trong truy vấn cung cấp dữ liệu cho báo cáo.

Tham số tích hợp

Sau đây là các tham số báo cáo được xác định trước, sẵn sàng sử dụng trong các biểu thức -

S.NO Tên và mô tả thông số
1

REPORT_PARAMETERS_MAP

Chứa một bản đồ với tất cả các thông số do người dùng xác định và cài sẵn.

2

REPORT_CONNECTION

Điều này trỏ đến lớp java.sql.Connection do người dùng cung cấp, được sử dụng cho các nguồn dữ liệu JDBC.

3

REPORT_DATA_SOURCE

Đây là phiên bản JRDataSource do người dùng cung cấp đại diện cho một trong các kiểu nguồn dữ liệu tích hợp sẵn hoặc kiểu do người dùng xác định.

4

REPORT_MAX_COUNT

Đây là giá trị java.lang.Integer , cho phép người dùng giới hạn các bản ghi từ nguồn dữ liệu.

5

REPORT_SCRIPTLET

Điều này trỏ đến net.sf.jasperreports.engine.JRAbstractScriptlet và chứa một phiên bản của scriptlet báo cáo do người dùng cung cấp.

6

REPORT_LOCALE

Đây là một phiên bản java.util.Locale , chứa gói tài nguyên ngôn ngữ mong muốn.

7

REPORT_RESOURCE_BUNDLE

Điều này trỏ đến đối tượng java.util.ResourceBundle và chứa các thông báo được bản địa hóa.

số 8

REPORT_TIME_ZONE

Đây là một phiên bản java.util.TimeZone , được sử dụng để định dạng ngày tháng.

9

REPORT_VIRTUALIZER

Đây là một ví dụ của đối tượng net.sf.jasperreports.engine.JRVirtualizer và được sử dụng cho ảo hóa trang (tối ưu hóa mức tiêu thụ bộ nhớ).

10

REPORT_CLASS_LOADER

Đây là phiên bản java.lang.ClassLoader sẽ được sử dụng trong quá trình điền báo cáo để tải các tài nguyên như hình ảnh, phông chữ và các mẫu báo cáo con

11

IS_IGNORE_PAGINATION

Nếu được đặt thành java.lang.Boolean.TRUE , báo cáo sẽ được tạo trên một trang dài và hiện tượng ngắt trang sẽ không xảy ra.

Thí dụ

Hãy để chúng tôi chuyển ReportTitleAuthor vào báo cáo (được tạo bởi JasperReportFill.java). Tệp đã sửa đổiC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java như sau -

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

Nội dung của tệp POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java như dưới đây -

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

Nội dung của tệp C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java như dưới đây -

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

Hãy thêm các tham số <ReportTitle> và <Author> vào mẫu báo cáo hiện có của chúng tôi ( Thiết kế Báo cáo Chương ). Tên báo cáo và tác giả sẽ được hiển thị ở đầu báo cáo. Mẫu báo cáo đã sửa đổi (jasper_report_template.jrxml) như sau. Lưu nó vào thư mục 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>

Tạo báo cáo

Chúng tôi sẽ biên dịch và thực thi tệp trên bằng quy trình xây dựng ANT thông thường của chúng tôi. Nội dung của tệp build.xml (được lưu trong thư mục C: \ tools \ jasperreports-5.0.1 \ test) như bên dưới.

Tệp nhập - baseBuild.xml được chọn từ chương Thiết lập môi trường và phải được đặt trong cùng thư mục với 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>

Tiếp theo, hãy mở cửa sổ dòng lệnh và đi đến thư mục nơi build.xml được đặt. Cuối cùng, thực hiện lệnhant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport là mục tiêu mặc định) như sau:

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

Kết quả của việc biên dịch ở trên, một cửa sổ JasperViewer sẽ mở ra như được hiển thị trong màn hình sau:

Ở đây, chúng ta thấy rằng, "Danh sách Liên hệ" và Tác giả "Được chuẩn bị bởi Manisha" của ReportTitle được hiển thị ở đầu báo cáo.