Kategorien
(Free-) Software iReport Programmierung

iReport – Mehrere Feldinhalte (Detail) in Variable zusammenfügen

JasperReports bietet die Möglichkeit mit Variablen zu arbeiten. Im folgenden Beispiel nutzen wir diese Möglichkeit um innerhalb eines Subreports Textzeilen die normal im Detailbereich ausgegeben würden, zunächst alle in einer Variable zusammenzuführen und diese dann am Schluß auszugeben.
Wofür kann das gut sein? Die folgende Lösung wurde benötigt, da die Anwendung welche den Report aufruft an dieser Stelle die einzelnen Textzeilen auf nur 70 Zeichen beschränkte. Dadurch konnte nicht die komplette Reportbreite genutzt werden und somit wurde wertvoller Platz verschwendet… hier nun die dazugehörige Lösung.

Nehmen wir an, es wird folgender Subreport genutzt um einen beliebigen Text, bestehend aus mehreren Textzeilen, im Report auszugeben:
iReport Subreport Textausgabe
Ein simpler Report, in dem es ein Title-Abschnitt gibt um einen Abstand der Ausgabe zum vorherigen Element zu erhalten. Dazu das eigentliche Textfeld $F{Text} im Detail-Abschnitt, über das dann die Textausgabe erfolgt.

Um alle Textzeilen, die so ausgegeben würden, zusammenzufassen sind nun folgende Schritte notwendig:

Zunächst eine neue Gruppe anlegen über ‚Ansicht -> Report Gruppen‘. Der Name ist frei wählbar, der Gruppenkopf bekommt eine Höhe von 0 und der Gruppenfuß eine von 12 (für unser einzeiliges Textfeld).

Dann eine neue Variable anlegen über ‚Ansicht -> Report Variablen‘.
Die Vorgaben sollten sein: Klasse = ‚java.lang.String‘, Typ zurücksetzen = ‚Seite‘.
Als Ausdruck der Variable folgenden Code einfügen:

($V{Text_zusammengefuegt} != null) ? 
( $V{Text_zusammengefuegt} + 
  ( ($F{text} != null) ? $F{text} + " " : " n" )
) 
: ( ($F{text} != null) ? $F{text} + " " : " n" )

In diesem Code wird berücksichtigt, das in der XML-Basis auch leere Textzeilen (Leerzeichen) enthalten sein können, diese sollen dann zu einem Zeilenumbruch führen.
Um eine echte Leerzeile zu erhalten sind so allerdings zwei Leerzeilen im übergebenen Text notwendig. Durch diesen kleinen „Trick“ kann man mit einer übergebenen Leerzeile auch einen einfachen Zeilenumbruch hinbekommen… alternative Ideen? Ich hatte keine, würde mich aber über eine bessere Lösung freuen!

Die Variableneinstellungen sehen danach also wie folgt aus:
iReport Subreport Textausgabe Variable

Jetzt wird diese Variable in den Abschnitt des Gruppen-Fußes unserer vorab erstellten Gruppe eingefügt, und der Detail-Abschnitt auf eine Höhe von 0 gesetzt. Dadurch sieht unser Report dann wie folgt aus:
iReport Subreport Textausgabe Neu

Das war es dann auch schon. Nun werden sämtliche Textzeilen die vormals als jeweils einzelne Zeile ausgegeben wurden nun als „Endlos“-Text dargestellt, wobei eine Leerzeile im Übergabetext zu einem Zeilenumbruch in der neuen Ausgabe führt.

Quelle

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert