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

Consumer-Proxy und Provider-Proxy

GET_SENT_RESPONSE_PAYLOAD

Consumer-Proxy

GET_SENT_EXCEPTION_PAYLOAD

Consumer-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