Mit Protokollen können Sie zusätzliche Dienste der Laufzeit nutzen. Je nach verwendeter Laufzeit werden unterschiedliche Protokolle unterstützt.
Die Laufzeit stellt Protokolle über Klassen zur Verfügung, die ein ABAP Objects Interface implementieren. Der Zugriff auf diese Protokoll-Klassen ist für Provider- und Consumer-Proxies unterschiedlich (siehe unten).
Alle Protokoll-Klassen haben die folgenden Eigenschaften:
● Sie implementieren ein ABAP Objects Interface und umfassen das Interface IF_WSPROTOCOL.
● Sie beginnen immer mit dem Präfix IF_WSPROTOCOL.
● Für jede Protokoll-Klasse gibt es eine Konstante bei den Interface-Attributen von IF_WSPROTOCOL.
● Der Name des implementierten ABAP Objects Interface ergibt sich aus dem Präfix und der Konstante aus den Interface-Attributen.
Beispiel
Protokoll-Konstante in IF_WSPROTOCOL |
Zugehöriges Interface für die Protokoll-Klasse |
PAYLOAD |
IF_WSPROTOCOL_PAYLOAD |
Um auf das Protokoll zuzugreifen, verwenden Sie in diesem Beispiel die Protokoll-Konstante IF_WSPROTOCOL=>PAYLOAD. Eine Übersicht über alle Protokoll-Klassen finden Sie unter Funktionsumfang.
Bei Consumer-Proxies greifen Sie über deren Methode GET_PROTOCOL auf die Protokoll-Klasse zu. Dazu ein Beispiel zum Protokoll IF_WSPROTOCOL_PAYLOAD:
DATA:
lo_clientProxy TYPE REF TO
co_clientProxy,
lo_payload_protocol TYPE REF TO if_wsprotocol_payload
lo_payload TYPE REF
TO if_ws_payload.
CREATE OBJECT lo_clientProxy.
* Get Protocol Class Using Method GET_PROTOCOL
lo_payload_protocol ?=
lo_clientProxy->get_protocol( if_wsprotocol=>payload ).
CALL METHOD lo_clientProxy->execute_synchronous
EXPORTING
output = ls_request
IMPORTING
input = ls_response.
* Use Protocol Methods
lo_payload = lo_payload->get_sent_request_payload( ).
Innerhalb der Implementation eines Provider-Proxies holen Sie sich die Protokoll-Klasse über die Methode CL_PROXY_ACCESS=>GET_SERVER_CONTEXT( ):
DATA: lo_server_context TYPE
REF TO if_ws_server_context,
lo_payload_protocol TYPE REF TO
if_wsprotocol_payload.
lo_server_context =
cl_proxy_access=>get_server_context( ).
lo_payload_protocol =
lo_server_context->get_protocol( if_wsprotocol=>payload ).
Die folgende Tabelle gibt eine Übersicht über die verfügbaren Protokolle und welche Laufzeit sie unterstützt:
Wenn Sie mit GET_PROTOCOL ein Protokoll anfordern, dass die verwendete Laufzeit nicht unterstützt, löst die Methode eine Ausnahme aus.
Unterstützte Protokolle der ABAP-Proxy-Laufzeit
Protokoll-Konstante in IF_WS_PROTOCOL |
Unterstützt durch |
Verwendung |
|
XI-Laufzeit |
Web Services- Laufzeit |
||
ASYNC_MESSAGING |
Ja |
Nein |
Ermöglicht bei asynchroner Kommunikation den Quality of Service Exactly once in order und steuert die Verarbeitung von Acknowledgments. |
ROUTING |
Ja |
Nein |
Setzen des Empfängers und andere Routing-Dienste. |
ATTACHMENTS |
Ja |
Ja |
Austausch von Message-Attachments. |
XI_HEADER |
Ja |
Nein |
Zugriff auf Felder des Message-Headers, die spezifisch für XI sind. |
PAYLOAD |
Ja |
Nur XML-Handling, keine Abfrage der Payload |
Erweitertes XML-Handling (beispielsweise zur Abfrage von initialen Werten und xsd:nil); Abfrage der Payload |
MESSAGE_ID |
Ja |
Ja |
Abfrage der Message-ID für die gesendete Message. |
SESSION |
Nein |
Ja |
Aufbau oder Abbau einer Session auf Empfänger-Seite bei synchroner Kommunikation. Der Anmeldekontext kann über mehrere Aufrufe gehalten werden. SAP empfiehlt, dieses Protokoll nur im Ausnahmefall zu verwenden. |
WS_HEADER |
Nein |
Ja (nur auf der Consumer-Seite) |
Zugriff auf Felder des Message-Headers, die spezifisch für Web Services sind (WS_Header). |
Die Klasse CL_PROXY_ACCRESS bietet weitere Hilfsmethoden an, um auf Objekte der ABAP-Proxy-Laufzeit auch ohne Proxy-Instanz zugreifen zu können:
Methode |
Verwendung |
GET_ACKNOWLEDGMENT |
Lesen des Acknowledgment-Status zu einer Message über die Angabe der Message-ID (siehe: Acknowledgments). |
GET_PRE_ROUTING |
Gibt ein Objekt vom Typ IF_WS_PRE_ROUTING zur Vorab-Empfängerermittlung für eine Proxy-Klasse zurück. |
GET_PAYLOAD_HANDLER |
Gibt einen Payload-Handler zurück, die Sie für das Rendering und Parsen der XML-Payload verwenden können. |
GET_SERVER_CONTEXT |
Siehe oben. |
Außerdem können Sie mit weiteren Methoden der Klasse Beziehungen zwischen PI Messages und BOR-Anwendungsobjekten abspeichern. Siehe dazu die Klassen-Dokumentation von CL_PROXY_ACCESS (Verwendung Objektverkknüpfungen).