Der Empfänger einer Message wird über die zentralen Einstellungen im Integration Directory konfiguriert. Im Anwendungsprogramm kann es allerdings aus folgenden Gründen wünschenswert sein, dass man weiß, ob es überhaupt einen Empfänger gibt:
· Der Aufbau der zu versendenden Message kann unter Umständen viel Zeit kosten, etwa weil dazu viele Anwendungsdaten selektiert werden müssen. Kann die Anwendung schon vor dem Versenden erfragen, ob es einen Empfänger gibt, brauchen die Daten unter Umständen gar nicht selektiert zu werden.
· Wenn Sie eine Message aus dem Anwendungsprogramm versenden, obwohl es keinen Empfänger gibt, kann diese Message vom Integration Server nicht weitergeleitet werden. Wenn ein Anwendungsprogramm diesen Fall von vornerherein abfängt, tauchen solche Messages nicht unnötigerweise im Monitoring auf.
Die ABAP-Proxy-Laufzeit stellt ein Routing-Protokoll zur Verfügung, um eine solche Vorab-Empfängerermittlung zu unterstützen.
Das Routing-Protokoll muss auf den Integration Server zugreifen, um sich die Konfiguration zu einem Outbound-Interface zu besorgen. Dazu wird zunächst versucht, den Integration Server aus den spezifischen Konfigurationsdaten der Integration Engine zu ermitteln (Kategorie RUNTIME, Parameter IS_RFC_DESTINATION), siehe den Abschnitt Spezifische Konfigurationsdaten ändern in: Konfigurationsdaten anzeigen/ändern. Beachten Sie dabei, dass die spezifischen Konfigurationsdaten mandantenabhängig sind, Sie können also in unterschiedlichen Mandanten unterschiedliche Integration Server ansprechen.
Falls der Parameter IS_RFC_DESTINATION nicht belegt it, holt sich die Routing-Laufzeit die Adresse des Integration Servers über die RFC-Destination AI_INTEGRATION_SERVER. Dieser Eintrag gilt allerdings für alle Mandanten in einem SAP-System.
Methoden der Vorab-Empfängerermittlung (Interface IF_WS_PRE_ROUTING)
Methode |
Verwendung |
RECEIVERS_EXIST |
Ermittelt anhand der Angabe eines Senders und wahlweise der Payload, ob Empfänger existieren. Anwendungen, die den Empfänger selbst setzen müssen hier auch den gesetzten Empfänger angeben (siehe unten). |
GET_LOGICAL_PORT_FROM_RECEIVER |
Zum Aufbau einer Point-to-Point-Verbindung mittels Web Services wird der logische Port benötigt. Anwendungen, die den Empfänger selbst setzen (beispielsweise, weil er aus Customizing-Daten bekannt ist), können sich mit dieser Methode den logischen Port zu einem Empfänger zurückgeben lassen. Um einem logischen Port Empfängerdaten zuzuordnen, müssen Sie sie auf der Registerkarte XI Empfänger der Transaktion LPCONFIG eintragen (siehe auch: Logischen Port anlegen). |
Sie können die Vorab-Empfängerermittlung mit oder ohne Payload durchführen. Dies hat dann eine Bedeutung, wenn es Routing-Bedingungen gibt, die auf die Payload zugreifen. In so einem Fall müssen Sie sich die Payload vor dem Aufruf des Client-Proxy die Payload besorgen (siehe: Abfragen der Payload).
Wenn Sie die Vorab-Empfängerermittlung ohne Payload durchführen, zeigt Ihnen der Parameter ROUTING_VIA_PAYLOAD der Methode RECEIVERS_EXIST an, ob es Bedingungen im Routing für den angegebenen Sender gibt. In so einem Fall kann nur mit Payload bestimmt werden, ob es Empfänger gibt.
...
1. Instanziieren Sie ihr Client-Proxy (hier im Beispiel lo_clientProxy) und holen sie sich das Routing-Protokoll (siehe auch: Protokolle).:
data: lo_clientProxy TYPE REF TO
co_clientProxy,
lo_routing_protocol TYPE REF TO
if_wsprotocol_routing.
CREATE OBJECT lo_clientProxy.
lo_routing_protocol ?=
lo_clientProxy->get_protocol
( if_wsprotocol=>routing ).
2. Um eine Vorab-Empfängerermittlung durchzuführen, deklarieren Sie sich noch folgende Variablen und holen sich ein Objekt zum Interface IF_WS_PRE_ROUTING:
Data: l_routing_runtime type ref to IF_WS_PRE_ROUTING.
Data: ls_sender type
SXI_ADDRESS,
lo_payload type
REF TO IF_WS_PAYLOAD,
l_routing_via_payload type
PRX_BOOLEAN,
l_receivers_exist type PRX_BOOLEAN,
* If you have set the receiver manually, you also
have to
* provide it for the receiver pre-identification.
ls_receiver type
SXI_ADDRESS.
3. Im nächsten Schritt stellen Sie fest, ob es überhaupt zugeordnete Empfänger gibt und wenn ja, ob der Empfängerermittlung Bedingungen zugeordnet wurden. Rufen Sie dazu die Methode RECEIVERS_EXIST auf und übergeben Sie den Sender (und gegebenenfalls den Empfänger) der Message:
call method l_routing_runtime->receivers_exist
EXPORTING
SENDER = ls_sender
RECEIVER = ls_receiver “only if set manually
IMPORTING
ROUTING_VIA_PAYLOAD = L_ROUTING_VIA_PAYLOAD
RECEIVERS_EXIST = L_RECEIVERS_EXIST.
4. Werten Sie die Rückgabewerte folgendermaßen aus:
¡ Falls RECEIVERS_EXIST = SPACE, gibt es zum angegebenen Sender gar keine Routing-Regeln im Integration Directory. In diesem Fall brauchen Sie die restlichen Parameter nicht auswerten.
¡ Falls RECEIVERS_EXIST = 'X', gibt es eine oder mehrere Empfängerermittlungen zum angegebenen Sender. Ob die zugehörigen Empfänger die Message bekommen, hängt nun noch davon ab, ob es zusätzlich zur Empfängerermittlung noch auszuwertende Bedingungen gibt. Der Parameter ROUTING_VIA_PAYLOAD zeigt an, dass es eine Empfängerermittlung gibt, die auf der Auswertung der Payload basiert. Ist der Parameter nicht gesetzt, handelt es sich also um eine Empfängerermittlung ohne Bedingung und es gibt einen oder mehrere Empfänger.
5. Falls noch Routing-Regeln ausgewertet werden müssen, die von der Payload abhängen, können Sie in einem zweiten Aufruf der Methode receivers_exist() zur weiteren Auswertung die Payload der Message übergeben.
Sie können die Payload auch schon beim ersten Aufruf mitgeben.
Normalerweise ist die Vorab-Empfängerermittlung nicht interessant für Anwendungen, die selbst einen Empfänger mitgeben (wie Empfänger gesetzt werden, ist unter Routing beschrieben). Solche Anwendungen können jedoch die Methode RECEIVERS_EXIST verwenden, wenn Sie feststellen wollen, ob im Integration Directory Routing-Regeln für das Sender-/Empfänger-Paar existieren. Sie müssen auf jeden Fall das gleiche Sender-/Empfänger-Paar angeben, dass Sie auch beim Setzen des Empfängers verwendet haben.