Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 2 Nächste Version anzeigen »

Subreports (PDF)

Seit der Version 2.4 können bei Reports und Formularen mit Ausgabeformat PDF Subreports integriert werden.

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.

Reporting subreport1.gif

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 Parameternames 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 tieferliegenden Subreports über die Subreport-Parameter vom Hauptreport zum entsprechenden Subreport durchreichen. (siehe Abbildung unten)

Reporting subreport2.gif

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 Vewendung von Datenquellen für Subreports ist zu beachten, dass der Subreport im Detailsbereich 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 der untergeordnete Entität (z.B. Ansprechpartner) an. Bei Unterformularen handelt es sich beispielsweise in der Regeln um das Feld INTID_T_UD_GENERICOBJECT. Bei der Reportausfürung 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.

Subreport im Subreport

In manchen Fällen benötigt man auch die Möglichkeit ein Subreport in einem Subreport einzubinden. Bei diesem Vorgang muss man jedoch beachten, dass der zweite Report von dem Hauptreport bis nach hinten mit durchgereicht wird.

Beispiel: Es soll ein Angebot erstellt werden. In diesem Angebot gibt es die Hauptdaten die im Hauptreport festgelegt werden und es gibt die Produkte die im ersten Subreport definiert werden und zu diesen Produkten gibt es geweils noch Produktarten, die dann im zweiten Subreport definiert werden.

Im Hauptreport erstellt man für beide Subreports einen eigenen Parameter z.B. subProdukte und subProduktPositionen. Die erstellung eines solchen Parameters ist weiter oben beschrieben. Wenn man den ersten Subreport in den Hauptreport einbindet muss man zusätzlich zu den oben beschriebenen Angaben noch einen Parameter mit angeben. Dies Funktioniert folgendermaßen:

* Parameters = (Name) subProduktPositionen, (Expression) $P{subProduktPositionen}

im ersten Subreport muss nun ebenfalls ein Parameter definiert werden, dieser muss den gleichen Namen haben, wie der Parameter für den zweiten Subreport im Hauptreport. In unserem Fall subProduktPositonen. Dort kann man nun den zweiten Subreport einbinden. Hier muss dann kein Parameter zusätzlich mit angegeben werden.

Bei zwei Subreports empfiehlt es sich natürlich für jeden Subreport eine eigene Datenquelle zu besitzen, die dann den Subreport befüllt. Bei den Datenquellen gibt es dann auch noch eigenschaften, die man berücksichtigen sollte.


 


Wie im Bild gezeigt, wird im Hauptreport unter Eigenschaften die Parameter des "SubSubReports" angegeben.

Subreport im Subreport.png

Datenquellen für Subreports im Subreport

Bei den Datenquellen genügt es nun nicht mehr nur als Parameternamen intid zu vergeben, sondern nun muss man in jeder Datenquelle die für den Report definiert wird eindeutige Namen vergeben, so dass die Id´s weitergereicht werden können.

In der Datenquelle für den Haupreport muss nun als Parameter in dem obengenannten Beispiel für das Angebot "intidAngebot" angegeben werden, worauf dann die Bedingung verzweigt. In der Datenquelle für den ersten Subreport (subProdukte) muss nun die intid der Tabelle für den ersten subReport (hier Produkt) mit aufgenommen werden und als Alias intidProdukt angegeben werden. Dies ist notwendig, damit der zweite Subreport auf diese ID verweisen kann, denn dort muss als Parameter der Alias eingesetzt werden, worauf dann die Bedingung verweisen kann.

Variablen von Subreport zu Hauptreport übergeben

Um Werte von einem Subreport in dem Hauptreport anzeigen zu lassen, geht man folgendermaßen vor:

Im Subreport: - Erstelle eine Variable V1 und setze den Wert und Typ den sie berechnen soll

Im Hauptreport:

  • Erstelle eine zweite Variable V2 mit dem gleichen Typ wie V1
  • Wähle den Subreport im Hauptreport aus und gehe rechts auf properties
  • Ganz unten gibt es "Return Values"
  • Gehe auf "Add"
  • Subreport variable: name von V1
  • Local destination var: V2
  • Calculation Type: system
  • Keine Stichwörter