Difference between revisions of "JRXML Best Practices"

From InfiniteERP Wiki
Jump to: navigation, search
(Dokumentasi)
 
 
Line 68: Line 68:
 
Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat [[JRXML Local Verification]].
 
Jangan menganggap JRXML benar hanya dari membaca XML. Compile (dan bila perlu render) secara lokal — lihat [[JRXML Local Verification]].
  
[[Category:Development]]
+
[[Category:Development ERP]]

Latest revision as of 22:27, 16 September 2026

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.

Aturan Kompatibilitas

  • Namespace root: http://jasperreports.sourceforge.net/jasperreports (jangan ganti ke namespace jaspersoft.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
  • 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.