
Mit Protokollen können Sie zusätzliche Dienste der Laufzeit nutzen. Je nach verwendeter Laufzeit werden unterschiedliche Protokolle unterstützt.
Die ABAP-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-Proxys unterschiedlich.
Weitere Informationen über ABAP Objects Interfaces finden Sie unter Interfaces.
Namenskonventionen
Alle Protokoll-Klassen haben die folgenden Eigenschaften:
Sie implementieren ein ABAP Objects Interface und umfassen das Interface IF_WSPROTOCOL.
Alle Protokoll-Klassen beginnen 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.
Die Protokoll-Konstante in IF_WSPROTOCOL ist PAYLOAD. Das entsprechende Interface für die Protkoll-Klasse ist IF_WSPROTOCOL_PAYLOAD.
Um auf das Protokoll in diesem Beispiel zuzugreifen, verwenden Sie die Protokoll-Konstante IF_WSPROTOCOL=>PAYLOAD.
Unterstützte Protokolle der ABAP-Proxy-Laufzeit
Die folgende Tabelle gibt eine Übersicht über die verfügbaren Protokolle und unterstützten Laufzeiten. Wenn Sie mit GET_PROTOCOL ein Protokoll anfordern, das die verwendete Laufzeit nicht unterstützt, löst die Methode eine Ausnahme aus.
Protokoll-Konstante in IF_WS_PROTOCOL |
Durch XI-Laufzeit unterstützt (kompatibel mit Interface-Pattern XI 3.0) |
Durch Web-Service-Laufzeit unterstützt |
Verwendung |
Weitere Informationen |
|---|---|---|---|---|
ASYNC_MESSAGING |
Ja |
Nein |
Ermöglicht bei asynchroner Kommunikation den Quality of Service Exactly once in order und steuert die Verarbeitung von Acknowledgments. |
Siehe SAP Help Portal > SAP NetWeaver > Proxy-Programmierung |
ROUTING |
Ja |
Nein |
Setzen des Empfängers und andere Routing-Services. |
|
ATTACHMENTS |
Ja |
Ja |
Austausch von Message-Attachments. |
|
XI_HEADER |
Ja |
Nein |
Zugriff auf XI-spezifische Felder des Message-Headers. |
|
PAYLOAD |
Ja |
Nur XML-Handling, keine Abfrage der Payload |
Erweitertes XML-Handling, z.B. für die Abfrage von Initialwerten und xsd:nil. Es kann auch für die Abfrage der Payload werden. |
|
MESSAGE_ID |
Ja |
Ja (falls konfiguriert) |
Abfrage der Message-ID für die gesendete Message. |
|
SESSION |
Nein |
Ja (für Services mit Interface-Pattern stateful) |
Aufbau oder Abbau einer Session auf Empfänger-Seite bei synchroner Kommunikation. Der Anmeldekontext kann über mehrere Aufrufe gehalten werden. Es wird empfohlen, 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). |
|
IBC |
Nein |
Ja |
Holen des Sender- und Empfänger-IBC beim Service-Provider |
Semantische Adressierung mit Identifiable Business Contexts (IBCs) |
Zugriff auf Protokoll-Klassen für Consumer-Proxys
Bei Consumer-Proxys 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( ).
Zugriff auf Protokoll-Klassen für Provider-Proxys
Innerhalb der Implementation eines Provider-Proxys erhalten Sie 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 ).
Zugriff auf Protokoll-Klassen unabhängig von einer Proxy-Instanz (XI-Laufzeit)
Die Klasse CL_PROXY_ACCESS bietet weitere Hilfsmethoden an, um auf Objekte der ABAP-Proxy-Laufzeit auch ohne Proxy-Instanz zugreifen zu können:
Methode |
Verwendung |
Weitere Informationen |
|---|---|---|
GET_ACKNOWLEDGMENT |
Lesen des Acknowledgment-Status zu einer Message über die Angabe der Message-ID. |
Siehe SAP Help Portal > SAP NetWeaver > Proxy-Programmierung |
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, den 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. Weitere Informationen finden Sie in der Klassen-Dokumentation für CL_PROXY_ACCESS (Verwendung von Objektverknüpfungen).