Wednesday, December 17, 2014

Jasper Template with iReport

Pada kesempatan kali ini saya akan membahas sedikit mengenai Jasper. JasperReports merupakan salah satu reporting tools yang dapat di gunakan untuk membantu kegiatan pembuatan report. Dalam pembuatan sistem sering kali kita membutuhkan pembuatan report.

JasperReports template itu sendiri merupakan sebuah XML file yang disebut JRXML. Untuk mempermudah pembuatan JRXML file kita dapat menggunakan beberapa bantuan tools 3rd party seperti iReport, DynamicReport dan berbagai macam tools lainnya.

Pada kesempatan kali ini kita akan bermain-main dengan iReport. Saya Menggunakan iReport 5.6.0 untuk membantu dalam pembuatan JRXML file. iReport merupakan tools yang memiliki UI designer, sehingga lebih mudah dalam pembuatannya bagi yang tidak terbiasa membuat berbaris-baris tag xml.

iReport dapat menggunakan banyak tipe datasource seperti misalnya database, xml file maupun JSON. Pada kesempatan kali ini kita akan menggunakan empty datasource. Langsung saja kita membuat new file pada iReport File-> New... -> Blank A4 -> Open this template, beri nama file TestReport.jrxml.


Setelah membuat JRXML baru akan muncul tempate awal seperti gambar d bawah. 


Pada pembuatan report, pada report properties default language yang digunakan sebagai expressionnya adalah Groovy. Kita akan menggunakan java sehingga Language dapat kita ganti menjadi java.

Sebelum kita memulai pembuatan report mari sedikit membahas mengenai tampilan yang ada. Pada awal pembuatan report akan terbagi menjadi 7 bagian yang biasa di sebut band.

7 Band pada iReport designer UI : 
  1. Title 
    • Band ini hanya akan muncul satu kali dalam sebuah laporan, yaitu padahal bagian paling atas pada halaman pertama.
  2. Page Header
    • Band ini akan muncul di setiap halaman, berposisi di bagian header setiap halaman atau pada bawah titile band pada halaman pertama.
  3. Column Header
    • Band ini juga akan muncul pada setiap halaman seperti halnya page Header, band ini lebih bertujuan untuk tempat header column yang mungkin akan muncul pada detail band.
  4. Detail
    • Pada template tertulis detail 1 karena band ini dapat ditambahkan lebih dari 1 dalam setiap halamannya. Detail band merupakan tempat untuk menaruh datasource karena memiliki karakteristik akan berulang sebanyak data tersebut. 
  5. Column Footer
    • Column Header akan berada d bawah detail band apabila data pada detail band sudah ditampilkan seluruhnya. Column header akan muncul di setiap halaman.
  6. Page Footer
    • Band ini juga akan muncul di setiap halaman laporan,seperti halnya Page Header, Column Header, maupun Column Footer. Band ini akan muncul di bawah Coulm Footer di setiap halamannya.
  7. Summary
    •  Band ini mirip seperti Title, hanya akan muncul 1x dalam sebuah laporan tetapi d halaman paling akhir sebuah laporan. Tetapi jangan terkecoh dengan design ui yang memperlihatkan dia berada di bagian paling bawah sebuah laporan. Band ini akan berposisi setelah detail atau di atas column Footer.
Setelah membahas mengenai band yang ada dalam JRXML file mari kita menengok di sebelah kiri   terdapat Report inspektor. kita akan membahas mengenai perbedaan parameter, field dan variable  yang terdapat disana untuk membantu kita menentukan pembuatan "variable" yang kita perlukan.

  1. Parameter
    • Parameter merupakan tempat mendekarasikan data yang memiliki key dan data seperti hashmap. Jasper menerima parameter yang sudah mereka siapkan maupun bisa kita buat sendiri. biasa parameter digunakan untuk menampilkan data seperti judul, tujuan pengiriman dll
  2. Field
    • Field merupakan tempat mendeklarasikan data yang memiliki banyak value dengan key yang sama. Seperti data dari table atau bisa d asumsikan tempat untuk mendeklarasikan data yang akan kita dpat dari datasource.
  3. Variable
    • Variable sendiri merupakan tipe data yang dapat diolah di dalam template, seperti melakukan calculation penjumlahan(sum), penghitungan(count) dan berbagai macam kegiatan lainnya.
