Ansicht
Dokumentation
ABENABAP_XSLT_ASXML_ELEMENTARY - ABAP XSLT ASXML ELEMENTARY
SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3upDiese Dokumentation steht unter dem Copyright der SAP AG.
- Mapping elementarer ABAP-Typen
Die asXML-Darstellung elementarer ABAP-Typen findet sowohl bei XSL-Transformationen als auch bei Simple Transformations Anwendung. Elementare Werte bzw. die elementaren Komponenten komplexer Strukturen werden in beiden Fällen gemäß dieses Mappings konvertiert.
Für elementare Datenobjekte mit eingebauten ABAP-Typen beruht die asXML-Darstellung auf der Repräsentation von XML-Schema-Datentypen aus dem Namensraum xsd="http://www.w3.org/2001/XMLSchema", wobei Datum und Zeit nach ISO-8601 und binäre Daten nach Base64 dargestellt werden. Die Abbildung der ABAP-Typen auf die XML-Schema-Datentypen ist wegen der unterschiedlichen Wertebereiche nicht vollständig bijektiv. Beispielsweise ist beim XML-Schema-Datentyp xds:date die Angabe einer Zeitzone erlaubt, was bei dem ABAP-Typ d nicht möglich ist.
Hinweise
- Mit den Angabe von format, decimals, regime und noError im Attribut option der ST-Anweisung tt:value können die Mapping-Regeln teilweise übersteuert werden.
- Ausnahmen, die beim Mapping auftreten, können nicht direkt behandelt werden. Statt dessen kann die Ausnahme CX_TRANSFORMATION_ERROR (oder eine ihrer Unterklassen) der Anweisung CALL TRANSFORMATION behandelt werden, deren Attribut PREVIOUS dann eine Referenz auf die ursprüngliche Ausnahme enthält.
- Einige der Ausnahmen, die beim Mapping der hier gezeigten Datentypen auftreten, können teilweise mit der Angabe noError im Attribut option der ST-Anweisung tt:value unterdrückt werden.
Mapping-Tabellen
Numerische Datentypen
ABAP-Typ | ABAP-Darstellung | XML-Schematyp | XML-Darstellung |
b | 123 | xsd:unsignedByte | 123 |
s | -123 | xsd:short | -123 |
i | -123 | xsd:int | -123 |
int8 | -123 | xsd:long | -123 |
p | -1,23 | xsd:decimal | -1,23 |
decfloat16 | 123E+1 | precisionDecimal, totalDigits = 16 | 1,23E+3 |
decfloat34 | -3,140...0E+02 | precisionDecimal, totalDigits = 34 | -314,0...0 |
f | -3,140...0E+02 | xsd:double | -3,14E2 |
Hinweise
- Beim ABAP-Typ p wird eine Zahl mit mehr Nachkommastellen als die zur Verfügung stehenden Stellen (zweimal Länge minus eins) als ungültig betrachtet und kann nicht nach asXML serialisiert werden.
- Mit der Angabe noError im Attribut option der ST-Anweisung tt:value wird beim Typ p ein ungültiges Vorzeichenbyte als positives Vorzeichen interpretiert und dadurch die entsprechende Ausnahme verhindert.
- Der Typ precisionDecimal ist noch kein offizieller XML-Schematyp.
Zeichenartige Datentypen
ABAP-Typ | ABAP-Darstellung | XML-Schematyp | XML-Darstellung |
c | " Hi" | xsd:string | _Hi |
string | " Hello " | xsd:string | _Hello_ |
n | "001234" | xsd:string (pattern [0-9]+) | 001234 |
Byteartige Datentypen
ABAP-Typ | ABAP-Darstellung | XML-Schematyp | XML-Darstellung |
x | ABCDEF | xsd:base64Binary | q83v |
xstring | 456789AB | xsd:base64Binary | RweJqw== |
Datums-, Zeit- und Zeitstempeltypen
ABAP-Typ | ABAP-Darstellung | XML-Schematyp | XML-Darstellung |
d | "20020204" | xsd:date | 2002-02-04 |
t | "201501" | xsd:time | 20:15:01 |
utclong | "2019-04-10 12:37:29.5040200" | xsd:datetime | 2019-04-10T12:37:29.50402Z |
Hinweis
Bei der Serialisierung eines Zeitstempelfelds vom Typ utclong werden nur die signifikanten Nachkommastellen erzeugt. Auch bei der Deserialisierung können weniger als sieben Nachkommastellen vorliegen.
Besonderheiten bei der Serialisierung
Bei der Serialisierung werden die ABAP-Werte in das entsprechende zeichenartige XML-Format konvertiert und bei der Deserialisierung umgekehrt. Dabei gelten folgende Besonderheiten im Vergleich zu den innerhalb von ABAP üblichen Konvertierungsregeln.
- Bei der Serialisierung von dezimalen Gleitpunktzahlen wird das gleiche Format wie bei deren Konvertierung in den Typ string erzeugt.
- Bei der Serialisierung von Datenobjekten des Typs x werden schließende Bytes mit dem Wert hexadezimal 0 genauso behandelt wie ansonsten nur schließende Leerzeichen beim Datentyp c und nicht berücksichtigt.
- Bei der Serialisierung folgender ABAP-Datenobjekte nach asXML wird teilweise überprüft, ob das ABAP-Datenobjekt einen gültigen Wert hat:
- Ein Datenobjekt vom Typ n darf nur Ziffern enthalten.
- Ein Datenobjekt vom Typ p muss eine gültige gepackte Zahl darstellen.
- Ein Datenobjekt vom Typ d oder t darf keine führenden oder schließenden Leerzeichen und gleichzeitig die entsprechenden Trennzeichen ("-" bzw. ":")
- Ein Datenobjekt vom Typ utclong muss einen gültigen Wert enthalten. Der Initialwert ergibt ein leeres XML-Element.
Beim Verstoß gegen diese Regeln kommt es zu behandelbaren Ausnahmen, die teilweise durch die Angabe einer Transformationsoption hinter dem Zusatz OPTIONS der Anweisung CALL TRANSFORMATION umgangen werden können.
Hinweise
- Zur Überprüfung gültiger Datums- und Zeitangaben können statt der Datentypen d und t die Domänen XSDDATE_D und XSDTIME_T verwendet werden.
- Mit der Angabe noError im Attribut option der ST-Anweisung tt:value werden beim Typ n führende und schließende Leerzeichen ignoriert und dadurch die entsprechende Ausnahme verhindert.
Besonderheiten bei der Deserialisierung
- Für die Deserialisierung in dezimale Gleitpunktzahlen wird die Konvertierungsregel für Quellfelder vom Typ c verwendet.
- Bei der Deserialisierung in ein ABAP-Datenobjekt muss die Genauigkeit des XML-Werts erhalten bleiben:
- Bei numerischen Typen dürfen keine Stellen verloren gehen.
- Bei zeichen- oder byteartigen Datentypen fester Länge (c, n, x) muss das Zielobjekt genügend Stellen haben, um den gesamten Inhalt aufzunehmen, außer es sind nur führende und schließende Leerzeichen beim Datentyp c und führende Nullen beim Datentyp n betroffen.
- Strukturen können nicht in elementare Datenobjekte konvertiert werden.
- Bei der Deserialisierung wird ein Datenobjekt des Typs c oder x wie üblich rechts mit Leerzeichen bzw. hexadezimal 0 aufgefüllt, wenn weniger Zeichen bzw. Bytes übertragen werden, als in das Datenobjekt passen.
- Wenn bei der Deserialisierung in ein elementares Datenobjekt das benötigte XML-Element nicht vorhanden ist, behält das elementare Datenobjekt seinen vorhergehenden Wert. Wenn einem elementaren Datenobjekt ein leeres Element zugewiesen wird, wird es auf seinen typabhängigen Initialwert gesetzt. Um das Datenobjekt in beiden Fällen zu initialisieren, kann die Transformationsoption clear mit dem Wert "all" verwendet werden.
Beim Verstoß gegen diese Regeln kommt es zu behandelbaren Ausnahmen wie CX_SY_CONVERSION_DATA_LOSS, die teilweise durch die Angabe einer Transformationsoption hinter dem Zusatz OPTIONS der Anweisung CALL TRANSFORMATION umgangen werden können.
asXML, Mapping von elementaren Datentypen
CPI1466 during Backup CPI1466 during Backup
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 17111 Date: 20240523 Time: 164356 sap01-206 ( 157 ms )