Bidang Laporan
Kolom laporan adalah elemen yang merepresentasikan pemetaan data antara sumber data dan template laporan. Bidang dapat digabungkan dalam ekspresi laporan untuk mendapatkan keluaran yang diinginkan. Templat laporan bisa berisi nol atau lebih elemen <field>. Saat mendeklarasikan kolom laporan, sumber data harus menyediakan data yang sesuai dengan semua kolom yang ditentukan dalam template laporan.
Deklarasi Lapangan
Deklarasi lapangan dilakukan seperti yang ditunjukkan di bawah ini -
<field name = "FieldName" class = "java.lang.String"/>
Atribut Nama
The Nama atribut <bidang> elemen adalah wajib. Ini mereferensikan bidang dalam ekspresi laporan dengan nama.
Atribut Kelas
The kelas atribut menentukan nama kelas untuk nilai bidang. Nilai defaultnya adalah java.lang.String . Ini dapat diubah ke kelas apa pun yang tersedia saat runtime. Terlepas dari jenis bidang laporan, mesin menangani pengecoran dalam ekspresi laporan di mana token $ F {} digunakan, sehingga membuat cetakan manual tidak diperlukan.
Deskripsi Bidang
Elemen <fieldDesciption> adalah elemen opsional. Ini sangat berguna saat menerapkan sumber data khusus. Misalnya, kita dapat menyimpan kunci atau beberapa informasi, yang dengannya kita dapat mengambil nilai bidang dari sumber data khusus pada waktu proses. Dengan menggunakan elemen <fieldDesciption> dan bukan nama bidang, Anda dapat dengan mudah mengatasi batasan konvensi penamaan bidang saat mengambil nilai bidang dari sumber data.
Berikut ini adalah potongan kode dari file JRXML kami yang sudah ada ( Desain Laporan Bab ). Di sini, kita bisa melihat penggunaanname, class, dan fieldDescription elemen.
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
Sortir Bidang
Pada saat pengurutan data diperlukan dan implementasi sumber data tidak mendukungnya (misalnya, sumber data CSV), JasperReports mendukung pengurutan sumber data berbasis kolom dalam memori. Pengurutan dapat dilakukan menggunakan satu atau beberapa elemen <sortField> di templat laporan.
Jika setidaknya satu kolom sortir ditentukan, selama proses pengisian laporan, sumber data diteruskan ke instance JRSortableDataSource . Ini pada gilirannya, mengambil semua catatan dari sumber data, melakukan pengurutan memori sesuai dengan bidang yang ditentukan, dan menggantikan sumber data asli.
Nama kolom sortir harus identik dengan nama kolom laporan. Kolom yang digunakan untuk pengurutan harus memiliki jenis yang mengimplementasikan java.util.Comparable. Penyortiran natural order dilakukan untuk semua field kecuali yang berjenis java.lang.String (untuk tipe String, collator yang sesuai dengan report fill locale digunakan). Saat beberapa bidang pengurutan ditentukan, pengurutan akan dilakukan menggunakan bidang sebagai kunci pengurutan dalam urutan kemunculannya di templat laporan. Contoh berikut menunjukkan fitur pengurutan.
Contoh Laporan yang Diurutkan
Mari tambahkan <sortField> ke template laporan yang ada ( desain Laporan Bab ). Mari kita urutkan negara bidang dalam urutan menurun. Template laporan yang direvisi (jasper_report_template.jrxml) adalah sebagai berikut. Simpan ke direktori 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>
<sortField name = "country" order = "Descending"/>
<sortField name = "name"/>
<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>
Kode java untuk pengisian laporan tetap tidak berubah. Isi fileC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java seperti yang diberikan di bawah ini -
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();
}
}
}
Isi file POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java seperti yang diberikan di bawah ini -
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;
}
}
Isi file C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java seperti yang diberikan di bawah ini -
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;
}
}
Pembuatan laporan
Kami akan mengkompilasi dan mengeksekusi file di atas menggunakan proses build ANT reguler kami. Isi dari file build.xml (disimpan di bawah direktori C: \ tools \ jasperreports-5.0.1 \ test) seperti yang diberikan di bawah ini.
File impor - baseBuild.xml diambil dari bab Pengaturan Lingkungan dan harus ditempatkan di direktori yang sama dengan 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>
Selanjutnya, buka jendela baris perintah dan buka direktori tempat build.xml ditempatkan. Terakhir, jalankan perintahant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport adalah target default) sebagai berikut -
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
Sebagai hasil dari kompilasi di atas, jendela JasperViewer terbuka seperti yang ditunjukkan pada layar di bawah ini -
Di sini, kita dapat melihat bahwa nama-nama negara disusun menurut abjad.