Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Vorab-Empfängerermittlung  Dokument im Navigationsbaum lokalisieren

Einsatzmöglichkeiten

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.

Voraussetzungen

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.

Funktionsumfang

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

Aktivitäten

Vorab-Emfpängerermittlung mit oder ohne Payload

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.

Hinweis

Sie können die Payload auch schon beim ersten Aufruf mitgeben.

Vorab-Empfängerermittlung mit Angabe des Empfängers

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.

 

 

 

Ende des Inhaltsbereichs