Tipps & Tricks - Tabellenexport - Benutzerdefinierte Vorlage

In diesem Beitrag finden Sie eine Anleitung zur Erstellung von eigenen Vorlagen für Daten, die aus Tabellen in Applikationen exportiert werden.

Die Exportfunktion kann bei einer Ansichtstabelle im Eigenschaftendialog auf dem Reiter "Optionen" aktiviert werden. Setzen Sie im unteren Teil des Dialogs die Einstellung "Dateiexport anzeigen" und klicken Sie anschließend rechts davon auf "Bearbeiten".

Wählen Sie im linken Bereich des Dialogs "Export" aus. Klicken Sie dann auf "Vorlage hinzufügen" und wählen Sie "Benutzerdefinierte Vorlage" aus.

Klicken Sie auf "Vorlage bearbeiten".

Nun kann eine eigene VM-Datei geschrieben werden, die den Export steuert. Öffnen Sie den Velocity-Editor und verfassen Sie folgendes Skript:

## Get table data:
#set($data = $ExportUtil.getExport($RenderingContext, $ProcessingContext, $l_strExportGuid))##

## HTML remove renderer initialisieren
#set($GdDefaultHtmlRemoveRenderer = $RendererFactory.createHtmlRemoveRenderer(false, true, ""))##

##Write header for output file
$Response.setHeader("Content-Type","text/plain; charset=UTF-8")$Response.setHeader("Accept-Ranges","bytes")$Response.setHeader("Content-Disposition","attachment;filename=${l_strOutputFilename}")##
$Response.setIgnoreWrite(false)##

##Get column header ?
#if($bShowHeader == true)##
#foreach($header in $data.getColumnInfos())##
#if($velocityCount>1)${SepChar}#end##
"$header.getTitle()"##
#end##
$ESC.getLF()##
#end##
##Iterate over all rows and columns and output values
#foreach($row in $data)##
#foreach($column in $row)##
#if($velocityCount>1)${SepChar}#end##
#if($l_bRemoveHtml && $column.getColumnInfo().getType()=="text" && $column.isStringType())##
"$GdDefaultHtmlRemoveRenderer.getOutput($column.asValueHolder()).replaceAll('"','""')"##
#else##
"$column.asText().replaceAll('"','""')"##
#end##
#end##
$ESC.getLF()##
#end##
-----------------------------------------------------------
Sample company data export on $DtUtil.now($User.getTimeZone())
-----------------------------------------------------------
$Response.setIgnoreWrite(true)

Dieses Beispiel exportiert die vorhandenen Daten in eine Textdatei, wobei die einzelnen Spaltenwerte das doppelte Hochkomma als Begrenzungszeichen erhalten.

Zeilenumbrüche sollten mit $ESC.getLF() erzeugt werden. Um falsche Umbrüche zu vermeiden, sollten Zeilen in Velocity mit ## abgeschlossen werden.

Mit

$header.getTitle()

wird hier der Spaltentitel als erste Zeile in die Ausgabedatei geschrieben. Nach dem Abschnitt für den Spaltentitel wird über jede Zeile ($row) der Tabelle und innerhalb dieser Zeile über jede Spalte ($column) iteriert, um so die Tabellenwerte als Export zu schreiben. Es muss hierbei gesondert beachtet werden, ob es sich um ein Langtextfeld handelt. In jedem Fall werden jedoch im Text vorkommende Anführungszeichen maskiert, da, wie oben erwähnt, das Anführungszeichen als Feldbegrenzer verwendet wird. An das Ende der Datei wurde eine Fußzeile mit dem aktuellen Datum gesetzt, um den Zeitpunkt des Exports festzuhalten. Speichern Sie nun die Applikation und testen Sie das Ergebnis im Browser.