Produire des rapports avec Xojo

Une classe Xojo qui produit des rapports avec la plateforme Bootstrap.

Produire des rapports avec Xojo

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 ;
La classe ReportWriter

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.

rchampagneca/reportwriter
Xojo reporting class using BootStrap 4. Contribute to rchampagneca/reportwriter development by creating an account on GitHub.
Dépôt source sur GitHub