Fuentes de datos de informes
Las fuentes de datos son contenedores de datos estructurados. Mientras genera el informe, el motor JasperReports obtiene datos de las fuentes de datos. Los datos se pueden obtener de las bases de datos, archivos XML, matrices de objetos y colección de objetos. Vimos en el capítulo Llenado de informes , el método fillReportXXX () espera recibir una fuente de datos del informe, que tiene que rellenar, en forma denet.sf.jasperreports.engine.JRDataSource objeto o un java.sql.Connection (cuando los datos del informe se encuentran en una base de datos relacional).
La interfaz JRDataSource tiene solo dos métodos, que deben implementarse:
public boolean next () lanza JRException;
En el momento de completar el informe, el motor de informes llama a este método en el objeto de fuente de datos cuando se itera a través de los datos.
public Object getFieldValue (JRField jrField) lanza JRException;
Este método proporciona el valor para cada campo de informe en el registro de fuente de datos actual.
La única forma de recuperar datos de la fuente de datos es utilizando los campos del informe. Hay varias implementaciones predeterminadas de la interfaz JRDataSource, dependiendo de la forma en que se adquieran los registros en la fuente de datos.
Implementaciones de fuentes de datos
La tabla que se muestra a continuación resume las fuentes de datos y sus clases de implementación:
Fuente de datos | Clase de implementación |
---|---|
JDBC | net.sf.jasperreports.engine.JRResultSetDataSource |
JavaBean | net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource |
Basado en mapas | net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource |
TableModel | net.sf.jasperreports.engine.data.JRTableModelDataSource |
XML | net.sf.jasperreports.engine.data.JRXmlDataSource |
CSV | net.sf.jasperreports.engine.data.JRCsvDataSource |
XLS | net.sf.jasperreports.engine.data.JRXlsDataSource |
Vacío | net.sf.jasperreports.engine.JREmptyDataSource |
Fuentes de datos JDBC
Clase JRResultSetDataSourcecraps un objeto java.sql.ResultSet . Se trata de las implementaciones de fuentes de datos más utilizadas cuando los datos del informe se extraen de una base de datos relacional. Si en su lugar se pasa una java.sql.Connection al motor, este ejecuta primero la consulta relacionada y almacena el objeto java.sql.ResultSet devuelto en una instancia de JRResultSetDataSource.
Fuentes de datos JavaBean
Clases JRBeanArrayDataSource y JRBeanCollectionDataSourcerepresentan implementaciones que pueden envolver matrices y colecciones de objetos JavaBean. Cada objeto dentro de la matriz o la colección se verá como un registro en este tipo de fuente de datos. El mapeo entre una propiedad JavaBean particular y el campo de informe correspondiente se realiza mediante convenciones de nomenclatura. El nombre del campo de informe debe ser el mismo que el nombre de la propiedad JavaBean como se especifica en las especificaciones de JavaBeans.
En todos los ejemplos de este tutorial, hemos utilizado JRBeanCollectionDataSource.
Fuentes de datos basadas en mapas
Las clases de implementación JRMapArrayDataSource y JRMapCollectionDataSourceson útiles si la aplicación principal ya almacena los datos de informes disponibles en la memoria como objetos java.util.Map . Cada objeto Mapa de la colección o matriz envuelta se considera un registro virtual en la fuente de datos y el valor de cada campo de informe se extrae del mapa utilizando el campo de informe denominado como clave.
Fuentes de datos de TableModel
En muchas aplicaciones del lado del cliente, los datos se muestran en formato tabular. Un requisito común en muchas aplicaciones es permitir que el usuario imprima este formato tabular como un informe. Clase de implementaciónJRTableModelDataSourcehace que la tarea de generar informes en formato tabular sea trivial para las aplicaciones Swing. Esta clase envuelve un objeto javax.swing.table.TableModel. Se puede acceder a las columnas del objeto TableModel envuelto por sus nombres o por sus índices basados en 0.
Fuentes de datos XML
Clase JRXmlDataSourcees una implementación de fuente de datos basada en DOM, que usa expresiones XPath para seleccionar datos del documento XML. Los registros en la fuente de datos XML están representados por elementos de nodo seleccionados mediante la expresión XPath. Los valores de campo se recuperan de cada registro utilizando la expresión XPath proporcionada por la descripción del campo (elemento <fieldDescription> en JRXML).
XPath es un lenguaje utilizado para navegar a través de los atributos y elementos de un documento XML. Puede encontrar más información sobre XPath enhttp://www.w3.org/TR/xpath.
Fuentes de datos CSV
JRCsvDataSourcerepresenta una implementación para fuentes de datos, que recuperan sus datos de archivos de texto estructurados; generalmente CSV. Los valores de campo se recuperan utilizando su índice de columna.
Fuentes de datos XLS
JRXlsDataSourcerepresenta una implementación para fuentes de datos, que recuperan sus datos de documentos de Excel. El mapeo de campo de informe para esta implementación de fuente de datos también se basa en el índice de columna de campo.
Fuentes de datos vacías
La clase JREmptyDataSource, simula una fuente de datos con un número determinado de registros vacíos virtuales en su interior. Las herramientas de la interfaz de usuario lo utilizan para ofrecer la funcionalidad básica de vista previa de informes, o en plantillas de informes especiales, o con fines de prueba y depuración.
Fuentes de datos rebobinables
los net.sf.jasperreports.engine.JRRewindableDataSourceextiende la interfaz básica de JRDataSource . Agrega solo un método, llamado moveFirst (), a la interfaz. Este método está destinado a mover el cursor al primer elemento de la fuente de datos.
Las fuentes de datos rebobinables son útiles cuando se trabaja con subinformes colocados dentro de una banda que no puede dividirse debido a la configuración isSplitAllowed = "false" y no hay suficiente espacio en la página actual para que se genere el subinforme.
Todas las implementaciones de fuentes de datos anteriores son rebobinables, excepto la JRResultSetDataSource, ya que no admite mover el puntero de registro hacia atrás. Esto plantea un problema solo si esta fuente de datos se utiliza manualmente para ajustar un java.sql.ResultSet antes de pasarlo al subinforme. No hay ningún problema, si la consulta SQL reside en la plantilla de subinforme, ya que el motor la ejecutará nuevamente al reiniciar el subinforme en la página siguiente.
Proveedores de fuentes de datos
La biblioteca JasperReports tiene una interfaz net.sf.jasperreports.engine.JRDataSourceProvider. Esto ayuda a crear y eliminar objetos de origen de datos. Al crear una plantilla de informe utilizando herramientas GUI, se necesita una herramienta especial para personalizar la fuente de datos del informe. JRDataSourceProvider es la forma estándar de conectar fuentes de datos personalizadas en una herramienta de diseño. Una implementación personalizada de esta interfaz debe implementar los siguientes métodos que permitan la creación y eliminación de objetos de fuente de datos y también métodos para enumerar los campos de informe disponibles dentro de la fuente de datos si es posible:
public boolean supportsGetFieldsOperation();
public JRField[] getFields(JasperReport report)
throws JRException, UnsupportedOperationException;
public JRDataSource create(JasperReport report) throws JRException;
public void dispose(JRDataSource dataSource) throws JRException;