ABAPCALL_TRANSFORMATION - CALL TRANSFORMATION
CPI1466 during Backup RFUMSV00 - Advance Return for Tax on Sales/PurchasesDiese Dokumentation steht unter dem Copyright der SAP AG.
CALL TRANSFORMATION
Syntax
CALL TRANSFORMATION {trans|(name)}
[PARAMETERS {p1 = e1 p2 = e2 ...}|(ptab)]
[transformation_options]
SOURCE {XML sxml}
| {{bn1 = e1 bn2 = e2 ...}|(stab)}
RESULT {XML rxml}
| { {bn1 = f1 bn2 = f2 ...}|(rtab) }.
Zusätze:
1a. ... SOURCE {XML sxml}|{{bn1 = e1 bn2 = e2 ...}|(stab)}
1b. ... RESULT {XML rxml}|{{bn1 = f1 bn2 = f2 ...}|(rtab)}
2. ... PARAMETERS {{p1 = e1 p2 = e2 ...}|(ptab)}
Wirkung
Diese Anweisung ruft die angegebene XSL-Transformation (XSLT) oder eineSimpleTransformation (ST) auf. Die Quelle der Transformation wird hinter SOURCE angegeben und dasErgebnis wie hinter RESULT angegeben abgelegt. Mit PARAMETERS und OBJECTS können Parameter an die Transformation übergeben werden. Mögliche Transformationsarten sind:
- von XML nach XML (nur bei XSLT)
- von XML nach ABAP (bei XSLT und Simple Transformations)
- von ABAP nach XML (bei XSLT und Simple Transformations)
- von ABAP nach ABAP (nur bei XSLT)
Der Name der Transformation kann entweder direkt als trans oder dynamisch als Inhalt eines eingeklammertenzeichenartigen Datenobjekts name angegeben werden, wobei die dynamische Angabe in Großbuchstaben erfolgen muss. Die angegebene Transformation muss alsXSLT-Programm oder als Simple Transformation imRepositoryvorhanden sein. Mit transformation_options können Transformationsoptionen angegeben werden.
Zusatz 1a
... SOURCE {XML sxml}|{{bn1 = e1 bn2 = e2 ...}|(stab)}
Wirkung
Angabe der Quelle
Transformation eines XML-Dokuments
Durch die Angabe von XML sxml wird das in sxml enthalteneXML-Dokument transformiert, wobei sxml in folgenden Formen vorliegen kann:
- als Datenobjekt vom Typ string und xstring oder alsStandardtabelle mitflachem oder zeichen- oder byteartigem Zeilentyp,
- als Interfacereferenzvariable vom Typ IF_IXML_ISTREAM, die auf einen iXML-Input-Stream zeigt (nur bei XSLT),
- als Interfacereferenzvariable vom Typ IF_IXML_NODE, die auf ein iXML-Nodeset zeigt (nur bei XSLT),
- als Referenzvariable vom Typ IF_SXML_READER oder CL_SXML_READER, die auf einen XML-Reader (Instanz von CL_SXML_READER) zeigt.
Hinweise
- Die Interfaces IF_IXML_ISTREAM und IF_IXML_NODE sind Komponenten der Pakete "Stream" und "DOM" der von SAP ausgelieferteniXML Library.
- Aus Kompatibilitätsgründen kann sxml auch noch eine Klassenreferenzvariable vom Typ CL_FX_READER sein. Die Klasse CL_FX_READER wird aber durch CL_SXML_READER abgelöst.
Transformation von ABAP-Daten
Mit bn1 = e1 ... oder (stab) werden die zu transformierenden ABAP-Daten e1 e2 ... angegeben.
- Bei Aufruf eines XSLT-Programms werden die ABAP-Daten in diekanonische XML-Repräsentationserialisiert, die dann als Quelle der XSL-Transformation verwendet wird. Mit bn1 bn2 ... werdendie Namen der XML-Elemente angegeben, welche die ABAP-Datenobjekte in der kanonischen XML-Darstellung repräsentieren sollen.
- Beim Aufruf einer Simple Transformation wird in der Transformation über die Namen bn1 bn2 ... lesend auf die ABAP-Daten zugegriffen.
Statt über eine statische Parameterliste können die Datenobjekte auch dynamisch als Wertepaare in den Spalten einer internen Tabelle stab übergeben werden, die den Typ ABAP_TRANS_SRCBIND_TAB aus derTypgruppe ABAP hat.
Bei der Serialisierung werden die elementaren Komponenten der ABAP-Datenobjekte gemäß desMappings für eingebaute ABAP-Typen oder fürweitere XML-Schema-Datentypennach asXML konvertiert. Dabei kann es zu den dort beschriebenen Ausnahmen kommen, die wiederum teilweise durch die Angabe vonTransformationsoptionen umgangen werden können.
Die Schreibweise der Bezeichner im XML-Dokument richtet sich danach, wie sie in der ABAP-Laufzeitumgebungvorliegen. Bei der statischen Angabe b1, b2, ... sind dies Großbuchstaben, bei der dynamischen Angabe in stab ist es die dort verwendete Schreibweise.
Hinweis
Beim Aufruf einer Simple Transformation wird bei der Serialisierung immer ein internes Writer-Objekterzeugt, das über das Interface IF_SXML_WRITER ansprechbar ist. Zugriff auf das Objekt besteht durch Attribute der ST-Anweisung tt:call-method.
Zusatz 1b
... RESULT {XML rxml}|{{bn1 = f1 bn2 = f2 ...}|(rtab)}
Wirkung
Angabe des Ziels
Transformation in ein XML-Dokument
Durch die Angabe von XML rxml wird in ein XML-Dokument transformiert und dieses nach rxml gestellt, wobei rxml in folgenden Formen vorliegen kann:
- als Datenobjekt vom Typ string und xstring oder als Standardtabelle mit flachem zeichen- oder byteartigem Zeilentyp.
- als Interfacereferenzvariable vom Typ IF_IXML_OSTREAM, die auf einen iXML-Output-Stream zeigt (nur bei XSLT).
- als Interfacereferenzvariable vom Typ IF_IXML_DOCUMENT, die auf ein iXML-Dokument zeigt (nur bei XSLT),
- als Referenzvariable vom Typ IF_SXML_WRITER oder CL_SXML_WRITER, die auf einen XML-Writer (Instanz von CL_SXML_WRITER) zeigt.
Hinweise
- Die Interfaces IF_IXML_OSTREAM und IF_IXML_DOCUMENT sind Komponenten der Pakete "Stream" und "DOM" der von SAP ausgelieferteniXML Library.
- Wenn der Datentyp xstring für rxml verwendet wird, wird das Ergebnis in der ZeichendarstellungUTF-8 abgelegt. Dies ist vorteilhaft, wenn das resultierende XML-Dokument in einerDatei gespeichert werden soll.
- Aus Kompatibilitätsgründen kann rxml auch noch eine Klassenreferenzvariable vom Typ CL_FX_WRITER sein. Die Klasse CL_FX_WRITER wird aber durch CL_SXML_WRITER abgelöst.
Transformation in ABAP-Daten
Mit bn1 = f1 ... oder (rtab) werden die ABAP-Zielfelder f1 f2 ... angegeben, in welche die XML-Daten transformiert werden sollen.
- Bei Aufruf eines XSLT-Programms wird das Resultat der XSL-Transformation in ABAP-Datenobjekte deserialisiert, falls es einekanonische XML-Repräsentation darstellt. Mit bn1 bn2 ... werden die Namen der XML-Elemente angegeben, welche die ABAP-Datenobjektein der kanonischen XML-Darstellung repräsentieren, während mit f1 f2 ... vom Datentyp her passende ABAP-Datenobjekte angegeben werden, in die diese deserialisiert werden sollen.
- Beim Aufruf einer Simple Transformation wird in der Transformation über die Namen bn1 bn2 ... schreibend auf die ABAP-Daten zugegriffen.
Statt über eine statische Parameterliste können die Datenobjekte auch dynamisch als Wertepaare an die Spalten der internen Tabelle rtab übergeben werden, die den Typ ABAP_TRANS_RESBIND_TAB aus derTypgruppe ABAP hat.
Bei der Deserialisierung werden die elementaren XML-Werte gemäß desMappings für eingebaute ABAP-Typen oder fürweitere XML-Schema-Datentypenin elementare ABAP-Datentypen konvertiert. Dabei kann es zu den dort beschriebenen Ausnahmen kommen, die wiederum teilweise durch die Angabe vonTransformationsoptionen umgangen werden können.
Die Schreibweise im XML-Dokument muss genau mit der Schreibweise übereinstimmen, wie sie in derABAP-Laufzeitumgebung vorliegt. Bei der statischen Angabe b1, b2, ... sind dies Großbuchstaben, bei der dynamischen Angabe in rtab ist es die dort verwendete Schreibweise.
Bei der Deserialisierung von internen Tabellen mit nicht-eindeutigenTabellenschlüsseln bleibt die Reihenfolge der duplikativen Zeilen bezüglich dieser Schlüssel nicht erhalten.
Hinweis
Beim Aufruf einer Simple Transformation wird bei der Deserialisierung immer ein internes Reader-Objekterzeugt, das über das Interface IF_SXML_READER ansprechbar ist. Zugriff auf das Objekt besteht durch Attribute der ST-Anweisung tt:call-method.
Zusatz 2
... PARAMETERS {{p1 = e1 p2 = e2 ...}|(ptab)}
Wirkung
Mit diesem Zusatz können ABAP-Datenobjekte e1 e2 ... an die Parameter p1 p2 ... einerXSL-Transformation oder einerSimpleTransformation angebunden werden. Es sind alle elementaren Datenobjekte und Objektreferenzen erlaubt.
Statt über eine statische Parameterliste können die Parameter auch dynamisch als Wertepaare in den Spalten der internen Tabelle ptab angegeben werden, die einen der folgenden Typen aus derTypgruppe ABAP hat:
- ABAP_TRANS_PARMBIND_TAB für die Angabe von Strings,
- ABAP_TRANS_OBJBIND_TAB für die Angabe von Objektreferenzen (nur bei XSLT),
- ABAP_TRANS_PARM_OBJ_BIND_TAB für die Angabe von Datenreferenzen (nur bei XSLT).
Parameterübergabe an XSL-Transformationen
Die angegebenen Parameter müssen in einer XSL-Transformation wie folgt als Eingabeparameter definiert sein:
<xsl:param name="..." sap:type="..." />
Für das Attribut name ist der Parametername anzugeben. Damit eine Bindung stattfindetmuss die Schreibweise genau mit der Schreibweise übereinstimmen, wie sie in der ABAP-Laufzeitumgebungvorliegt. Bei der statischen Angabe p1, p2, ... sind dies Großbuchstaben, bei der dynamischen Angabe in ptab ist es die dort verwendete Schreibweise.
Für das optionale Attribut type kann einer der Typbezeichner string, number,boolean, nodeset, xstring oder object(...) angegeben sein, wobei in denKlammern hinter object der Name einer globalen ABAP-Klasse anzugeben ist. Der Namensraum vortype muss als xmlns:sap="http://www.sap.com/sapxsl" definiert sein, wobei als Konvention das Präfix sap vorgeschlagen wird.
Wenn in der Transformation kein Typ angegeben ist, werden die Datentypen elementarer Parameter gemäß folgender Tabelle auf XSL-Typen abgebildet.
| ABAP-Datentyp | XSL-Parametertyp |
| c, d, n, string | string |
| i (b, s), f, p | number |
| x, xstring | string, wobei der Inhalt nach Base64 dargestellt wird. |
Falls in der XSL-Transformation die in obiger Tabelle gezeigten XSL-Typen explizit angegeben sind, müssen passende elementare ABAP-Parameter angegeben werden, die in den XSL-Typ konvertierbar sind:
- Der XSL-Typ boolean erwartet ABAP-Parameter vom Typ c der Länge eins, wobei ein Leerzeichen als "falsch" und ein anderes Zeichen als "wahr" interpretiert wird.
- Der XSL-Typ xstring erwartet ABAP-Parameter vom Typ x oder xstring und der Inhalt wird hexadezimal dargestellt.
- Die XSL-Typen nodeset und object erwarten eine Objektreferenzvariable, die auf eine Instanz einer Klasse zeigt, wobei der Typ nodeset passende Objekteigenschaften erwartet.
Falls ein Parameter nicht zum XSL-Typ passt, kommt es zu einer unbehandelbaren Ausnahme. Falls ein inder XSL-Transformation definierter Parameter nicht übergeben wird, wird er in der Transformationauf einen Standardwert gesetzt. Ein angegebener Parameter, der nicht in der XSL-Transformation definiert ist, wird ignoriert.
Hinweise
- Die XSL-Typen string, number, boolean und nodeset sind XSL-Standardtypen,während xstring und object spezielle SAP-Erweiterungen darstellen. Der Typ xstringermöglicht es, Byteketten hexadezimal statt zur Basis 64 darzustellen. Der Typ object erlaubt den Aufruf von ABAP-Methoden aus dem XSLT-Programm.
- Für die Übergabe von Objektreferenzen gibt es auch noch einen speziellen Zusatz OBJECTS, der aber durch PARAMETERS ersetzt wird.
Parameterübergabe an ST-Programme
In einem ST-Programm müssen die Parameter wie folgt außerhalb eines Templates als Parameter des Haupt-Templates definiert sein:
<tt:parameter name="..." [kind="..."]
[[s-val="..."][d-val="..."]]|[val="..."] />
Beim Aufruf eines ST-Programms werden außer Eingabeparametern auch Ausgabe- und Ein-/Ausgabeparameterunterstützt. Die Art des Parameters ist über kind im ST-Programm definiert, wobei"in", "out" und "inout" angegeben sein können und letzteres der Standard ist. Mit den val-Attributen können Ersatzwerte definiert sein.
Beispiele
Ausnahmen
Behandelbare Ausnahmen
- Ursache: Gemeinsame Oberklasse aller Ausnahmeklassen für CALL TRANSFORMATION. Die direkten Unterklassen sindCX_ST_ERROR für Simple Transformations undCX_XSLT_EXCEPTION für XSL-Transformationen.Bei Ausführung der Anweisung CALL TRANSFORMATION können nur Ausnahmen der KlasseCX_TRANSFORMATION_ERROR oder ihrer Unterklassen sowie Ausnahmen der Klasse CX_SY_NO_HANDLER behandeltwerden. Zusätzlich kann es während der Ausführung einer Transformation zu weiteren Ausnahmen kommen, wie z.B. solche, die beimMapping vonABAP-Datentypen nach asXML auftreten können. Diese Ausnahmen sind zwar nicht direkt behandelbar,sie werden aber bei Behandlung der Ausnahme CX_TRANSFORMATION_ERROR (oder ihrer Unterklassen) ebenfallsabgefangen. Das Attribut PREVIOUS des zugehörigen Ausnahmeobjekts enthält dann eine Referenz auf die ursprüngliche Ausnahme.
Unterklassen von CX_ST_ERROR
- Ursache: Fehler beim Aufruf der Transformation
- Ursache: Ausnahme in einer aus der Transformation aufgerufenen ABAP-Methode
- Ursache: Fehler in einer Transformations-Bedingung
- Ursache: Zu serialisierendes bzw. deserialisierendes Datenobjekt ist zu lang.
- Ursache: Fehler bei der Deserialisierung
- Ursache: Formatfehler in einem Knoten
- Ursache: Die Serialisierung würde zu ungültigem XML führen
- Ursache: Bei der Deserialisierung ist der Abgleich fehlgeschlagen
- Ursache: Fehler beim Zugriff auf einen Datenknoten
- Ursache: Fehler bei der Ausführung der Transformation
- Ursache: Fehler bei der Serialisierung
Unterklassen von CX_XSLT_EXCEPTION
- Ursache: Fehler beim Aufruf einer ABAP Methode aus XSLT
Laufzeitfehler XSLT_METH_ERROR
- Ursache: Fehler bei der Deserialisierung
Laufzeitfehler: XML_NOT_SUPPORTED
- Ursache: Dokument ist nicht im asXML-Format
Laufzeitfehler: XML_FORMAT_ERROR
- Ursache: Fehler im XSLT-Prozessor
Laufzeitfehler: UNCAUGHT_EXCEPTION
- Ursache: Fehler bei der Serialisierung
Laufzeitfehler: XML_NOT_SUPPORTED
Vendor Master (General Section) CPI1466 during Backup
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 25076 Date: 20120526 Time: 191634 triton ( 510 ms )






