XMLExport
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | - |
Stack(Out) | Top | XML-Stream (String, lokaler Zeichensatz) |
XMLExportUTF8
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | - |
Stack(Out) | Top | XML-Stream (String, UTF-8) |
XMLExport2
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | Dateiname oder Leerstring |
Top-1 | Flags | |
Stack(Out) | Top | XML-Stream (String, UTF-8) |
XMLExport3
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:
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>