Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Cari Blog Ini

26 November 2010

JasperReport di Adempiere

Hari ini ada lagi pengunjung blog yang bertanya tentang JasperReport. Kali ini, masalah ketika integrasi di Adempiere. Maunya menampilkan fungsi terbilang (amt in words) di JasperReport. Hmm, selalu saya jawab, saya belum pernah implementasi JasperReport di Adempiere, karena memang saya belum pernah coba. Kali ini saya niat nyoba. Cari-cari tutorial di internet via Google memang banyak sekali, terutama dari situs Adempiere itu sendiri. Saya coba dari sini.

NB: IReport versi: 2.0.2
    Adempiere versi: 342 (Desktop version)
    OS: Ubuntu 8.10

Langkah:
Pertama, buat dulu JasperReportnya via iReport. Gunakan koneksi sesuai koneksi adempiere. Saya coba menampilkan tanggal server.
Query nya: SELECT now() as sekarang
Di test run iReport, hasilnya ok.


Kedua, kita buat process/report baru di Adempiere. 
Login dengan user System, kemudian masuk window Report & Process. Buat baru (pencet New). Isi data-data yang diperlukan. 
Pada  Classname, isikan dengan org.compiere.report.ReportStarter 
Kenapa harus itu? Karena ya class itu yang digunakan untuk load JasperReport di Adempeire. Jika ingin meng-custom proses load, ya tinggal ganti class itu atau buat class baru. (lagian..buat apa custom load JasperReport hehehe...)

Kemudian di field Jasper Report, isikan dengan nama jrxml nya yang akan diload. Ada beberapa pilihan menentukan setting lokasi report. 

Pilihannya (berdasarkan awalan pada field Jasper Report):
http:// atau  https:// : report di simpan pada suatu webserver
attachment:  :report di simpan di attachment adempiere
/  : report di disk. Lokasi langsung fullpath contoh /home/test/test.jrxml
file:/  : lokasi report di tulis dengan format URI
resouce:  : report di simpan dalam bentuk resource
file.jrxml : jika hanya menuliskan nama filenya saja. Maka nanti ada dua pilihan lagi. 
Pertama, ambil folder dari paramteer di org.compiere.report.path, Kedua, jika pilihan pertama tidak di set, diambil dari folder [AdempiereHome]\reports\

Selesai mengisi, lanjutkan ke Tab Paramter jika di niatkan ada parameter di report tersebut.
Field nama digunakan untuk mengisi field's caption pada dialog input parameter. Sedang nama parameter di JasperReport di isikan di DB Column Name.

Setting koneksi pada JasperReport diambilkan current koneksi pada Adempiere. Coba dilihat pada /JasperReports/src/org/compiere/report/ReportStarter.java::startProcess()
conn = getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, params, conn);

Ketiga, kita apply proces/report yang telah dibuat. Untuk implementasikan bisa dengan membuat menu sendiri, attach di button, atau menggantikan action print.

Hasilnya:

Nah sekarang, "Bagaimana mengimplementasikan AmtInWords di Jasper Report-Adempiere?"  Setelah baca-baca. Ternyata lebih mudah daripada saat mengimplementasikan di JasperReport via Scriplet. Dengan menggabunkan dengan Adempiere, maka otomatsi semua class di Adempiere dapat di akses dari JasperReport. Jadi kita tinggal panggil class AmtInWords yang telah ada di Adempiere. Prakteknya...

Kita gunakan parameter sebagai inputan yang akan dikonvert jadi terbilang. Pada JasperReport kita tambah Field untuk menampilkan terbilang tersebut. Tipe field String. 
Isikan Expr-nya: new org.compiere.util.AmtInWords_IN().getAmtInWords($P{param1})

Coba di compile...
Eh hasilnya:

Errors compiling ./testJasper2.jasper.
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. org.compiere.util.AmtInWords_IN cannot be resolved to a type

Hal ini terjadi karena class-class adempiere (adempiere.jar) belum dapat diakses di IReport. Untuk itu tambahkan adempiere.jar di classpath iReport. (Saat adempiere.jar telah masuk di classpath, maka tiap kali compile akan terasa lebih lama, walau yang dicompile tidak memakai adempiere.jar)

Sebenarnya kita bisa langsung gunakan report di Adempiere tanpa perlu meng-compile. Jika memang yakin report betul, langsung kita save repot di folder report Adempiere, dan run Adempiere. Hasilnya:
Nah jadi kan. Silahkan dicoba dan di kembangkan. Karena dengan bisa mengakses class-class di Adempiere, maka kita bisa melakukan banyak hal. 

By the way, setelah mencoba, ada bug di 342. Yaitu ketika window hasil repot muncul, dan tidak kita close. Maka window itu tetap muncul walau kita melakukan logout dan login lagi dengan session yang berbeda.