Reporting dengan NetBeans
Kemaren dulu ada pertanyaan di milis netbeans-indonesia@yahoogroups tentang masalah Report di Netbeans. Inti kasusnya adalah seperti berikut:
Aplikasi beserta report-nya jalan dengan sukses pada komputer si programmer, tapi ketika si programmer memindahkan aplikasi-nya ke komputer lain reportnya tidak mau jalan atau tidak mau tampil.
OK sekarang mari kita coba membuat sebuah latihan tentang reporting menggunakan iReport dan NetBeans IDE dan peralatan-peralatan yang perlu dipersiapkan adalah sebagai berikut :
- NetBeans 5.5
- iReport 1.3.1
- MySQL Server (atau bisa juga database server yang lain)
- JDK 1.6
Setelah peralatan telah siap, mari kita buat latihannya dan langkah-langkahnya adalah sebagai berikut:
- Bikinlah sebuah New Project dan berilah nama ReportingInNetBeans.
- Pada project inspector, klik kanan root project kemudian pilih New > JFrame Form kemudian pada jendela New JFrame isikan Frame Report pada Class Name, dan pada kolom isian Package pilihlah reportinginnetbeans. Setelah itu tambahkanlah beberapa komponen pada JFrame tersebut sehingga tampilannya menjadi seperti gambar dibawah ini:

Click to large - Setelah mengatur tampilan JFrame seperti pada gambar diatas, sekarang tekanlah tombol SHIFT+F11 agar NetBeans membuatkan sebuah direktori distribusi untuk kita yaitu direktori dist. Setelah itu, masuklah pada files inspector kemudian buatlah sebuah direktori yaitu direktori Report dibawah direktori dist yang berfungsi untuk menampung seluruh file template yang kita desain pada iReport dan tampilan dari langkah ke 3 ini terlihat seperti gambar dibawah ini:

Click to large - Setelah membuat sebuah direktori Report sekarang waktunya untuk mengkonfigurasi file build-impl.xml agar ketika kita melakukan proses Clean direktori Report ini tidak ikut terhapus. Sekarang bukalah file build-impl.xml yang terdapat pada direktori nbproject seperti gambar dibawah ini:

Click to large
Setelah file build-impl.xml terbuka, sekarang carilah CLEANUP SECTION seperti dibawah ini:526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
<!-- =============== CLEANUP SECTION =============== --> <target name="deps-clean" depends="init" unless="no.deps"/> <target name="-do-clean" depends="init"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> </target> <target name="-post-clean"> <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> </target> <target name="clean" depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products."/>
Setelah itu editlah baris 534 sehingga hasilnya menjadi seperti dibawah ini:
526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
<!-- =============== CLEANUP SECTION =============== --> <target name="deps-clean" depends="init" unless="no.deps"/> <target name="-do-clean" depends="init"> <delete dir="${build.dir}"/> <delete file="${dist.jar}"/> <delete dir="${dist.javadoc.dir}"/> </target> <target name="-post-clean"> <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> </target> <target name="clean" depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products."/>
Setelah melakukan proses pengeditan seperti diatas simpanlah file konfigurasinya dan tutuplah NetBeans-nya agar mengurangi resource CPU
dan sekarang waktunya untuk membuat contoh report melalui iReport.
- Sebelum mulai menggunakan iReport, aturlah dahulu Data Source yang akan digunakan dengan cara pilih Data > Connections/Data Source dan aturlah koneksinya menjadi seperti gambar dibawah ini:

Click to large - Setelah selesai mengkonfigurasi Data Source, sekarang buatlah report baru dengan cara menekan File > New Document. Setelah template report muncul, sekarang tentukanlah Report Query yang akan digunakan untuk report ini. Untuk menentukan Report Query yang akan digunakan tekanlah Data > Report Query dan masukkanlah statement SQL sehingga tampilannya menjadi seperti dibawah ini:

Click to large - Setelah menentukan Report Query, sekarang design-lah report-nya hingga menjadi seperti gambar dibawah ini:

Click to largekemudian simpanlah dengan nama Mahasiswa_Report.jrxml pada direktori Report yang telah dibuat pada langkah ke 3 hingga struktur direktori project NetBeans kita menjadi seperti gambar dibawah ini:

Click to large - Setelah melakukan proses penyimpanan, sekarang coba jalankan report-nya dengan menggunakan active connection dengan cara tekan menu Build > Execute (with active connection) dan jika tidak ada masalah maka report yang telah anda design akan tampak seperti gambar dibawah ini:

