Show TOC

FunktionsdokumentationABAP-Mappings Dieses Dokument in der Navigationsstruktur finden

 

ABAP-Mappings sind Mapping-Programme in ABAP Objects, die Kunden mit der ABAP Workbench implementieren können.

Voraussetzungen

Beachten Sie unbedingt die Voraussetzungen in den Abschnitten Einsatzmöglichkeiten und Integration, sowie die Einschränkungen unter Mapping-Entwicklung mit der ABAP Workbench.

Funktionsumfang

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:

Exporting Parameter

Parameter

Bedeutung

SOURCE (Typ XSTRING)

Quell-XML-Dokument

PARAM (Typ Ref To IF_MAPPING_PARAM)

Parameter-Objekt für lesenden Zugriff auf Laufzeit-Konstanten (siehe unten).

TRACE (Typ Ref To IF_MAPPING_TRACE)

Trace-Objekt, mit dem Sie Meldungen in den Mapping-Trace schreiben können (siehe unten).

Exporting-Parameter

Parameter

Bedeutung

RESULT (Typ XSTRING)

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 anstelle von ABAP-Mappings auch direkt ein Stylesheet mit der ABAP Workbench entwickeln (siehe XSLT-Mappings (ABAP Engine)).

Mapping Trace

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.

Hinweis Hinweis

Welche Meldungen im Monitoring erscheinen hängt davon ab, welcher Trace-Level für eine Pipeline der Integration Engine eingestellt wurde.

Ende des Hinweises.
Laufzeit-Konstanten

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 in der Java-Mapping-API (SAP NetWeaver 2004 und 7.0), 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: Zugriff auf eine Laufzeit-Konstante

Method IF_MAPPING~EXECUTE.

* Get mapping constant SENDER_SERVICE

data: l_sender_service type string. l_sender_service = param->get( IF_MAPPING_PARAM=>SENDER_SERVICE ).

ENDMETHOD.

Beispiel

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"?> <ns0:BookingOrders xmlns:ns0="http://sap.com/test/ABAPMapping">

<Order> <BookingCode>2KY34R</BookingCode>

<Passenger> <Name>Smith</Name> <Address>123 Main St.</Address> </Passenger>

<Flight> <Date>04042004</Date> <AirlineID>SX</AirlineID> <FlightNumber>21</FlightNumber> <From>ZRH</From> <To>FRA</To> </Flight>

<Flight> <Date>04042004</Date> <AirlineID>LH</AirlineID> <FlightNumber>4025</FlightNumber> <From>FRA</From> <To>LAS</To> </Flight>

<Flight> <Date>04042004</Date> <AirlineID>UA</AirlineID> <FlightNumber>128</FlightNumber> <From>LAS</From> <To>SFO</To> </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( stream_factory = streamfactory istream = istream document = idocument ).

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' message = l_trace ).

* 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( name = 'MsgOut' parent = odocument ).

* create element 'SenderService' and add it to the output document

data: elementsender type ref to if_ixml_element.

elementsender = odocument->create_simple_element( name = 'SenderService' value = l_sender_service parent = msgtype ).

* 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( ostream = ostream document = odocument ).

irc = renderer->render( ).

endmethod.

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>