Lade...
 

XMLExport (für ObjectBoxen)

XMLExport

Stack
Stack Position Beschreibung
Stack(In) Top -
Stack(Out) Top XML-Stream (String, lokaler Zeichensatz)

XMLExportUTF8

Stack
Stack Position Beschreibung
Stack(In) Top -
Stack(Out) Top XML-Stream (String, UTF-8)

XMLExport2

Stack
Stack Position Beschreibung
Stack(In) Top Dateiname oder Leerstring
  Top-1 Flags
Stack(Out) Top XML-Stream (String, UTF-8)

XMLExport3

Stack
Stack Position Beschreibung
Stack(In) Top Variablen
  Top-1 Dateiname oder Leerstring
  Top-2 Flags
Stack(Out) Top XML-Stream (String, UTF-8)

XMLExport, XMLExport2 und XMLExport3 exportieren den Inhalt einer Objectbox als XML-Stream. Diese Daten können anschließend beliebig weiterverarbeitet werden.

Die Parameter von XMLExport2 steuern den Detailgrad der Ausgabe (Flags) und den Ausgabeort (Datei oder String):

Dateiname  
Leerstring XML-Stream wird in Form eines Strings zurückgeliefert.
Dateiname XML-Stream wird in eine Datei ausgegeben, zurückgeliefert wird ein Leerstring. Diese Form der Ausgabe ist bei großen Datenmengen (mehr als 1000 Zeilen) zu empfehlen, um den Speicher nicht übermäßig zu belasten. Der XML-Stream ist in UTF-8 kodiert.

Die Flags sind ein Bitfeld:

Bit # gelöscht (0) gesetzt (1)
1 Alle dargestellten Zeilen einer logischen Zeile werden als eine Zeile übernommen Die Zeilen werden so aufgeteilt, wie sie in ClassiX® dargestellt werden.
4 Von jedem Datenfeld wird nur das exportiert, was auch angezeigt wird. Bei Objekten (z.B. CX_VALUE) werden Details wie z.B. Einheit und Basiseinheit nicht gesondert aufgeschlüsselt. Datenfelder, die Objekte darstellen (z.B. CX_VALUE), werden detaillierter exportiert. Zu einem CX_VALUE werden zusätzlich die Einheit und deren Basiseinheit exportiert.

Siehe hierzu auch folgendes Beispiel .

Bei großen Datenmengen (mehr als 1000 Zeilen) kann der Export etwas dauern, da für jede Zeile das entsprechende Objekt geladen werden muss inkl. weiterer Objekte, auf die die Zeile verweist.

XMLExport3 hat im Vergleich zu XMLExport2 noch einen weiteren Parameter. Dieser dritte Parameter ist ein Vektor von Objekten, die als Variablen im XML-Stream exportiert werden sollen.

 

Funktionsweise des XML-Exports

Beim Export einer Liste wird für jedes in der Liste enthaltene Objekt, dessen XMLExport() Methode aufgerufen. Dabei wird zwischen Klassen die den XMLExport() von CX_CLASS verwenden und Klassen die eine eigene Methode XMLExport() definieren unterschieden.

 

XMLExport() von CX_CLASS

Die Klasse CX_CLASS hat eine Methode XMLExport() die auf ViewExport() basiert. Ist für eine abgeleitete Klasse bereits ein ViewExport() implementiert, dann ist dies eventuell ausreichend für XMLExport(). Dieser Standard-Export hat die Form:

<text>String den ViewExport() zurückgibt</text>

Der XML-Strom enthält also keine Informationen darüber, um welchen Datentyp es sich gehandelt hat.

 

Klassen die XMLExport() überladen

Es gibt auch Fälle in denen der von ViewExport() gelieferte String nicht genug Informationen für einen sinnvollen XMLExport() enthält, dann muss XMLExport() von dieser Klasse überladen werden. Dies ist häufig der Fall, wenn Klassen multilingual exportiert werden sollen oder falls die Kenntnis über den Datentyp eine Rolle spielt, denn alles was CX_CLASS::XMLExport() exportiert wird ist vom Typ Text, siehe oben.

