ABAP-Mappings
ABAP-Mappings sind Mapping-Programme in
ABAP
Objects, die Kunden mit der ABAP Workbench implementieren
können.
Beachten Sie unbedingt die Voraussetzungen in den Abschnitten Einsatzmöglichkeiten und Integration, sowie die Einschränkungen unter Mapping-Entwicklung mit der ABAP Workbench.
Ein ABAP-Mapping besteht aus einer ABAP-Klasse, die das Interface IF_MAPPING im Paket SAI_MAPPING implementiert. Das Interface hat eine Methode EXECUTE mit folgender Signatur:
Importing-Parameter
Parameter |
Bedeutung |
SOURCE |
Quell-XML-Dokument |
PARAM |
Parameter-Objekt für lesenden Zugriff auf Laufzeit-Konstanten (siehe unten). |
TRACE |
Trace-Objekt, mit dem Sie Meldungen in den Mapping-Trace schreiben können (siehe unten). |
Exporting-Parameter
Parameter |
Bedeutung |
RESULT |
Ziel-XML-Dokument |
Ausnahme: CX_MAPPING_FAULT
Anwendungen können innerhalb der Methode EXECUTE selbst entscheiden, auf welche Weise sie das Quell-XML-Dokument einlesen und verändern. Wenn Sie den XSLT-Prozessor des SAP Web AS nutzen wollen, können Sie an Stelle von ABAP-Mappings auch direkt ein Stylesheet mit der ABAP Workbench entwickeln (siehe XSLT-Mappings (ABAP Engine)).
Mit dem Trace-Objekt können Sie Meldungen in den Mapping-Trace schreiben, den Sie sich im Message-Monitoring anschauen können. Bei Verwendung der Methode TRACE geben Sie dazu den Trace-Level und die auszugebende Meldung an:
Trace-Level |
Bedeutung |
0 |
Es wird kein Trace geschrieben |
1 |
Ausgabe von Warnungen |
2 |
Ausgabe von Warnungen und Fehlerinformationen |
3 |
Ausgabe von Warnungen, Fehler- und Debugging-Informationen |
Alternativ können Sie mit den Methoden TRACE1, TRACE2 oder TRACE3 verwenden, um Meldungen für Trace-Level 1, 2 oder 3 in den Trace zu schreiben.

Welche Meldungen im Monitoring erscheinen hängt davon ab, welcher Trace-Level für eine Pipeline der Integration Engine eingestellt wurde. Siehe auch: Konfigurationsdaten anzeigen/ändern.
Im ABAP-Mapping kann lesend auf Felder des Message-Headers zugegriffen werden. Hierzu wird der EXECUTE-Methode ein Objekt vom Typ IF_MAPPING_PARAM übergeben. Das Interface hat Konstanten für die Namen der verfügbaren Parameter, sowie eine Methode GET, die zum Parameternamen den jeweiligen Wert liefert. Die Konstanten sind die gleichen wie bei Java-Mappings, wobei es die Konstante MAPPING_TRACE nicht für ABAP-Mappings gibt. Das Trace-Objekt wird statt dessen direkt über den Parameter TRACE der Methode IF_MAPPING~EXECUTE übergeben (siehe oben).
Beispiel für den Zugriff auf eine Laufzeitkonstante
Method IF_MAPPING~EXECUTE. * Get mapping constant SENDER_SERVICE data: l_sender_service type string. ENDMETHOD. |
Das folgende Beispiel zeigt wie Sie ein ABAP-Mapping mit Hilfe des iXML-Parsers durchführen. Es soll das folgende XML-Dokument umgesetzt werden:
Ausgangs-Payload einer an den Integration Server gesendeten Message
<?xml version="1.0" encoding="UTF-8" ?> <Order> <Passenger> <Flight> <Flight> <Flight> </Order> </ns0:BookingOrders> |
Diese Ausgangs-Payload soll über das folgende ABAP-Mapping-Programm verabeitet werden:
ABAP-Mapping-Programm
method IF_MAPPING~EXECUTE. * initialize iXML type-pools: ixml. class cl_ixml definition load. * create main factory data: ixmlfactory type ref to if_ixml. ixmlfactory = cl_ixml=>create( ). * create stream factory data: streamfactory type ref to if_ixml_stream_factory. streamfactory = ixmlfactory->create_stream_factory( ). * create input stream data: istream type ref to if_ixml_istream. istream = streamfactory->create_istream_xstring( source ). * parse input document ============================================== * initialize input document data: idocument type ref to if_ixml_document. idocument = ixmlfactory->create_document( ). * parse input document data: iparser type ref to if_ixml_parser. iparser = ixmlfactory->create_parser( iparser->parse( ). * get message content of tag <BookingCode> data: incode type ref to if_ixml_node_collection. incode = idocument->get_elements_by_tag_name( 'BookingCode' ). * get XI header data (here: "Sender Service") data: l_sender_service type string. l_sender_service = param->get( if_mapping_param=>sender_service ). * add trace (appears in message monitoring) data: l_trace type string. concatenate 'Sender Service = ' l_sender_service into l_trace. trace->trace( level = '1' * build up output document ========================================== * create output document data: odocument type ref to if_ixml_document. odocument = ixmlfactory->create_document( ). * create element 'SenderService' and add it to the document data: msgtype type ref to if_ixml_element. msgtype = odocument->create_simple_element( * create element 'SenderService' and add it to the output document data: elementsender type ref to if_ixml_element. elementsender =
odocument->create_simple_element( * add node to the output document data: outcode type ref to if_ixml_node. outcode = incode->get_item( index = 0 ). data irc type i. irc = msgtype->append_child( outcode ). * render document =================================================== * create output stream data: ostream type ref to if_ixml_ostream. ostream = streamfactory->create_ostream_xstring( result ). * create renderer data: renderer type ref to if_ixml_renderer. renderer = ixmlfactory->create_renderer( irc = renderer->render( ). endmethod. |

Weitere
Informationen:
iXML ABAP Objects
Jumpstart
Ziel-Payload nach der Ausführung des ABAP-Mapping-Programms
<?xml version="1.0" ?> <MsgOut> <SenderService>Test_ABAP_Mapping_BS</SenderService> <BookingCode>2KY34R</BookingCode> </MsgOut> |