Scriptlets en el plugin de iReport en Netbeans

Trabajando con Scriptlets en el plugin de iReport en Netbeans


Tarde o temprano tenía que comenzar a escribir sobre lo que más me gusta: la programación. Así que teniendo la necesidad de hacer un reporte con parámetros opcionales en JasperReports,  los cuales tienen su pega  y uno que otro quebradero de cabeza. Y una cosa me llevó a la otra, para resolver el problema de los parámetros opcionales lo cual explico en Trabajando con parámetros opcionales en JasperReports llegué a tener que resolver lo que aquí nos ocupa, los famosos Scriplets, por lo que no estaría de más que también lo leyeran.


Primero que nada ¿Qué son los Scriptlets? … Bueno, básicamente son clases java que heredan de la clase JRDefaultScriptlet de la librería de JasperReports para que puedan ser reconocidas en un reporte y poder invocar sus métodos como si se tratara de cualquier variable o parámetro.


Ahora bien, el caso mío es que no estoy diseñando mi reporte en iReport directamente sino en el plugin de Netbeans, por lo que el proceso es un tantito diferente respecto al classpath del iReport que es lo que normalmente encontramos en los tutoriales de la red.


Mi necesidad era darle formato a un valor de la clase java.util.Date para ser usado en el query SQL del reporte, ya que el formato que devuelve el método .toString() de la clase no nos devuelve  exactamente el formato que necesitamos, por lo que hice el respectivo método que devuelva el formato  de la fecha personalizado a nuestro gusto.


El caso es que para poder invocar un método de nuestra clase dentro de un reporte de JasperReports, primero debemos compilar dicha clase en un .jar y luego asignarlo al classpath del plugin de Netbeans, así que manos a la obra.


Lo primero es crear un proyecto en Netbeans del tipo Librería de Clases Java y alojar nuestra clase ahí.



En mi caso nombré el proyecto como "ScriptletsJasper", pero le pueden llamar como quieran.



Ahora agregamos nuestra clase al proyecto, yo le llamé "FormatoScriptlet", pero nuevamente le pueden llamar como les parezca mejor, lo importante es que herede de JRDefaultScriptlet como ya habíamos dicho anteriormente y agregamos nuestro método dentro de ella.



Guardamos y compilamos el proyecto dándonos como resultado el .jar que necesitamos, en mi caso quedó "ScriptletsJasper.jar" en la carpeta "dist" del proyecto, el cual podemos copiar en la ubicación de nuestra preferencia.


Teniendo ya nuestra clase empaquetada en un .jar vamos a definir la ruta respectiva en el classpath del plugin de Netbeans (no en el classpath del IDE), para eso vamos al menú "Tools / Options" de Netbeans y en la ventana que se nos presenta seleccionamos "iReport" y luego la pestaña "Classpath", presionamos el botón "Add JAR" y seleccionamos el archivo .jar que habíamos creado.



Lo siguiente sería invocar nuestra clase dentro de un reporte, por lo que nos ponemos en ello inmediatamente. Nos vamos a las "Properties" del reporte donde vamos a modificar tres propiedades.



Seleccionamos "Scriptlet class" y escribimos el nombre de nuestra clase con la estructura de paquetes completa, es decir que si tenemos "org.paquete.clase" o "com.paquete.clase" debemos especificar toda la estructura.


Verificamos que en la propiedad "Language" esté seleccionado Java, y si no lo está … pues, lo hacemos.


Y por último necesitamos "Imports" para que el reporte reconozca nuestra clase. La seleccionamos y en la ventanita presionamos el botón "Add" y de nuevo especificamos el nombre de nuestra clase con su estructura de paquetes completa.



Con lo que hemos hecho hasta este momento veremos en la ventana "Report Inspector" en la sección "Scriptlets" del reporte, que se ha creado un ítem llamado "REPORT" y con la propiedad "Scriptlet Class" conteniendo el nombre de nuestra clase, además podemos ver el parámetro "REPORT_SCRIPTLET" con el tipo de dato FormatoScriptlet y es a través del cual invocaremos los métodos de nuestra clase.



Ahora ya estamos listos para usar nuestro método en cualquier lugar del reporte.


Basados en la guía mencionada anteriormente Trabajando con parámetros opcionales en JasperReports tomaré la línea de código en el "Default Value Expression" del parámetro opcional "WhereFechaInicial" para invocar el método en cuestión.


($P{FechaInicial} != null ? " AND FECHAGEN >= '" + $P{FechaInicial} + "'" : "") 


Dentro de esta línea tomamos el parámetro $P{FechaInicial} y lo sustituímos por lo siguiente:


$P{REPORT_SCRIPTLET}.getFecha($P{FechaInicial},"dd/MM/yyyy" 


Quedando de la siguiente manera:


($P{FechaInicial} != null ? " AND FECHAGEN >= '" +
 $P{REPORT_SCRIPTLET}.getFecha($P{FechaInicial},"dd/MM/yyyy") + "'" : "")


Si ejecutamos el reporte podremos comprobar que el método nos devuelve la fecha formateada con el patrón que le indicamos.


Espero que esta guía le pueda servir a más de alguno y que no pase todas las dificultades que yo pasé en su momento.


EmoticonosEmoticonos