Masih ingat posting sebelumnya tentang scriptlet dan iReport? Itu loh, modul object yang berisi event fill data di iReport. Waktu itu memang saya sudah berhasil membuat report yang menggunakan scriplet. Saya test, berhasil. Masalahnya adalah ketika akan meng-upload report tersebut ke Jasper Server.
JasperServer menggunakan server Tomcat (karena JSP), maka ketika saya upload report, class scriplet nya tidak ikut ter-upload. Ketika report di buka melalui JasperServer, maka akan muncul pesan:
Hal ini menunjukkan bahwa class scriptletnya tidak dikenali. Bagaimana caranya agar class tersebut dikenali? Dari manual JasperServer, kita harus menambah Resources berupa file JAR yang berisi class scriptlet.
JasperServer menggunakan server Tomcat (karena JSP), maka ketika saya upload report, class scriplet nya tidak ikut ter-upload. Ketika report di buka melalui JasperServer, maka akan muncul pesan:
SOBOScriptlet cannot be resolved to a type
Hal ini menunjukkan bahwa class scriptletnya tidak dikenali. Bagaimana caranya agar class tersebut dikenali? Dari manual JasperServer, kita harus menambah Resources berupa file JAR yang berisi class scriptlet.
Caranya, pertama buat JAR terlebih dahulu. Jika sudah, pilih report, kemudian Add Resource. Pilih Upload From File System dan ambil file JAR yang telah dibuat tadi.
Selanjutnya tekan next, dan isikan:
Selanjutnya tekan next, dan isikan:
* Name | ||
* Label | ||
Description | ||
Type | Jar |
Name dan Label harus diisi sesuai dengan nama Scriptlet, biasanya [Nama Scriptlet] + "Scriptlet". Untuk lebih jelasnya, coba liat di jrxml nya.
Setelah itu, tekan next sampai selesai dan save.
Sekarang, coba buka report ber scriptlet tersebut.
Loh!!! Sekarang koq malah errornya ganti?
org.springframework.webflow.ActionExecutionException:Lama sekali saya berkutat dengan error ini sampe akhirnya hari ini saya tahu solusinya! Error diatas adalah akibat class scriptlet yang kita buat membutuhkan parrent object yaitu
Exception thrown executing [AnnotatedAction@59090
targetAction = com.jaspersoft.jasperserver.war.action.ViewReportAction@156186b,
attributes = map[[empty]]] in state 'verifyData' of flow 'viewReportFlow';
nested exception is com.jaspersoft.jasperserver.api.JSExceptionWrapper:
net.sf.jasperreports.engine.JRException:
Errors were encountered when compiling report expressions class file:
1. The type it.businesslogic.ireport.IReportScriptlet cannot be resolved.
It is indirectly referenced from required .class files
/*
^
1 errors
it.businesslogic.ireport.IReportScriptlet
Sedangkan si JasperServer tidak meng-include JAR yang berisi IReportScriptlet (iReport-1.2.4.jar) di direktori library-nya. Untuk itu, coba copy JAR tersebut di [TOMCAT DIR]/common/lib
dan [TOMCAT DIR]/webapps/jasperserver/WEB-INF/lib
Selanjutnya restart tomcat, dan semuanya beres.
Akhir kata...ceile...sok pidato, agar scriptlet anda dapat digunakan, maka hal yang perlu di lakukan:
- Bundle class-class scriptlet di satu JAR
- Upload jar
- Enable Scritplet di JasperServer dengan mengcopy iReport-1.2.4.jar (file bisa berbeda) ke direktory lib Tomcat
2 komentar:
Saya sudah coba jasper + scriptlet jalan dengan lancar di IDE Ireport, tapi saya bingung meletakkan class dari scriptlet tadi ke direktory server adempiere.
Musti diletakkan dimana ya mas ?
Wah saya klo di Adempiere blm coba. Saya baru coba untuk di JasperServer (WEB server untuk menampilkan iReport).
Tapi logikanya, class scriptlet di jadikan 1 directory dgn class reportnya
Posting Komentar