Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Abfragen der Payload  Dokument im Navigationsbaum lokalisieren

Verwendung

Sowohl auf Sender- als auch auf Empfänger-Seite kann es Sinn machen, dass man auf die Payload zugreifen möchte. Es gibt zwei Fälle zu unterscheiden:

·      Sie brauchen die Payload erst nach dem Versenden oder bei Empfang der Message (etwa um die gesendete Message zu archivieren).

·      Sie müssen schon vor dem Versenden der Message wissen, wie die Payload aussieht (beispielsweise für die XI-Laufzeit, etwa weil Sie eine Vorab-Empfängerermittlung durchführen, bei der der Empfänger von Daten in der Payload abhängt).

Funktionsumfang

Zugriff auf die Payload

Alle hier beschriebenen Methoden geben die Payload als Objekt vom Typ IF_WS_PAYLOAD zurück. Mit Hilfe der Methoden dieses Objekts können Sie auf die Payload zugreifen.

Abrufen der Payload nach einem Proxy-Aufruf

Um die Payload abzurufen, holen Sie sich zuerst eine Instanz zum Payload-Protokoll IF_WSPROTOCOL_PAYLOAD. Verwenden Sie folgende Methoden:

Methoden zum Abrufen der Payload nach dem Senden/bei Empfang einer Message

Methode

Verwendbar in

GET_SENT_REQUEST_PAYLOAD

Client-Proxy und Server-Proxy

GET_SENT_RESPONSE_PAYLOAD

Client-Proxy

GET_SENT_EXCEPTION_PAYLOAD

Client-Proxy

Abrufen der Payload unabhängig von einem Proxy-Aufruf

Die Methode GET_PAYLOAD_HANDLER des Payload-Protokolls gibt einen Payload-Handler (Objekt vom Typ REF TO IF_WS_PAYLOAD_HANDLER) zurück. Mit diesem Handler können Sie die Payload zu einer Request-, Response- oder Fault-Message erzeugen (Rendering) oder parsen.

Hinweis

Den Handler können Sie sich auch über die Methode GET_PAYLOAD_HANDLER der Klasse CL_PROXY_ACCESS der ABAP-Proxy-Laufzeit unabhängig von einer Proxy-Instanz besorgen. Dann müssen Sie zusätzlich den Klassennamen des Proxies und die Proxy-Methode angeben. Der Parameter EXTENDED_XML_HANDLING dieser Methode bestimmt, ob für alle Methoden des Payload-Handlers das erweiterte XML-Handling aktiv sein soll.

Die folgenden Methoden des Payload-Handlers werden auch intern von der ABAP-Proxy-Laufzeit verwendet:

Methoden von IF_WS_PAYLOAD_HANDLER

Methode

Verwendung

GET_PAYLOAD_FROM_REQUEST_DATA

Erzeugt eine Payload für Request-Daten eines Proxy (Rendering).

GET_PAYLOAD_FROM_RESPONSE_DATA

Erzeugt eine Payload für Response-Daten eines Proxy (Rendering).

GET_PAYLOAD_FROM_EXCEPTION

Gibt eine Fault-Message ausgehend von einer Instanz einer Ausnahmeklasse zurück (Rendering).

GET_REQUEST_DATA_FROM_PAYLOAD

Parsen einer Request-Message-Payload, um sich die Request-Daten zurückgeben zu lassen.

GET_RESPONSE_DATA_FROM_PAYLOAD

Parsen einer Response-Message-Payload, um sich die Response-Daten zurückgeben zu lassen.

GET_EXCEPTION_FROM_PAYLOAD

Parsen einer Fault-Message-Payload, um sich eine Instanz der zugehörigen Ausnahmeklasse zurückgeben zu lassen.

Beispiel

Das folgende Programm holt sich unabhängig von einer Proxy-Instanz die Payload zu einer Request-Message und gibt sie im System aus:

DATA:

  ls_request          TYPE [Datentyp des Output-Parameters],
  lo_fault            TYPE REF TO cx_ai_system_fault,
  lo_payload_handler  TYPE REF TO IF_WS_PAYLOAD_HANDLER,
  lo_payload          TYPE REF TO if_ws_payload,
  lt_request_data     TYPE PRX_T_PARAM,
  ls_request_data     TYPE PRX_S_PARAM.
  lo_pointer          TYPE REF TO xstring,

* Fill request data

request-field1 = '[Wert1]'.
request-field1 = '
[Wert1]'.
*...
request-fieldN = '
[WertN]'.

* Use payload handler to get payload independently
* from proxy call:

TRY.

* Get Payload handler for a proxy method.
* Note: You have to provide the proxy and method name in uppercase.

  lo_payload_handler = cl_proxy_access=>get_payload_handler(
     proxy_name = 'CO_...'
     proxy_method = 'EXECUTE_SYNCHRONOUS' ).

* Pass request data to payload handler

  CLEAR lt_request_data.
  CLEAR ls_request_data.
  ls_request_data-name = 'OUTPUT'.
  GET REFERENCE OF request into ls_request_data-value.
  append ls_request_data to lt_request_data.
  lo_payload =
     lo_payload_handler->get_payload_from_request_data(
        lt_request_data).

* Catch system faults

CATCH cx_ai_system_fault INTO lo_fault.
  WRITE: / 'System fault'.
  WRITE: / 'Code:', lo_fault->code.
  WRITE: / 'Text:', lo_fault->errortext.
  EXIT.
ENDTRY.

* Show payload for test purposes

lo_pointer = lo_payload->get_xml_pointer( ).
cl_proxy_service=>show_xml_document( lo_pointer->* ).

 

 

 

Ende des Inhaltsbereichs