Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation ABAP-Mappings  Dokument im Navigationsbaum lokalisieren

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:

Importing-Parameter

Parameter

Bedeutung

SOURCE
(Type XSTRING)

Quell-XML-Dokument

PARAM
(Type Ref To  IF_MAPPING_PARAM)

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

TRACE
(Type 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
(Type 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 an Stelle 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. Siehe auch: Konfigurationsdaten anzeigen/ändern.

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_TRACEnicht 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.
  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.

Hinweis

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>

 

 

 

 

 

 

 

Ende des Inhaltsbereichs