Show TOC

ABAP-MappingsLocate this document in the navigation structure

Verwendung

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

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

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>