Click to large - Report telah jadi, sekarang coba bukalah project ReportingInNetBeans kemudian pada tombol yang berfungsi untuk menampilkan reportnya berikanlah evet dengan cara klik kanan kemudian pilih Events > Action > actionPerformed kemudian pastekanlah kode dibawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
// TODO add your handling code here: jButton1.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); Connection con = null; try { String jdbcDriver = "com.mysql.jdbc.Driver"; Class.forName(jdbcDriver); String url = "jdbc:mysql://localhost/latihanibatis"; String user = "root"; String pass = "rahasia"; con = DriverManager.getConnection(url, user, pass); Statement stm = con.createStatement(); try { Map<string, Object> prs = new HashMap<string, Object>(); JasperReport JRpt = JasperCompileManager.compileReport("./dist/Report/Mahasiswa_Report.jrxml"); JasperPrint JPrint = JasperFillManager.fillReport(JRpt, prs, con); JasperViewer.viewReport(JPrint, false); } catch (Exception rptexcpt) { System.out.println("Report Can't view because : " + rptexcpt); } } catch (Exception e) { System.out.println(e); } jButton1.setCursor(Cursor.getDefaultCursor());
Setelah itu, coba tekanlah tombol F6 untuk menjalankan projectnya dan jika tidak ada masalah maka report yang telah anda design di iReport akan tampil jika tombol yang berfungsi menampilkan reportnya ditekan
- Report sudah jalan dengan sangat sempurna di NetBeans, sekarang bagaimana jika kita ingin mencoba aplikasi ini pada komputer lain yang hanya mempunyai JRE saja ? Untuk menjawab pertanyaan ini, sekarang tekanlah tombol SHIFT+F11 agar netbeans membuatkan file *.jar untuk aplikasi kita. Setelah proses CLEAN and BUILD selesai, sekarang cobalah kopikan direktori dist/ ke komputer yang lain dan coba jalankan. Berhubung saya dirumah tidak mempunyai 2 komputer, maka saya kopikan ke user yang lain dan hasilnya seperti berikut :
Ini tampilan di user anton ( Anggap saja di PC Lain
)

Click to largeIni tampilan di user javamaniac ( Anggap saja di PC Lokal )

Click to large
Silahkan dicoba dikomputer lain kalau tidak percaya, reportnya pasti akan jalan dengan sempurna seperti pada waktu kita jalankan dari NetBeans IDE
Resource :
- Sample Project ReportingInNetBeans.zip
- Mahasiswa.sql
@khairan: bisa dimasukin di variabel mas, buat dulu 1 variabel dengan nama misalkan result, trs didalam variabel tsb memanggil field yg dr database kemudian bisa dipakai if didalam variabel tsb (di dlm variabel expression)
Utk masalah yg ke 2,coba di cek dulu apakah di direktori yg ditampilkan dipesan error itu file-nya ada atau tidak ?
@Deny: Apakah pak Deny ingin sampai ada koma-nya ? Soalnya saya ga pernah pakai koma pak. Biasanya sih cuma menambahkan thousand separator ajah sih.
mas saya mau tanya nech..
tentang masalah report di netbeans.. saya pakek ireport versi 3.1.1,
setelah saya buat di IDE netbeansnya bisa di tampilkan dan di previus..
tapi kenapa kok mo di tampilkan di javanya tidak bisa jasper Reportnya tidak mau muncul apa karna pengaruh salah intall ireport ya mass..
tolong pencerahaannya..
Mas saya ingin tanya jalan keluar dari pertanyaan alam32 dan Senja yang mempunyai kesalahan seperti
Terima Kasih Sebelumnya
Exception in thread “AWT-EventQueue-0″ java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:146)
at pemesanan.PemesananView.makePreview(PemesananView.java:468)
at pemesanan.PemesananView.daftarPelangganActionPerformed(PemesananView.java:391)
at pemesanan.PemesananView.access$1600(PemesananView.java:32)
at pemesanan.PemesananView$12.actionPerformed(PemesananView.java:250)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.digester.Digester
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
… 32 more
@ardy: Itu kurang library commons-digester, coba tambahin dulu library-nya
Sudah mas karena sebelumnya menggunakan versi 0.9.1 dan bisa berjalan karena penggabungan tabel nya sudah terlalu banyak dan tidak adanya sum otomatis maka saya upgrade ke versi 3.5.1 beserta project 3.5.1 nya.
Bagaimana caranya mas??
thanks
Makasih ya mas…. Tutorialnya berguna banget… Saya mau langsung nyobain nih
Sudah jalan mas setelah saya ganti versi lib dengan yang lebih baru jasperreport-project3.5.2. walaupun halan tapi ada keterangan seperti dibawah
Feb 9, 2010 5:31:09 AM net.sf.jasperreports.engine.component.ComponentsEnvironment findComponentBundles
WARNING: Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components
Apa maksudnya mas???
Thanks