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".



Klicken Sie hier auf "Vorlage hinzufügen" und wählen Sie "Benutzerdefinierte Vorlage" aus. Klicken Sie dann auf "Vorlage bearbeiten".



Nun kann eine eigene VM-Datei geschrieben werden, die den Export steuert. Die Beispieldatei "exportExample.vm" finden Sie im Portalverzeichnis internal/system/vm/export. Öffnen Sie den Velocity-Editor und verfassen Sie folgendes Skript:
## Tabellendaten holen:
#set($data = $ExportUtil.getExport($RenderingContext, $ProcessingContext, $l_strExportGuid))##

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

##Header für die Ausgabedatei schreiben
$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)##

##Spaltentitel aufnehmen ?
#if($bShowHeader == true)##
#foreach($header in $data.getColumnInfos())##
#if($velocityCount>1)${SepChar}#end##
"$header.getTitle()"##
#end##
$ESC.getLF()##
#end##
## Über alle Zeilen und Spalten iterieren und Werte ausgeben
#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##
-----------------------------------------------------------
Musterfirma Datenexport vom $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.