Es folgt eine Liste von Klassen welche die Methode XMLExport() überladen, mit kurzer Beschreibung warum dies gemacht wurde.

CX_SPAN_DATE

Aufgrund der Anforderung mehrsprachig exportieren zu können, muss CX_SPANDATE XMLExport() überladen, da ViewExport() nur einen String in der aktuellen Sprache exportiert. Intern verwendet CX_SPAN_DATE::XMLExport() die Methode CX_SPAN_DATE::ExportML(), diese gibt einen CXB_MULTIPLE_STRING zurück der mittels CXB_MULTIPLE_STRING::XMLExport() exportiert wird.

CX_FORMULA, CX_FORMULA_XML_ELEMENT

Bei diesen beiden Klassen wird XMLExport() überladen, weil eine einfache Stringdarstellung mittels ViewExport() für den XMLExport() nicht ausreichend ist.

CX_FRACTION

CX_FRACTION hat einen überladenen XMLExport(), um Zähler und Nenner getrennt zu exportieren.

<fraction> <numerator>1</numerator> <denominator>2</denominator> </fraction>


 

CX_AMOUNT, CX_VECTOR_AMOUNT, CX_SUM_AMOUNT, CX_INTEGER, CX_PERCENT, CX_PERCENT_PER

Diese Klassen überladen die Methode XMLExport(), um den Datentyp im XML-Strom unterzubringen. (Zum Beispiel: 12345).

CX_NUMERIC

Numerische Werte werden mit acht Nachkommastellen exportiert.

<number precision="2">135000,00000000</number>

CX_VALUE, CX_VALUE_PER

CX_VALUE und CX_VALUE_PER überladen XMLExport(), weil sie zusätzlich zu ihrem Wert (ein CX_NUMERIC) noch ihre Einheit exportieren, siehe auch CXB_UNIT.

CXB_UNIT

Ein Objekt der Klasse CXB_UNIT gehört in der Regel zu einem CX_VALUE-Objekt und gibt dessen Einheit (Meter, Stunden, ...) an. Da Einheiten in verschiedenen Sprachen unterschiedlich heißen. Systemeinheiten werden direkt exportiert bei Benutzereinheiten wird ein CXB_UNIT_ELEM exportiert.

Beispiel:

<unit alt="Stück"> <texts> <mlText count="3"> <text>Stück</text> <text>pieces</text> <text>Pieces</text> </mlText> <mlText count="3"> <text>St</text> <text>Pieces</text> <text>Pieces</text> </mlText> <mlText count="3"> <text>Stck</text> <text>PIECES</text> <text>PIECES</text> </mlText> <mlText count="3"> <text>Stück</text> <text>piece</text> <text>piece</text> </mlText> </texts> </unit>

CXB_UNIT_ELEM

Dies entspricht dem XMLExport() von CXB_UNIT. Allerdings nicht für Systemeinheiten (Meter, Sekunden, Stück, ....) sondern für benutzerdefinierte Einheiten.

CXB_MULTIPLE_STRING

Einen Sonderfall stellt CXB_MULTIPLE_STRING dar. Diese Klasse ist nicht von CX_CLASS abgeleitet, wird aber dennoch benötigt. Zum einen können Makros, die beim füllen einer Liste aufgerufen werden, mehrsprachige Strings zurückliefern, zum anderen möchte man Einheiten- und Monatsnamen mehrsprachig exportieren und zuletzt sollen auch die Spaltenüberschriften einer ListView multilingual exportiert werden. Anstatt alle diese Fälle gesondert zu behandeln wird der schon vorhandene ML-String mittels CXB_MULTIPLE_STRING::XMLExport() exportiert oder aber zuerst ein entsprechender ML-String erstellt der dann exportiert wird.

Da ML-Strings in ClassiX® eine variable Anzahl von sprachen haben, haben auch die exportierten Strings eine feste Anzahl von Sprachen. Ein Beispiel für einen ML-String in XML-Darstellung ist:

<mlText count=“2“> <text>Januar</text> <text>January</text> </mlText>