Die Default-Filter von ZMS (ab 2.9.4#11) enthalten verschiedene Beispiele, die zeigen, wie man die Filter konfiguriert. Es existiert im Default-Filter-Set sowohl ein Export wie auch ein Import-Filter für das XML-basierte MS-Excel 2003-Format. Man kann die Default-Filter im Konfigurations-Menü "Filter" in der Sektion "Importieren" in die ZMS-Instanz bzw. dort eine entsprechende Konfigurations- Datei importieren (Download, s.a. rechts ).

Filter-Import

Initialisierung bzw. Import der Default-Filter

Excel-Filter

Zwei Filter für XML aus Excel 2003: Export und Import

Dann stehen für Excel-Format beide Filter zur Verfügung, deren Batch-Prozesse an die eigene Pfad-Verhältnisse angepasst werden müssen: betroffen sind "xslt_trans_xsl" und "xslt", wo der Aufruf des XSLT-Prozessors (z.B. XSLT Saxon) an die lokalen Verhältnisse angepasst wird.

Der Export-Filter transformiert in einem einzigen Schritt per XSL den Listen-Code der ZMS-Datentabelle in das Excel-XML.
Der Import-Filter erzeugt zunächst dynamisch per DTML-Methode eine eigene Transformations-XSL (trans.xsl) auf Basis der zu exportierenden Datentabellen-Struktur und setzt dann in einem zweiten Schritt dieses XSL-File für die anschliessende Transformation des Excel-XML in das ZMS-interne XML-Format für Datentabelle ein. Diesen Datenstrom kann der Prozess dann in das bestehende Datentabellen-Objekt überführen.

Wichtiger Hnweis: Vor Einsatz der Filter ist in seiner Detail-Konfiguration unter "Eigenschaften" festzulegen, für welche Objekt-Klassen er gelten soll. Der Filter erscheint nur dann im Im/Export-Menü des Objektes, wenn der entsprechende Objektklassen-Name hier aktiviert ist.

Filter-Eigenschaften

Festlegen der Filter-Eigenschaften: Auswahl derjenigen Objektklassen, für die der Filter zur Verfügung stehen soll (im Beispiel handelt es sich um eine ZMS-Datentabelle namens "test-DB")

Code-Beispiel für Prozess-Schritt: Dynamische XSL-Generierung per DTML

Da die Datentabellen-Struktur je nach Konfiguration des entsprechenden Speziellen-Objektes sehr unterschiedlich sein kann, ist eine von dieser Struktur abhängige Transformation erforderlich. Das passende XSL wird auf Basis der in ZMS konfigurierten Struktur mit einer in den Filter eingebundenen DTML-Methode erzeugt.

<!-- BO excel2ZMSRecordSet -->

<dtml-let xsl="[]">
 <dtml-call "xsl.append('<?xml version='+QUOT+'1.0'+QUOT+' encoding='+QUOT+'ISO-8859-1'+QUOT+'?>\n')">
 <dtml-call "xsl.append('<xsl:stylesheet version='+QUOT+'1.0'+QUOT+'\n')">
 <dtml-call "xsl.append(' xmlns:xsl='+QUOT+'http://www.w3.org/1999/XSL/Transform'+QUOT+'\n')">
 <dtml-call "xsl.append(' xmlns:ss='+QUOT+'urn:schemas-microsoft-com:office:spreadsheet'+QUOT+'\n')">
 <dtml-call "xsl.append(' xmlns:spreadsheet='+QUOT+'urn:schemas-microsoft-com:office:spreadsheet'+QUOT+'\n')">
 <dtml-call "xsl.append('>\n')">
 <dtml-call "xsl.append('<xsl:output method='+QUOT+'xml'+QUOT+' encoding='+QUOT+'ISO-8859-1'+QUOT+'/>\n')">
 <dtml-call "xsl.append('<xsl:template match='+QUOT+'/'+QUOT+'>\n')">
 <dtml-call "xsl.append('<list>\n')">
 <dtml-call "xsl.append('<xsl:for-each select='+QUOT+'spreadsheet:Workbook/spreadsheet:Worksheet/spreadsheet:Table/spreadsheet:Row'+QUOT+'>\n')">
 <dtml-call "xsl.append('<item type='+QUOT+'dictionary'+QUOT+'>\n')">
 <dtml-call "xsl.append('<dictionary>\n')">
 <dtml-in "getMetaobjAttrIds(meta_id)[1:]">
  <dtml-let index=sequence-index key=sequence-item metaobjAttr="getMetaobjAttr(meta_id,key)">
   <dtml-call "xsl.append('<item')">
   <dtml-call "xsl.append(' key='+QUOT+key+QUOT)">
   <dtml-call "xsl.append(' type='+QUOT+metaobjAttr['type']+QUOT)">
   <dtml-call "xsl.append('>')">
   <dtml-if "key=='sort_id'">
    <dtml-call "xsl.append('<xsl:value-of select='+QUOT+'position()'+QUOT+'/>')">
   <dtml-else>
    <dtml-call "xsl.append('<xsl:value-of select='+QUOT+'spreadsheet:Cell[%i]/spreadsheet:Data'%index+QUOT+'/>')">
   </dtml-if>
   <dtml-call "xsl.append('</item>\n')">
  </dtml-let>
 </dtml-in>
 <dtml-call "xsl.append('</dictionary>\n')">
 <dtml-call "xsl.append('</item>\n')">
 <dtml-call "xsl.append('</xsl:for-each>\n')">
 <dtml-call "xsl.append('</list>\n')">
 <dtml-call "xsl.append('</xsl:template>\n')">
 <dtml-call "xsl.append('</xsl:stylesheet>\n')">
 <dtml-call "localfs_write(ZMS_FILTER_CUR_DIR+'/trans.xsl',''.join(xsl),'')">
</dtml-let>

<!-- EO excel2ZMSRecordSet -->

Erstellt von: Dr. Frank Hoffmann , erstellt am:  27.06.2008 , zuletzt geändert: 27.06.2008