Usar DataSource XML para crear informes con iReport

Usar un DataSource XML para crear informes con iReport

Este tutorial es el siguiente de la “saga” de tutoriales relacionados con iReport que hay actualmente en www.adictosaltrabajo.com.

En este nuevo tutorial no vamos a crear nuestros informes usando la típica conexión a base de datos JDBC, sino que vamos a usar un fichero XML como fuente de datos (datasource) para rellenar nuestro informe.

Lo primero de todo es crear nuestro fichero XML que nos servirá de ejemplo para este tutorial.

Aquí les dejo el fichero ds-report.xml.

Una vez creado nuestro fichero xml arrancamos iReport, en este caso el tutorial lo he hecho usando iReport 2.0.2, y vamos a crear una nueva conexión/fuente de datos.

Cuando hacemos clic nos aparece una ventana y le damos a “nueva conexión…”. Seleccionamos la opción “Fuente datos fichero XML” y hacemos clic en “Próximo”.

En esta nueva pantalla es donde vamos a tener que configurar nuestro nuevo datasource o fuente de datos a partir de un fichero XML.

Escogemos un nombre para nuestro datasource, seleccionamos nuestro fichero xml que anteriormente hemos creado (“ds-xml.xml“) y elegimos la opción de crear una fuente de datos usando esta expresión y escribimos “/tutorial/categoria/doc“.

¿Qué siginfica esto? Esto significa que vamos a crear un nuevo datasource tomando como origen el nivel del nodo representado por la expresión “/tutorial/categoria/doc”.

La implementación de datasource usando XML permite acceder a ficheros XML usando expresiones XPath. El datasource se contruye a partir del nodo especificado por “/tutorial/categoria/doc” (expresión XPath).

Cada campo de nuestro informe puede usar una expresión XPath para acceder a valores, nodos hijos, padre, etc… Esta expresión se debe especificar en la descripción del elemento campo. Dicha expresión se evalúa a partir del nodo elegido como origen, en nuestro ejemplo será “/tutorial/categoria/doc”. Por ejemplo, si quisieramos acceder al nombre de la categoría usaríamos la expresión XPath “ancestor::categoria/@name“. Si quisieramos acceder al id de un nodo doc, usaríamos la expresión “@id“.

Para saber más sobre XPath, visite este tutorial de adictosaltrabajo.com Introducción a XPath.

Una vez creado el datasource correctamente vamos a diseñar nuestro informe. Aquí les dejo el informe que he usado para hacer este tutorial.

Como se dijo anteriormente, pasa poder acceder a los datos de nuestro datasource usaremos expresiones XPath que tendremos que colocar en la descripción de cada campo que queramos sacar en nuestro informe.Estos son los campos y las expresiones usada para la creación de este informe. Como se puede ver todos los tipos de campo son de tipo String y en la descripción del campo está la expresión XPath que junto con la expresión origen “/tutorial/categoria/doc” formará la expresión completa XPath para poder acceder al nodo/valor correcto.


Ahora sólo nos queda ejecutar el informe y ver el resultado final.

Pero también podemos hacer muchas más cosas, como por ejemplo crear subinformes. Vamos a hacer un ejemplo de un informe con un subinforme para que nos devuelva todos los tutoriales de cada una de las categorías.

El primer paso es crearnos el informe principal (o informe padre) como lo hemos hecho anteriormente en este mismo tutorial, con la única salvedad que cuando configuremos nuestro datasource vamos a elegir la opción de “Crear una fuente de datos usando esta expresión” y escribimos “/tutorial/categoria“.

Este es el aspecto del nuevo informe principal (tutorial-xml-subreport.jrxml)

La estructura de este informe es muy sencilla. Hemos creado un datasource a partir del mismo fichero xml pero esta vez hemos tomado como “origen” el nodo representado por la expresión “/tutorial/categoria“. Esto hará que el informe padre saque todas las categorías del fichero xml, es decir, ejb y jsf. Con el subinforme vamos a sacar todos los documentos (el campo “autor” y “titulo”) de cada categoría.

Para ello tenemos que ir a las propiedades del subinforme, a la pestaña “Subinforme” y en el apartado de “Conexión/Fuente de datos” tenemos que seleccionar la opción de “Usar expresión de fuente de datos” y poner ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource(“/categoria/doc”)

Esto creará un subdatasource para nuestro subinforme a partir del nodo origen “/doc“. El aspecto de nuestro subinforme (tutorial-xml-subreport_subreport0.jrxml) es este:

Con los siguientes campos:

Una vez creado nuestro informe, subinforme, integrado en el informe principal y configurado correctamente su “Conexión/Fuente de datos” sólo nos queda probarlo todo…

En nuestro negocio podemos encontrarnos casos en que sea necesario o mejor el uso de otras conexiones, por ello iReport soporta muchos tipos de conexiones o fuente de datos además de JDBC, como pueden ser ficheros XML, ficheros CSV, JavaBeans, EJBQL, etc…

En próximos tutoriales veremos algunas de ellas….