Tipe Calculation pada Variable

Setelah mengetahui itu marilah kita mulai membuat contoh sebuah laporan. Mari membuat sebuah parameter bernama Title bertipe data string, 4 buah field , income , outcome dan margin yang bertipe data integer dan month yang bertipe data string. Kemudian kita juga membuat 3 buah variable bertipe integer yaitu totalIncome, totalOutcome dan totalMargin dan mengeset properties, calculation = sum dengan expresion yang akan dijumlahkan sesuai kebutuhan masing-masing.
Contoh Properties totalIncome





Kemudian mari kita susun variable,field dan parameter yang sudah kita buat dalam template hingga menjadi seperti gambar di bawah, bisa ditambah label atau image dari pallet yang terletak disebelah kanan template untuk mempercantiknya.



Setelah selesai membuat JRXML file mari membuat java untuk menggenerate report berdasarkan template tersebut. Saya menggunakan new Spring Backend project untuk menaruh code yang bertugas menggenerate reportnya. Jangan lupa menambahkan dependency pada pom.xml untuk jasper : 

<dependency>     
        <groupid>net.sf.jasperreports</groupid>
        <artifactid>jasperreports</artifactid>
        <version>5.0.1</version>
</dependency>

Taruh TestReport.jrxml di folder resource. Kemudian buat class CashFlow yang akan memiliki variable dengan nama dan tipe data yang sama seperti yang kita deklarasikan ketika membuat field di iReport. 

package com.springapp.batch;
public class CashFlow { private String month; private Integer income; private Integer outcome; private Integer margin;
public String getMonth(){ return month; }
public void setMonth(String month) { this.month = month; }
public Integer getIncome() { return income; }
public void setIncome(Integer income) { this.income = income; }
public Integer getOutcome() { return outcome; }
public void setOutcome(Integer outcome) { this.outcome = outcome; }
public Integer getMargin() { return margin; }
public void setMargin() { margin = income-outcome; } }



Setelah itu kita buat class report yang bertugas untuk mengisi data dan menggenerate report.

package com.springapp.batch;
import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List;
public class Report {
public void main(){ List<CashFlow> cashFlows = insertData(); try{ String fileName = createDirectory("Laporan_Keuangan_2014"); JRDataSource ds = new JRBeanCollectionDataSource(cashFlows); HashMap params = new HashMap(); params.put("Title","Laporan keuangan"); InputStream reportStream = this.getClass().getResourceAsStream("/TestReport.jrxml"); JasperDesign jd = JRXmlLoader.load(reportStream); JasperReport jr = JasperCompileManager.compileReport(jd); JasperPrint jp = JasperFillManager.fillReport(jr, params, ds); JasperExportManager.exportReportToPdfFile(jp, fileName); }catch (Exception e){ } }
private String createDirectory(String reportName){ String directory = "/Users/rennytanuwijaya/nostra/Test/"; File f=new File(directory); if(!f.exists()){ new File(directory).mkdirs(); } String fileName = directory+"/"+reportName+".pdf"; return fileName; }
private List<CashFlow> insertData(){ List<CashFlow> cashFlows = new ArrayList<CashFlow>(); CashFlow cashFlow1 = new CashFlow(); cashFlow1.setMonth("Januari"); cashFlow1.setIncome(10000000); cashFlow1.setOutcome(9800000); cashFlow1.setMargin(); cashFlows.add(cashFlow1); CashFlow cashFlow2 = new CashFlow(); cashFlow2.setMonth("Februari"); cashFlow2.setIncome(10000000); cashFlow2.setOutcome(9800000); cashFlow2.setMargin(); cashFlows.add(cashFlow2); CashFlow cashFlow3 = new CashFlow(); cashFlow3.setMonth("Maret"); cashFlow3.setIncome(10000000); cashFlow3.setOutcome(9800000); cashFlow3.setMargin(); cashFlows.add(cashFlow3); return cashFlows; } }

Kemudian kita jalankan method main untuk mengisi data dan menggenerate report tersebut.
Berikut adalah hasil dari report yang dihasilkan : 




Demikian saja perkenalan singkat dengan membuat template report menggunakan iReport.
Selamat mencoba..


No comments:

Post a Comment