Sie können als Datenquelle für JR nicht nur einzelne Masken nehmen, sondern auch die Ausgabe von Makro-Masken. Dadurch können die verschiedenartigsten Informationen aus den normalen Masken für übergreifende Berichte genutzt werden.
Das folgende Beispiel zeigt, wie im KLR-Bericht "Berichtsblatt: Kennzahlen aus der Kostenrechnung" Teile verwendet werden, um einen eigenen JR zu erzeugen, der wiederum Elemente des Makroberichts als Unterbericht nutzt.
Zunächst rufen Sie den Makrobericht auf:
JasperReports-Handbuch makro html.png
Das Bild zeigt die ersten drei Elemente des Makros, sie werden mit einer Ordnungsnummer durchnummeriert.
Wir laden dazu die XML-Datenquelle herunter, die XML-Datenquelle binden wir wie gewohnt in JasperReports ein:
JasperReports-Handbuch makro datenquelle.png
Dann klicken wir im Browser über den Tabellen den Button rechts von "Bericht entwerfen" → Leerer Bericht. Die JRXML-Datei speichern wir wie gewohnt.
Im Designer sehen wir nun bei den Feldern eine erweiterte Liste:
JasperReports-Handbuch makro jrxml.png
Wir sehen also, daß die Ergebnisspalten mit einem Präfix für die Tabellennummer versehen sind, z.B. "tab_0". Dadurch können wir die Tabellen und somit auch die jew. Spalten eindeutig identifizieren. Dies ist gleichzeitig der Hauptbericht. Das Detail-Band löschen wir (ist nicht nutzbar), stattdessen aktivieren wir ein Summary Band.
Dann erzeugen wir den Unterbericht für Studierenden-VZÄ. Dazu speichern wir die obige jrxml-Datei z.B. mit dem Namen makro_beispiel_ub_stud.jrxml und entfernen das Titel-Band und Seitenfuß-Band. Dann fügen wir im Designer einen Parameter "ordnr" hinzu:
JasperReports-Handbuch makro ub param.png
Der Unterbericht bekommt dann in der Report Query folgende Änderung:
JasperReports-Handbuch makro ub report query.png
Die Ordnungsnummer wird vom Hauptbericht übergeben und dient dazu, in der XML-Datenquelle auf die einzelne Tabelle zu filtern.
Zusätzlich geben wir noch einen weiteren Filter ein, damit die Summenzeilen aus der Originaltabelle nicht in die Kreuztabelle aufgenommen werden:
JasperReports-Handbuch makro ub filter.png
Damit der Unterbericht auch "stand-alone" ausführbar ist, können Sie dem Parameter "ordnr" auch einen Standardwert zuweisen, hier z.B. "2":
JasperReports-Handbuch makro ub ordnr default.png
Nun können wir die Kreuztabelle mit dem Assistenten erzeugen. Für unser Beispiel enthält die Kreuztabelle Studierenden-VZÄ nach Studiengang und Fachkennzeichen:
JasperReports-Handbuch makro ub crosstab.png
Wir speichern den Unterbericht und binden ihn in den Hauptbericht im Summary Band ein. Dabei vergeben wir wie gewohnt die Parameter XML_LOCALE und XML_NUMBER_PATTERN. Außerdem erzeugen wir den Parameter "ordnr", und weisen diesem den Wert 2 zu, weil die Studierenden-Tabelle die Ordnungsnummer 2 hat (s.o.):
JasperReports-Handbuch makro hauptbericht ub params.png
Damit ist die Konfiguration beendet, der Bericht sieht so aus:
JasperReports-Handbuch makro hb erg.png
Weitere Unterberichte lassen sich analog hinzufügen.
Hinweis zum Einbinden im Servlet: Unterberichte arbeiten nur mit der Datenquelle XML, daher müssen Sie die Datei des Hauptberichts mit dem Suffix "_xmlsource" versehen.