SENA, Regional Valle CEAI, Centro de Electricidad y Automatización Industrial. Instructor Jonatan Velasco Actividad Reportes en NetBeans con JasperReports Curso ADSI 13
A partir de la versión 6.0 de NetBeans, realmente se añadieron herramientas y mejoras que fomentan la productividad, desde el ya incorporado con anterioridad, soporte para C/C++, ahora también para Ruby, SOA, UML. En el momento de actualizar este artículo la fecha en que se liberó la versión 6.5 aun es muy reciente y de igual forma, trae importantes mejoras, por ejemplo el soporte para PHP, Python y Groovy.
¿iR epo eporr t en N etBe etBeans ans? ? Para los recien llegados al lenguaje Java, sobre todo aquellos provenientes de .NET seguramente ya se habrán preguntado si existe un Crystal Reports para Java! La respuesta es precisamente iReport. Pero iReport es solo un editor visual para generar los reportes por medio de la librería JasperReport JasperReport,, es decir, quien realmente hace los reportes es JasperReport, solo que al inicio, pues resultaba igualmente tedioso el escribir código no solo Java, sino también X M L . Por esta razón alguien pensó en crear una herramienta con la cual se pudieran diseñar los reportes de manera visual haciendo uso de JasperReports, y es así como surgió iReport. Después de todo esto, aun así para quienes usamos NetBeans como Entorno de Desarrollo quizá no era lo más adecuado tener que usar dos herramientas por separado, sin embargo en Febrero del 2008 salió este plugin de iReport para NetBeans lo cuál es una genial noticia para toda la comunidad Java. Una vez tengamos el plugin, para para instalarlo basta abrir NetBeans NetBeans 6.0 e ir al menú menú Tools–plugins y en la pestaña de downloaded agregar el plugin de iReport. Con esto no tienen excusa los programador p rogramadores es de otros lenguajes lengu ajes que les ha pasado por la cabeza probar algo de Java pero por temor o mitos de que Java es muy difícil y complicado no lo han hecho. Se tiene a la mano herramientas libres como el IDE Usuario ) NetBeans que les permitirá crear las GU I (Interfaces Gráficas de Usuario) usando el Drag&Drop (arrastrar y soltar) al estilo Visual Basic y ahora con este nuevo plugin de iReport, podrán diseñar los reportes visuales d e manera más fácil!
Cr eación de Repor tes en Java Ahora que ya tenemos incorporado iReport en NetBeans, vamos a ver como generar un sencillo reporte.
H ERRAM I ENTAS UTI LI ZADAS
NetBeans 6.5 o superior Plugin iReport para NetBeans 3.1.2 MySQL 5 El proyecto completo se puede descargar de aqui:
http://www.mediafire.com/?dz9cxgtigzt http://www.mundobyte.net/archivos/Java_2007/Ejemplo_Reportes.zip el archivo se llama Ejemplo_Reportes.zip
Connections/ D ataSour ces Una vez instalado el plugin y creada la BD, vamos a establecer la conexión a la Base de Datos por medio de JDBC pero antes de eso, debemos establecer el classpath donde se encuentra el driver JDBC para nuestro D B M S, en este caso el driver Connector/ J. Dicho conector viene por defecto con NetBeans, se puede encontrar en la ruta ide/ modules/ ext / En el menú Herramientas–Opciones buscamos en la parte superior un botón con el logo de iReport y le damos clic para posteriormente ir a la pestaña de CLASSPATH. Agregamos el fichero jar del driver y con esto ya podemos pasar a establecer la Conexión a la BD. Vamos al menú Herramientas – Report DataSources y pulsamos sobre el botón New para agregar una nueva conexión. Aparecerá una ventana como la mostrada en la imagen.
Usaremos una conexión JDBC que es la que debemos usar para conectarnos a DBMS como M ySQL, Posgr eSQL, Or acle, entre otros más, por lo cual seleccionaremos la segunda opción “NetBeans Dat aBase JD BC Connection”. Posteriormente pasaremos a otra ventana en donde debemos seleccionar la conexión que previamente establecimos en NetBeans
Una vez guardados los cambios deberemos agregar un archivo visual para diseñar nuestro reporte, para ello vamos al “source package” (Paquete de fuentes) y agregamos un “Empty Repor t” (si no aparece en la lista, lo buscamos en “otros”). Al hacer esto, aparecera en NetBeans el diseñador visual de iReport . Tendremos un área dividida varias regiones, PageFooter, columnFooter, columnHeader, etc. Para este ejemplo, solo vamos a utilizar las regiones de title, pageH eader, colum nH eader, detail y pageFooter , por lo cual deberemos ocultar las demás estableciendo un valor de 0. En uno de los paneles izquierdos que hay en NetBeans encontraremos algo como lo que muestra la siguiente imagen. Por lo tanto, deberemos seleccionar las regiones sobrantes y en el panel de propiedades que está en el lado derecho, debemos
establecer el valor de Band height a 0 y con esto notaremos que desaparecerá dicha región en el área de diseño. Una vez hecho lo anterior, solo deberemos tener en el área de diseño las 5 regiones mencionadas con anterioridad. Podemos observar que en el panel derecho tenemos una pequeña paleta de componentes. Entre ellos el Static Text y Text Field. La diferencia entre ambos es que el Static Text es en sí como su nombre lo dice, “Texto Estático”, es decir, nos va servir para poner los rótulos y títulos de nuestros reportes. En cambio, el Text Field sirve para mostrar los resultados de la consulta a la Base de Datos para generar nuestro reporte. Antes de hacer el diseño, primero vamos a establecer la consulta y a definir las variables necesarias. En el menú File–Report query deberemos escribir la consulta SQL y observamos los campos que nos trae en la parte de abajo. En el panel de la izquierda de iReport, veremos que al desplegar la opción de Fields, tendremos los campos que deseamos obtener con la consulta SQL. En este caso, tendremos nam e, telefono, email . Ahora ya estamos listos para diseñar el reporte. Ya comentaba que tenemos una pequeña paleta con algunos componentes y mencionábamos la diferencia entre el Stati c Text y Text Fi eld. Ahora, prosigue hacer el diseño, es decir, la presentación visual de nuestro reporte. La r egión details es la que contendrá los datos que devuelva la consulta SQL, por lo tanto, es de suponerse que estos deberán ser componentes Text Field y no Static Text. Para insertar los componentes, los seleccionamos del panel derecho presionando con el mouse y sin soltarlo, arrastramos al área de diseño. Al igual que pasa con los controles SWING, al seleccionar un componente tenemos el panel de propiedades, así podemos modificar el color, tamaño y tipo de fuente. Entendido esto, procedemos a realizar un diseño similar al mostrado por la figura:
Al agregar un Text Field distinto a los que nos trae la consulta a nuestra área de diseño, observaremos que tienen el texto de $F{field} . Deberemos cambiar la palabra “field” que se encuentra dentro de las llaves y poner el nombre de los campos que nos devolverá la consulta SQL. Si a estas alturas hay aún algún despistado que no sabe de lo que hablo, me refiero a los campos de la consulta SQL que hicimos: “SELECT nam e, telefono, email FROM contacts” Y estos campos son los que encontraremos en el panel izquierdo al desplegar la opción de Fields. Ahora bien, para asignar esos campos a los Text Fields, basta con dar doble click al Text Field y editarlo ó bien seleccionar el TextField y en el panel de propiedades ir a la pr opiedad Expr ession y ahí cambiar el valor. Con esto, si hemos hecho todo correctamente, ya podemos tener una vista de nuestro reporte, así que podemos ir al menú Designer y ejecutar el reporte con Run repor t. La figura muestra el resultado de ejecutar dicho reporte!
Ahora, como se observa en la figura, obtenemos un reporte en base a una consulta SELECT sin ninguna condición W H E R E. A menudo, en la realidad casi siempre los reportes serán bajo ciertos criterios, por ejemplo, en el caso más sencillo de este ejemplo, desearíamos mostrar los datos del contacto que tenga el id = 3. Para ello necesitamos agregar un parámetro. En el panel izquierdo, vamos a la opci ón Par am eters, click derecho, Add y escogemos parameters.
Le asignamos algún nombre a dicho parámetro. Posteriormente debemos modificar la consulta, si anteriormente teníamos: SELECT name, telefono, email FROM contacts Ahora solo agregaremos la clausula WHERE con el parámetro que acabamos de agregar: SELECT nam e, telefono, email FROM contacts W H E RE i d = $P{id} donde $P{ } indica que se trata de un parámetro. “id” es el nombre de este parám etro.
Por último, para ver los resultados debemos establecer un valor por default. Esto se consigue seleccionando el parámetro y en el panel de propiedades establecer a Default Value el valor “1” ó del número de id que se quiera visualizar (poner el valor con comillas dobles). Con esto al ejecutar de nuevo el reporte, ya obtendremos un nuevo reporte bajo cierto criterio. Lo único que falta ahora es crear el código para poder llamar desde nuestra aplicación Java al reporte, por ejemplo, que al dar click en un botón, el reporte se ejecute, ya sea que mande directo a impresión ó nos muestre la vista previa como en la figura de arriba. Si se percataron que al ejecutar el reporte desde la vista de diseño, automáticamente se genero un archivo con el mismo nombre que el reporte pero bajo la extensión .jasper . Este archivo es el que deberemos mandar a llamar desde nuestra aplicación java. Existen varias clases que nos servirán para ejecutar al reporte desde nuestra aplicación, por ejemplo la clase JasperPr int, JasperReport , etc. Todas estas clases se encuentran en el paquete net.sf.jasperreports y dicho paquete está en la librería jasperreports-3.7.3.jar . Aquí hay algo importante que señalar, cuando se descarga el programa de iReport trae consigo mismo a la librería de JasperReport (recordemos que la que genera en si los reportes es JasperReport, iReport es solo la herramienta visual para diseñar los reportes y hace uso de JasperReport), además también trae algunas otras librerías que son necesarias para poder ejecutar los reportes y además algunas otras librerías que serán útiles por ejemplo cuando se desee generar reportes con gráficos, histogramas, exportar a Excel, etc. Entonces, lo que se hace cuando se trabaja con el programa de iReport, es propiamente diseñar el reporte ahí, una vez compilado, el archivo .jasper que nos genera lo copiamos a nuestra carpeta del proyecto, lu ego abrimos NetBeans, se escribe el código pero obtendremos algunos errores pues NetBeans no sabrá en que paquetes se encuentran las clases que arriba mencione (JasperPrint, JasperReport , etc.). Entonces lo que se hace es agregar la librería jasperreports-3.7.3.jar (panel izquier do, click derecho en Libr ar ies– add Jar/ Folder ) y con esto ya no obtendremos errores. Ahora bien, no solo era necesario agregar esa librería, también es necesario agregar otras más que se encuentran en la carpeta lib, que son:
bsh-2.x.x.jar itext-2.x.x.jar commons-digester-1.7.jar commons-collections-2.x.x.jar commons-login-1.x.x.jar commons-beanutils-1.8.0.jar commons-javaflow-20060411.jar
También en nuestro código debemos importar las librerías a utilizar y estas son: import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.view.JasperViewer; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperCompileManager; Entonces, lo que deben hacer es copiar la carpeta JasperReport a C:\ ó a la carpeta de Java ó a algún otro lado donde ustedes deseen y entonces agregar todas las librerías de dicha carpeta al proyecto de NetBeans.
Al hacer esto, ya no obtendremos los errores y podremos ejecutar el reporte desde la aplicación Java.
Para abrir el reporte, se debe generar a partir de un evento de botón, así que debes crear una interfaz y en el evento del botón debes:
Compilar el fichero .jrxml Para compilar el fichero .jrxml y generar el fichero .jasper, desde código podemos poner algo como esto JasperReport report = JasperCompileManager.compileReport("C:\\informes \\Informe.jrxml");
Rellenar el informe con datos Ahora hay que rellenar el informe con datos. Desde código se hace con algo como esto JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), conn);
Donde conn es la conexión con la base de datos. No es necesario indicar el select ni nada similar, puesto que esta información está incluida en el .jrxml.
Obtener el pdf Finalmente, para obtener el fichero .pdf, la línea es algo como esto JasperExportManager.exportReportToPdfFile(print, "C:\\informes\\PDF's\\informe.pdf");
Donde el parámetro es el fichero de salida que deseamos.
Mostrar el informe en una vista previa Para mostrar el pdf escribimos algo como esto: JasperViewer jviewer= new JasperViewer(print,false); jviewer.setTitle("Reporte de Prueba"); jviewer.setVisible(true);