Code zum Erstellen eines Berichts mit dem Typ 'JasperReport' schreiben

Ein Berichtstreiberprogramm ist ein übliches EGL-Programm, das mithilfe einer '.jasper'-Datei einen Bericht ausführt, der aus einer Berichtsdesigndatei kompiliert wird.

Das folgende Beispiel zeigt ein Berichtstreiberprogramm, in dem Daten aus einer bestimmten Datenbankverbindung verwendet werden:
program reportDriverProgram type BasicProgram 
    
  function main()
    SQLLib.defineDatabaseAlias("customer", 
      "jdbc:derby:C:\\databases\\CustomerDatabase");
    SQLLib.connect("customer", "admin", "admin");
    
    myReport Report = new Report();
    myReportData ReportData = new ReportData();
    myReport.reportDesignFile = 
      "C:\\Workspace\\MyProject\\bin\\reportModel.jasper";
    myReport.reportDestinationFile = "C:\\temp.jrprint";
    myReport.reportExportFile = "C:\\MyReport.pdf";
    myReportData.connectionName = "customer";
    myReportData.sqlStatement = 
      "select * from EGL.CUSTOMER order by CUSTOMER_ID desc";
    myReport.reportData = myReportData;

    reportLib.fillReport(myReport, DataSource.sqlStatement);
    reportLib.exportReport(myReport, ExportFormat.pdf);

  end
    
end

Wenn in Escapezeichenfolgen das Backslash-Zeichen (\) verwendet wird, müssen Sie in Pfadnamen einen doppelten Backslash verwenden.

In der folgenden Tabelle wird der Code des oben stehenden Beispiels erklärt:
Code Erläuterung
SQLLib.defineDatabaseAlias("customer",
  "jdbc:derby:C:\\databases
    \\CustomerDatabase");
SQLLib.connect("customer",
  "admin", "admin");
Stellt eine Verbindung zu einer Datenbank bereit und definiert einen Aliasnamen für die Datenbank mithilfe von Funktionen in der EGL-Bibliothek 'SQLLib'.
myReport Report = new Report();
Erstellt eine neue Berichtsvariable für die Darstellung des Berichts.
myReportData ReportData = 
  new ReportData();
Erstellt eine neue Berichtsdatenvariable für die Darstellung der Daten im Bericht.
myReport.reportDesignFile = 
  Position;
Legt die Position der '.jasper'-Datei fest, die aus der Berichtsdesigndatei kompiliert wird.
myReport.reportDestinationFile = 
  Position;
Legt die Position einer temporären Datei fest, die während der Verarbeitung des Berichts verwendet wird.
myReport.reportExportFile = 
  Position;
Legt die Position des exportierten Berichts fest.
myReportData.connectionName = 
"customer";
Legt die Datenbankverbindung, die der Bericht verwendet, durch den zuvor definierten Datenbankaliasnamen fest.
myReportData.sqlStatement = 
  SQL-Anweisung;
Legt die Datenbankzugriffsanweisung fest, die Daten für den Bericht bereitstellt.
myReport.reportData = myReportData;
Ordnet die Berichtsvariable der Berichtsdatenvariable zu.
reportLib.fillReport(myReport, 
  DataSource.sqlStatement);
Füllt den Bericht mit Daten.
reportLib.exportReport(myReport, 
  ExportFormat.pdf);
Führt den Bericht aus und exportiert ihn.

Bericht aus einem angepassten Datensatz füllen

Der folgende Codeausschnitt zeigt, wie Sie einen Bericht füllen können, indem Sie Ihren eigenen internen Datensatz als Datenquelle verwenden. Definieren Sie zuerst an einer Stelle außerhalb des Programms einen Datensatz wie im folgenden Beispiel:
Record myRecord type BasicRecord
    author String;
    description String;
    title String;
end
Schreiben Sie als nächstes die Funktion zum Füllen und Ausführen des Berichts:
//Variablendeklarationen
myReport Report = new Report();
myReportData ReportData = new ReportData();

recArray        myRecord[];
recArrayElement myRecord;

//Funktion, die den Code für das Ausführen des Berichts enthält
function makeReport()
    //Initialisieren der Positionen für die Berichtsdatei
    myReport.reportDesignFile = 
        "c:\\workspace\\report_project\\" :: 
        "bin\\report_package\\myReport.jasper";
    myReport.reportDestinationFile = 
        "c:\\temp\\myReport.jrprint";

    //Abrufen der Berichtsdaten 
    populateReportData();
    myReport.reportData = myReportData;

    //Füllen des Berichts mit Daten
    reportLib.fillReport(myReport, DataSource.reportData);

    //Exportieren des Berichts im Format HTML
    myReport.reportExportFile = "c:\\temp\\myReport.html";
    reportLib.exportReport(myReport, ExportFormat.html);
end

function populateReportData()
    recArrayElement.author="Jane Austen";
    recArrayElement.title="Northanger Abbey";
    recArrayElement.description = "British Novel";
    recArray.appendElement(recArrayElement);

    recArrayElement.author = "Jane Austen";
    recArrayElement.title="Emma";
    recArrayElement.description = "British Novel";
    recArray.appendElement(recArrayElement);

    recArrayElement.author = "Charles Dickens";
    recArrayElement.title="Our Mutual Friend";
    recArrayElement.description = "British Novel";
    recArray.appendElement(recArrayElement);

    recArrayElement.author = "Gustave Flaubert";
    recArrayElement.title="Madame Bovary";
    recArrayElement.description = "French Novel";
    recArray.appendElement(recArrayElement);

    recArrayElement.author = "M. Lermontov";
    recArrayElement.title="Hero of Our Time";
    recArrayElement.description = "Russian Novel";
    recArray.appendElement(recArrayElement);
end

Exportformat auswählen

JasperReports speichert mit Daten gefüllte Berichte als temporäre Zieldatei (Erweiterung '.jrprint'), aus denen von JasperReports mehrere Exportdateien erstellt werden können. Sie können mit Daten gefüllte Berichte im Format PDF, HTML, XML, CSV (durch Kommas getrennte Werte, die von Tabellenkalkulationsprogrammen gelesen werden können) und als einfache Textausgabe exportieren. Zum Exportieren des Berichts verwenden Sie die Funktion reportLib.exportReport() im EGL-Berichtstreiberprogramm zusammen mit der Berichtsvariable und einem Parameter, der das Format des Berichts angibt.

Die Funktion reportLib.exportReport() erkennt folgende Parameter:
  • ExportFormat.html
  • ExportFormat.pdf
  • ExportFormat.text
  • ExportFormat.xml
  • ExportFormat.csv
Mit dem folgenden Code exportiert JasperReports einen Bericht beispielsweise als PDF-Datei:
myReport.ReportExportFile = "c:\\temp\\my_report.pdf";
reportLib.exportReport(myReport, ExportFormat.pdf);

Wichtig: Exportierte Berichte werden von JasperReports nicht automatisch aktualisiert. Wenn Sie das Berichtsdesign ändern oder wenn sich die Daten ändern, müssen Sie den Bericht neu mit Daten füllen und den Bericht erneut exportieren.


Feedback