Show TOC

FunktionsdokumentationAbfragen der Payload Dieses Dokument in der Navigationsstruktur finden

 

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

Ende des Hinweises.

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:

Syntax Syntax

  1. DATA: 
  2.   ls_request           TYPE [Data Type of Output Parameter],
  3.   lo_fault             TYPE REF TO cx_ai_system_fault,
  4.   lo_payload_handler 
     TYPE REF TO IF_WS_PAYLOAD_HANDLER,   
  5.   lo_payload           TYPE REF TO if_ws_payload, 
  6.   lt_request_data      TYPE PRX_T_PARAM,  
  7.   ls_request_data      TYPE PRX_S_PARAM.
  8.   lo_pointer
              TYPE REF TO xstring,
  9. * Fill request data
  10. request-field1 = '[Wert1]'.
  11. request-field1 = '[Value1]'.
  12. *...
  13. request-fieldN = '[ValueN]'.
  14. * Use payload handler to get payload independently 
  15. * from proxy call:
  16. TRY.   
  17. * Get Payload handler for a proxy method. 
  18. * Note: You have to provide the proxy and method name in uppercase.
  19.   lo_payload_handler = cl_proxy_access=>get_payload_handler(   
  20.     proxy_name = 'CO_...'    
  21.     proxy_method = 'EXECUTE_SYNCHRONOUS' ).
  22. * Pass request data to payload handler
  23. CLEAR lt_request_data.   CLEAR ls_request_data.  
  24. ls_request_data-name= 'OUTPUT'.   
  25. GET REFERENCE OF request into ls_request_data-value.
  26. append ls_request_data to lt_request_data.   
  27.   lo_payload =   
  28.     lo_payload_handler->get_payload_from_request_data(
          
  29.   lt_request_data).
  30. * Catch system faults
  31. CATCH cx_ai_system_fault INTO lo_fault. 
  32.  WRITE: / 'System fault'.   
  33.  WRITE: / 'Code:', lo_fault->code.
  34.  WRITE: / 'Text:', lo_fault->errortext.   
  35.  EXIT. 
  36. ENDTRY.
  37. * Show payload for test purposes
  38. lo_pointer = lo_payload->get_xml_pointer( ). 
  39. cl_proxy_service=>show_xml_document( lo_pointer-> ).
Ende des Codes