Signaler les sources de données

Les sources de données sont des conteneurs de données structurées. Lors de la génération du rapport, le moteur JasperReports obtient les données des sources de données. Les données peuvent être obtenues à partir des bases de données, des fichiers XML, des tableaux d'objets et de la collection d'objets. Nous avons vu dans le chapitre Filling Reports , la méthode fillReportXXX () s'attend à recevoir une source de données du rapport, qui doit se remplir, sous la forme denet.sf.jasperreports.engine.JRDataSource objet ou un java.sql.Connection (lorsque les données du rapport se trouvent dans une base de données relationnelle).

L'interface JRDataSource n'a que deux méthodes, qui devraient être implémentées -

  • public boolean next () lance JRException;

    • Au moment du remplissage du rapport, cette méthode est appelée sur l'objet source de données par le moteur de reporting lors de l'itération des données.

  • L'objet public getFieldValue (JRField jrField) lance JRException;

    • Cette méthode fournit la valeur de chaque champ de rapport dans l'enregistrement de source de données actuel.

La seule façon de récupérer des données à partir de la source de données consiste à utiliser les champs du rapport. Il existe plusieurs implémentations par défaut de l'interface JRDataSource, selon la manière dont les enregistrements de la source de données sont acquis.

Implémentations de sources de données

Le tableau ci-dessous résume les sources de données et leurs classes d'implémentation -

La source de données Classe d'implémentation
JDBC net.sf.jasperreports.engine.JRResultSetDataSource
JavaBean net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource
Basé sur la carte net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource
TableModèle 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
Vide net.sf.jasperreports.engine.JREmptyDataSource

Sources de données JDBC

Classe JRResultSetDataSourcecraps un objet java.sql.ResultSet . Il s'agit de l'implémentation de source de données la plus couramment utilisée lorsque les données de rapport sont extraites d'une base de données relationnelle. Si un java.sql.Connection est passé au moteur à la place, il exécute d'abord la requête associée et stocke l' objet java.sql.ResultSet renvoyé dans une instance JRResultSetDataSource.

Sources de données JavaBean

Des classes JRBeanArrayDataSource et JRBeanCollectionDataSourcereprésentent des implémentations qui peuvent encapsuler des tableaux et des collections d'objets JavaBean. Chaque objet à l'intérieur du tableau ou de la collection sera vu comme un enregistrement dans ce type de source de données. Le mappage entre une propriété JavaBean particulière et le champ de rapport correspondant est effectué par des conventions de dénomination. Le nom du champ de rapport doit être le même que le nom de la propriété JavaBean tel que spécifié par les spécifications JavaBeans.

Dans tous les exemples de ce tutoriel, nous avons utilisé JRBeanCollectionDataSource.

Sources de données cartographiques

Les classes d'implémentation JRMapArrayDataSource et JRMapCollectionDataSourcesont utiles si l'application parente stocke déjà les données de rapport disponibles en mémoire sous forme d' objets java.util.Map . Chaque objet Map du tableau ou de la collection enveloppé est considéré comme un enregistrement virtuel dans la source de données, et la valeur de chaque champ de rapport est extraite de la carte à l'aide du champ de rapport nommé comme clé.

Sources de données TableModel

Dans de nombreuses applications côté client, les données sont affichées sous forme de tableau. Une exigence courante dans de nombreuses applications est de permettre à l'utilisateur d'imprimer ce format tabulaire sous forme de rapport. Classe d'implémentationJRTableModelDataSourcerend la tâche de générer des rapports à partir du format tabulaire triviale pour les applications Swing. Cette classe encapsule un objet javax.swing.table.TableModel. Les colonnes de l'objet TableModel encapsulé sont accessibles soit par leurs noms, soit par leurs index de base 0.

Sources de données XML

Classe JRXmlDataSourceest une implémentation de source de données basée sur DOM, qui utilise des expressions XPath pour sélectionner des données dans le document XML. Les enregistrements de la source de données XML sont représentés par des éléments de nœud sélectionnés via l'expression XPath. Les valeurs de champ sont extraites de chaque enregistrement à l'aide de l'expression XPath fournie par la description de champ (élément <fieldDescription> dans JRXML).

XPath est un langage utilisé pour naviguer dans les attributs et les éléments d'un document XML. Vous trouverez plus d'informations sur XPath surhttp://www.w3.org/TR/xpath.

Sources de données CSV

JRCsvDataSourcereprésente une implémentation pour les sources de données, qui récupèrent leurs données à partir de fichiers texte structurés; généralement des CSV. Les valeurs de champ sont récupérées à l'aide de leur index de colonne.

Sources de données XLS

JRXlsDataSourcereprésente une implémentation pour les sources de données, qui récupèrent leurs données à partir de documents Excel. Le mappage de champ de rapport pour cette implémentation de source de données est également basé sur l'index de colonne de champ.

Sources de données vides

La classe JREmptyDataSource, simule une source de données avec un nombre donné d'enregistrements virtuels vides à l'intérieur. Il est utilisé par les outils d'interface utilisateur pour offrir des fonctionnalités de base d'aperçu de rapport, ou dans des modèles de rapport spéciaux, ou à des fins de test et de débogage.

Sources de données rembobinables

le net.sf.jasperreports.engine.JRRewindableDataSourceétend l' interface de base de JRDataSource . Il ajoute une seule méthode, appelée moveFirst (), à l'interface. Cette méthode est destinée à déplacer le curseur vers le premier élément de la source de données.

Les sources de données rembobinables sont utiles lorsque vous travaillez avec des sous-rapports placés dans une bande qui n'est pas autorisée à se diviser en raison du paramètre isSplitAllowed = "false" et qu'il n'y a pas assez d'espace sur la page en cours pour que le sous-rapport soit rendu.

Toutes les implémentations de source de données ci-dessus peuvent être rembobinées à l'exception de JRResultSetDataSource, car il ne prend pas en charge le déplacement du pointeur d'enregistrement vers l'arrière. Cela pose un problème uniquement si cette source de données est utilisée manuellement pour encapsuler un java.sql.ResultSet avant de le transmettre au sous-rapport. Il n'y a pas de problème, si la requête SQL réside dans le modèle de sous-rapport, car le moteur l'exécutera à nouveau lors du redémarrage du sous-rapport sur la page suivante.

Fournisseurs de sources de données

La bibliothèque JasperReports a une interface net.sf.jasperreports.engine.JRDataSourceProvider. Cela aide à créer et à supprimer des objets de source de données. Lors de la création d'un modèle de rapport à l'aide des outils GUI, un outil spécial pour personnaliser la source de données du rapport est nécessaire. JRDataSourceProvider est le moyen standard de brancher des sources de données personnalisées dans un outil de conception. Une implémentation personnalisée de cette interface doit implémenter les méthodes suivantes qui permettent de créer et de supprimer des objets de source de données, ainsi que des méthodes pour répertorier les champs de rapport disponibles dans la source de données, si possible -

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;