Show TOC

Abfragen der PayloadLocate this document in the navigation structure

Verwendung

Sowohl auf Sender- als auch auf Empfänger-Seite kann es sinnvoll sein, auf die Payload zuzugreifen. 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 zunächst eine Instanz zum Payload-Protokoll IF_WSPROTOCOL_PAYLOAD. Weitere Informationen finden Sie unter Protokolle.

Verwenden Sie folgende Methoden zum Abrufen der Payload nach dem Senden/Empfangen einer Message:

Methode

Verwendbar in

GET_SENT_REQUEST_PAYLOAD

Client-Proxy und Server-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 [Data Type of Output Parameter],
  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 = '[Value1]'.
*...
request-fieldN = '[ValueN]'.
* 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-> ).