Der Aufbau des Template-Satzes richtet sich immer an dem Aufbau der gesendeten Daten. Dieser Aufbau kann an zwei Stellen eingesehen werden:
1. Im oxaion Generator: hier wird die Struktur und damit der Aufbau des Beleges hinterlegt:


2. Durch Einblick in die ermittelten Daten eines Beleges: die ermittelten Daten eines Beleges werden in einem XML-Baum abgelegt und können innerhalb des Programms „Druckausgabe" (US000340R) mittels dem Menüeintrag „Dateninhalt anzeigen" (Kontextmenü) angezeigt werden:


Während im Generator lediglich die einzelnen Knoten des XML-Baumes dargestellt werden, so gibt der zeigt der Datensatz eines Beleges unter dem Knoten „Key" auch immer gleich die ermittelten Werte des Beleges je XML-Knoten an. 

Die JRXML-Templates müssen den gleichen Namen besitzen wie die Knoten im XML-Baum. Bsp. Knotenname = vakop  Templatename = vk20201_vakop.jrxml.
Bei Nichteinhaltung kann es zu Probleme beim Einlesen der einzelnen Knoten bzw. der Daten der Knoten kommen.

Der Ordner, welche den Templatesatz eines Beleges enthält besitzt den gleichen Namen wie das Druckprogramm (Name des Programms wie im oxaion Generator hinterlegt). Das Templates des im oxaion Generator hinterlegten Root-Knotens wird immer als erstes Template angesprochen.

 

In dem Programm MN50110R – „Jobsteuerungsparameter verwalten" kann man je Job, Firma, Mitarbeiter oder Beleg abweichende Ordnername und Root-Templates hinterlegen. 


In dem Root-Template sind automatisch alle Daten des XML-Root-Knotens verfügbar, man muss sie nicht manuell aus dem XML-Baum laden (jedoch müssen sie trotzdem in dem Template definiert werden!).
Soll nun ein bestimmter Kind-Knoten aus dem XML geladen werden, so muss hierzu ein weiteres Template (Template-Name = Knoten-Name) angelegt werden. Von dem Vater-Knoten auf den Kind-Knoten kann man über so genannte Platzhalter verzweigen:


Damit ein solcher Platzhalter auf das richtige Template verzweigt, die Daten lädt sind folgende Angaben notwendig (Eingabe im rechten Bereich von iReport bei den Eigenschaften): 

AufrufBedeutung

Print When Expression

Das Template sollte nur aufgerufen werden, wenn überhaupt ein Kind-Knoten vorhanden ist:

((TreeDataSource)$P{REPORT_DATA_SOURCE}).hasChildren("Knotenname")

Subreport Expression

Welches Template soll herangezogen werden?
new java.io.File($P{directory}, "Ordnername/Templatename.jasper")

Beispiel:
new java.io.File($P{directory}, "vk20201/vampos.jasper")

Expression Class

Java.io.Files

Connection Typ

Use Datasource Expression

Data Source Expression

Welcher Knoten soll geladen warden?
((TreeDataSource)$P{REPORT_DATA_SOURCE}).subReport("Knotenname")

Beispiel:
((TreeDataSource)$P{REPORT_DATA_SOURCE}).subReport("VAMPOS")


Ist ein Kindknoten auf einer Ebene mehrmals vorhanden, so werden diese Knoten automatisch nacheinander herangezogen (Beispiel Auftragspositionen – Knoten VAMPOS).

Mit diesen Platzhaltern kann aber nicht nur auf einen weiteren Kindknoten verzweigt werden. Ist z.B. ein Templates sehr groß, so dass man es besser in mehrere Teile untergliedert, so kann wie folgt vorgegangen werden:
Das eigentliche Template, z.B. vampos.jrxml enhält lediglich weitere Platzhalter auf die ausgelagerten Teile dieses Knotens, z.B. vampos_data01.jrxml und vampos_data02.jrxml. In diesem Fall können die Namen der ausgelagerten Teile beliebig bestimmt werden. Es empfiehlt sich jedoch den Knotennamen mit einzubeziehen. Dies erleichtert die Wartung enorm, da man somit durch die Namensgebung die Belegstruktur besser erkennen kann.
Bei der Anlage des Platzhalters ist hierbei zu achten, dass unter Data Source Expression keine neuer Knotenname angegeben wird, sondern mit dem aktuellen Knoten (und damit auch mit den gerade geladenen Daten) weitergearbeitet wird:


AufrufBedeutung

Data Source Expression

Welcher Knoten soll geladen warden?
((TreeDataSource)$P{REPORT_DATA_SOURCE}).currentSubReport()


  • Keine Stichwörter