Subreports hochladen
Da Subreports in JasperReports nicht in den Hauptreport eigebettet werden können, müssen die Subreports zusätzlich zum Hauptreport abgespeichert werden. Um dies zu ermöglichen, steht das zusätzliche Unterformular Subreports zur Verfügung.
Zusätzlich zur Subreport-Datei (JasperReports-Datei mit Endung *.xml oder *.jrxml) muss ein Parametername angegeben werden. Der Subreport wird als JasperReport mit Hilfe des Parameternamens an den Report übergeben.
Subreports im Reportdesign
Um den Subreport im Hauptreport verwenden zu können, muss nun ein Parameter mit dem Namen des zuvor in der Administrationsmaske angegebenen Parameternamens und dem Typ
net.sf.jasperreports.engine.JasperReport
erstellt werden.
Anschließend müssen Sie die Eigenschaften des Subreportbereichs (im Hauptformular) in iReport bearbeiten. Hier müssen Sie folgende Einstellungen vornehmen ( Supreport properties):
- Subreport Expression = $P{<parametername>} (z.B.: $P{SUBREPORT_A})
- Expression Class = net.sf.jasperreports.engine.JasperReport
- Connection type = 'Use a datasource expression'
- Data Source Expression = ((org.nuclos.server.report.api.JRNuclosDataSource)$P{REPORT_DATA_SOURCE}).getDataSource("<Name der Datenquelle in Nuclos>")
Um Subreports in einer tieferen Hierarchie zu verwenden, müssen Sie die tiefer liegenden Subreports über die Subreport-Parameter vom Hauptreport zum entsprechenden Subreport durch reichen. (siehe Abbildung unten)
Datenquellen für Subreports
Um dem Subreport auch Daten zuzuweisen, fügen Sie ebenfalls in den Eigenschaften des Subreports einen Subreport-Parameter mit der Bezeichnung REPORT_DATA_SOURCE hinzu. Als Ausdruck für diesen Parameter geben Sie
((org.nuclos.server.report.api.JRNuclosDataSource)$P{REPORT_DATA_SOURCE}).getDataSource("<Datenquelle>") an, wobei <Datenquelle> der Name der Datenquelle ist (siehe Abbildung oben). Bei der Verwendung von Datenquellen für Subreports ist zu beachten, dass der Subreport im Detailbereich des übergeordneten Reports platziert werden muss, da nur so die Verbindungs- und Kontextinformationen an den Subreport erfolgreich übergeben werden können. Wenn Sie für die angegebene Datenquelle in Nuclos Datenquellen-Parameter definiert haben, so wird versucht, diese anhand der Felder des aktuell verarbeiteten Hauptdatensatzes zu füllen. Dies ist in identischer Weise für tiefer geschachtelte Subreports möglich.
Beispiel:
Sie haben eine Datenquelle Kunden definiert mit den Ausgabeattributen intid und kundenname. Sie erstellen eine zweite Datenquelle, über die Sie einen Subreport befüllen möchten. Legen Sie einen Parameter intid an und geben Sie den Parameter in der Bedingung des referenzierenden Attributs in dem untergeordneten Businessobjekt (z.B. Ansprechpartner) an. Bei Unterformularen handelt es sich beispielsweise in der Regeln um das Feld INTID_T_UD_GENERICOBJECT. Bei der Reportausführung wird die Datenquelle für jeden Hauptdatensatz (bzw. übergeordneten Datensatz) erneut ausgeführt und die Parameter des Sub-Datenquelle mit den Werten des übergeordneten Datensatzes gefüllt.
Falls Sie Datenquellen für Subreports verwenden und weiterhin die Subreports in iReport auch zu Testzwecken kompilieren wollen, müssen Sie die Datei nuclos-reportapi.jar, die Teil der Distribution ist, zum iReport-Klassenpfad hinzufügen.
LastPageFooter im Subreport
Wird ein gesamtes Formular im Subreport verwendet, müssen zwei Regeln beachtet werden:
- Das Band, in dem der Subreport ausgeführt wird, muss maximiert werden (= Seitengröße)
- Das Subreport-Property "Run to Bottom" muss gesetzt sein.
Besonders wichtig bei der Verwendung von Last Page Footer.
Wie man einen Sub-Sub-Report erstellten findet man hier:
Kommentar
Rico Clauß sagt:
Da gerade die Zeit fehlt diesen Artikel zu aktualisieren ein paar Anmerkungen:
1. Für die Verwendung einer Spalte aus der Hauptdatenquelle in einer Subreportdatenquelle reicht es aus einen Parameter mit dem gleichen Namen in der Subreportdatenquelle anzulegen. Dafür sind keine weiteren Schritte in der Jasperreports-Vorlage nötig.
2. Mit Hilfe der Definition von Parametern innerhalb einer Reportvorlage sowie einer Subpreportvorlage und der Übergabe des Parameters im Hauptreport an den Subreport (unter Eigenschaften im Subreport) steht der Parameter auch im Subreport zur Verfügung.
3. Für den interessanteren Fall - Übergabe von Parametern aus der Reportvorlage an die Subreportdatenquelle - habe ich hingegen noch keine Lösung gefunden.