JRXML Best Practices
Halaman ini merangkum aturan dan jebakan yang ditemukan saat menulis/memperbaiki JRXML untuk InfiniteERP (runtime JasperReports 6.0.0). Latar belakang versi ada di halaman JasperReports.
Contents
Aturan Kompatibilitas
- Namespace root:
http://jasperreports.sourceforge.net/jasperreports(jangan ganti ke namespacejaspersoft.com— itu gaya file baru Studio, dan tidak konsisten dengan report existing). - Ekspresi ditulis sebagai Java valid, bukan gaya Groovy. Contoh:
new Integer($V{No_Urut}.intValue()+1). - Deklarasikan semua field yang dipakai di
<field>dengan class Java yang benar:- Uang/numerik:
java.math.BigDecimal - Tanggal:
java.sql.Timestamp - String:
java.lang.String
- Uang/numerik:
- Font: pakai logical font (
SansSerif,Serif,Monospaced) kecuali ada font extension jar di server.
Jebakan yang Sudah Ditemukan
1. Path absolut untuk gambar
Report existing me-hardcode path seperti:
<imageExpression><![CDATA["/home/zaien_aji/appl/sahila/modules/.../ssd_logo.png"]]></imageExpression>
Ini gagal render di mesin/user lain. Solusi: parameter direktori gambar:
<parameter name="IMAGE_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["."]]></defaultValueExpression>
</parameter>
...
<imageExpression><![CDATA[$P{IMAGE_DIR} + "/ssd_logo.png"]]></imageExpression>
2. Rectangle selalu ber-outline hitam
Elemen <rectangle> selalu digambar dengan garis tepi 1pt berwarna forecolor (default hitam), di samping fill backcolor. Untuk balok warna bersih (accent bar, latar blok total), samakan keduanya:
<reportElement mode="Opaque" x="0" y="84" width="565" height="3"
forecolor="#224435" backcolor="#224435" .../>
Jika hanya backcolor yang di-set, balok tipis (height 1–3) akan terlihat kehitaman karena tercampur border.
3. Variable mati sisa template
Variable dengan calculation="Sum"/Average tetapi <variableExpression> kosong adalah sisa template iReport — tidak dipakai dan aman dihapus.
4. Atribut versi baru di file lama
Atribut seperti splitType pada <band> (milik JR 6.x) bisa muncul di file lama karena pernah dibuka di Jaspersoft Studio. Compile tetap OK (parser mengabaikannya), tetapi iReport 5.6 dapat mengacaukannya saat edit-save. Untuk file yang masih dirawat di iReport, hapus atribut tersebut.
Pola Kalkulasi
Report existing melakukan kalkulasi di SQL (PostgreSQL), bukan di ekspresi report:
- Pajak:
ci.grandtotal - ci.totallines as pajak - Terbilang: fungsi custom database
terbilang(grandtotal) - Format tanggal Indonesia:
CASE EXTRACT(MONTH FROM ...)+to_char
Ikuti pola yang sama kecuali ada alasan memindahkannya ke report — query mengambil langsung dari skema Openbravo/ADempiere (c_invoice, c_invoiceline, c_bpartner, dst).
Trik Layout
Satu sel, dua baris (nama produk + deskripsi)
Buat dua text field bertumpuk di kolom yang sama; hilangkan border yang bertemu agar terlihat seperti satu sel:
- Elemen atas:
<bottomPen lineWidth="0.0"/> - Elemen bawah:
<topPen lineWidth="0.0"/>
Tabel tanpa border penuh (gaya modern)
- Header kolom: hanya
<bottomPen lineWidth="1.0" lineColor="#224435"/> - Baris detail: hanya
<bottomPen lineWidth="0.5" lineColor="#E0E0E0"/>di setiap sel (menjadi separator tipis antar-baris) - Penekanan total: balok
<rectangle>berlatar warna muda, bukan kotak border
Setelah Menulis: Verifikasi
Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat JRXML Local Verification.