Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So generieren Sie einen IReport entsprechend der Benutzereingabe in der Netbean-GUI

Zunächst einmal haben Sie die Art der Anwendung, die Sie erstellen möchten, nicht angegeben, daher bin ich in meiner Antwort etwas allgemein. Sie haben auch nicht erwähnt, ob Sie es bereits geschafft haben, Ihren ersten Bericht zu erstellen (ich meine, ohne Benutzereingaben entgegenzunehmen). Also, unten zeige ich den benötigten Teil zum Generieren eines JasperReports:

public void generateReport(ActionEvent actionEvent) throws FileNotFoundException {

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(PopulateBean.createBeanCollection());
Map parameters = new HashMap();
 
try {
    InputStream is = new FileInputStream(new File("Source path to template.jrxml"));
    OutputStream os=new FileOutputStream(new File("Resulting report.pdf"));
     
    JasperDesign jasperDesign = JRXmlLoader.load(is);
    JasperReport jasperReport =
        JasperCompileManager.compileReport(jasperDesign);

    JasperPrint jasperPrint =
        JasperFillManager.fillReport(jasperReport, parameters, ds);

    JasperExportManager.exportReportToPdfStream(jasperPrint, os);
} catch (JRException e) {
      e.printStackTrace();
}

}

Dieser Code sollte in Ihre Anwendung integriert werden. Der Teil, nach dem Sie fragen, ist:

Map parameters = new HashMap();

Sie müssen nur die vom Benutzer eingefügten Eingaben in diese Karte einfügen. Wenn Sie beispielsweise eine JSF-Seite haben, können Sie den Wert ihrer UI-Komponente nehmen und in dieser Zuordnung speichern

parameters.put("type_code", getTypeCodeUIComponent().getValue());

Im obigen Code sehen Sie, dass diese Karte an den Bericht übergeben wird:

JasperFillManager.fillReport(jasperReport, parameters, ds);

Das einzige, was bleibt, ist Ihre Berichtsabfrage in iReport zu bearbeiten. Zuerst erstellen Sie einen Parameter mit genau demselben Namen wie dem, der in die Karte eingefügt wurde (in diesem Beispiel "type_code". Beachten Sie, dass die Groß- und Kleinschreibung beachtet wird). Zweitens sollten Sie eine WHERE-Klausel verwenden, in der Sie die Typspalte basierend auf diesem Parameter filtern, siehe unten:Und hier sind einige Tutorials:1 und 2

Hoffe, das hilft!