Produire des rapports avec Xojo
Une classe Xojo qui produit des rapports avec la plateforme Bootstrap.
Introduction
Bien que Xojo Report soit assez bon pour des rapports simples à partir de bases de données, j'avais besoin d'un générateur de rapport qui puisse intégrer des champs calculés et prendre en charge l'affichage adaptatif tant à l'écran qu'à l'impression.
Caractéristique principales
ReportWriter est une composante Xojo pour créer, afficher et imprimer des rapports :
- Cette composante Xojo intègre la plateforme Bootstrap (version 4.0.0) ;
- Elle ne dispose pas toutefois d'un éditeur dans le runtime ;
Structure du rapport
ReportWriter est orienté surtout vers la production de rapports sous forme de tableaux bien qu'il soit aussi possible de produire des documents tels que des lettres et des formulaires.
Un rapport est constitué de bandes telles que l'en-tête de la page, le nombre et les titres des colonnes du rapport. En arrière plan, les diverses méthodes de ReportWriter créent les composantes HTML prises en charge par la plateforme Bootstrap.
Dim d As New Date
ReportWriter1.createReport(ReportTitleFld.Text)
// 3 columns table
Dim Col1 As New Dictionary
Dim Col2 As New Dictionary
Dim Col3 As New Dictionary
Dim rs as RecordSet
rs = App.inMemoryDB.SQLSelect("Select * FROM TEAM;")
ReportWriter1.writeText("Report run date : " +d.SQLDate, "class":"text-left .text-primary")
If rs <> Nil Then
// Report heading
col1.Value("text") = "Name"
col1.Value("class") = "cell-center text-success"
col2.Value("text") = "Coach"
col2.Value("class") = "cell-center"
col3.Value("text") = "City"
col3.Value("class") = "cell-center text-info"
ReportWriter1.tableCreate(col1, col2, col3)
ReportWriter1.clearColumns(col1, col2, col3)
While Not rs.EOF
col1.Value("text") = rs.Field("Name").StringValue
col1.Value("class") = "cell-center text-success"
col2.Value("text") = rs.Field("Coach").StringValue
col3.Value("text") = rs.Field("City").StringValue
col3.Value("class") = "cell-center text-info"
ReportWriter1.tableWrite(col1, col2, col3)
rs.MoveNext
Wend
ReportWriter1.tableEnd
Else
ReportWriter1.writeText("*** No teams ***", "class":"text-center")
End If
// End of reporting
ReportWriter1.finishReport
// Display Report in default browser
ReportWriter1.ShowReport
Illustrons l'utilisation de ReportWriter par l'exemple ici-haut.
- La méthode createReport ouvre un fichier temporaire HTML et ajoute la feuille de style CSS et les scripts de Bootstrap.
- La méthode writeText prend deux paramètres: le texte à afficher et les classes Bootstrap pour contrôler l'alignement, l'habillage et le poids du texte.
- Ensuite, nous initialisons une table avec 3 colonnes par la méthode tableCreate. La méthode prend comme arguments une liste de dictionnaires qui contiennent chacun le titre de l'entête de colonne et les options d'entête de table Bootstrap.
- Puis, nous faisons une itération sur les enregistrements du RecordSet. Chacun des champs d'un enregistrement sont copiés sur une colonne distincte et formaté avec les classes Bootstrap de texte par la méthode tableWrite.
- La méthode finishReport ajoute les balises HTML de fin.
- La méthode ShowReport ouvre le navigateur de l'utilisateur et affiche le rapport.
Le classe ReportWriter ainsi qu'une application de démonstration sont disponibles sur GitHub.