Monday, May 25, 2009

Mail Merge dengan JasperReport - Passing Parameter ke JasperReport


Pada posting sebelumnya sudah disajikan cara menampilkan JasperReport di aplikasi Java. Kali ini akan disajikan pembuatan report tingkat mahir dengan memasukkan parameter ke dalam report.

Sebagai contoh kasus, akan diuraikan cara membuat Mail Merge atau surat massal, dengan ciri pembuatan surat massal yang mirip dengan sedikit perbedaan, misalnya tujuan surat, alamat, dan sebagainya. Untuk contoh sekarang misalnya membuat surat keterangan masih kuliah mahasiswa secara massal. Mahasiswa dibedakan ke dalam beberapa kelas.

Cara membuatnya:
  1. Buat desain report sesuai keinginan
  2. Tambahkan parameter dengan cara 
  • Buka view -- parameters
  • Klik tombol new
  • Beri nama parameter: KELAS
  • Pada type masukkan java.lang.String




  1. Buat desain report
  2. Edit query sehingga menjadi berikut:

SELECT
MAHASISWA."NIM" AS MAHASISWA_NIM,
MAHASISWA."NAMA" AS MAHASISWA_NAMA,
MAHASISWA."KELAS" AS MAHASISWA_KELAS
FROM
"APP"."MAHASISWA" MAHASISWA
WHERE
KELAS=$P{KELAS}






Langkah berikutnya tinggal menampilkannya ke aplikasi Java. Caranya mirip dengan posting sebelumnya:


    private void updateReport()
    {
        try
        {
            System.out.println("kompile report...");
            JasperDesign jasperDesign = JasperManager.loadXmlDesign("../report/mahasiswa.xml");
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            System.out.println("Selesai!");
            
            System.out.println("Pass parameter ke report!");
            String kelasId = comboKelas.getSelectedItem().toString();
            
            Map parameter = new HashMap();
            parameter.put("KELAS", kelasId);
            System.out.println("Selesai!");
            
            System.out.println("Buka koneksi database!");
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            Connection con = DriverManager.getConnection("jdbc:derby:mahasiswa");
            System.out.println("Selesai!");
            
            System.out.println("Buat JasperPrint!");
            JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameter, con);
            System.out.println("Selesai!");
            
            System.out.println("Tampilkan report!");
            displayReport(new JRViewer(jasperPrint));
            //JasperViewer.viewReport(jasperPrint, false);
            System.out.println("Selesai!");
        }
        catch (Exception e)
        {
            JDialog.setDefaultLookAndFeelDecorated(true);
            JOptionPane.showMessageDialog(this, "Gagal tampilkan report!\n" + e);
        }


Setelah metode tersebut dibuat, tinggal memanggilnya pada klik tombol. Hasilnya adalah sebagai berikut:



Sebagai contoh tersebut digunakan Java 1.4.2. Anda dapat mengkompilasi ulang dengan Java versi terbaru.

Kode selengkapnya dapat didownload di sini.