Ansicht
Dokumentation

ABENRFC_SERVER_PGM - RFC SERVER PGM

ABENRFC_SERVER_PGM - RFC SERVER PGM

ROGBILLS - Synchronize billing plans   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ABAP-Server-Programm läuft nicht

Ein RFC-Server-Programm ist ein Programm, das die SAP-RFC-Schnittstelle verwendet und von einem AS ABAP aus über CALL FUNCTION ... gestartet wird.

Ursache und Voraussetzungen

Verschiedene Ursachen sind - je nach Programm - denkbar :

  • Falsche oder unvollständige Einträge in SM59 (Parametrisierung der RFC-Destination)
  • Netzwerkprobleme
  • Fehlende Berechtigungen
  • Fehler in RFC-Serverprogramm

Lösung

Bei Problemen mit RFC-Serverprogrammen kann folgende Checkliste abgearbeitet werden:

  • Einstellungen in SM59 :
  • Die verwendete Destination muss in SM59 mit dem Typ T eingetragen sein.

  • Geben Sie für das zu startende Programm möglichst einen vollständigen Pfadnamen an.

  • Haben Sie die Destination gesichert?

  • Konfiguration auf Betriebssystemebene:

Die nächsten Punkte hängen von der Eingabe des Hostnames in der Destination ab:

  • In 'Hostname' wird ein Name eingetragen (In Rel. 3.0 Auswahlknopf 'explizit' gedrückt) oder es wird (unter Gateway-Optionen) ein Nicht-Standard-Gateway abgelegt:
Das Programm wird in diesem Fall von dem Standard-Gateway-Programm des Systems bzw. von dem explizit eingetragenen Gateway (gwrd) über 'Remote Shell' gestartet. Stellen Sie sicher, dass der angegebene Rechner von dem Rechner des Gateway-Prozesses erreichbar ist. Nehmen Sie dazu auf diesem Rechner folgende Eingabe vor:
/etc/ping host name> or ping host name>

Damit ein Programm mit 'Remote Shell' auf einem anderen Rechner gestartet werden kann, ist es notwendig, dass auf dem Zielsystem die Benutzer-ID des Gateway-Prozesses vorhanden ist und dass im HOME-Directory dieses Benutzers im Zielsystem eine Datei .rhosts existiert. In dieser Datei muss der Name des aufrufenden Rechners abgelegt sein. Um dies zu testen, melden Sie sich auf dem Rechner des Gateway-Prozesses unter der Benutzerkennung dieses Prozesses an und rufen Sie das Kommando
remsh Hostname> Programmname> auf. Hierbei müssen Sie bei Hostname> und Programmname> dasselbe wie in SM59 eingeben. ( Wird ein RFC-Serverprogramm ohne Parameter aufgerufen, so liefert der Aufruf von RfcAccept darin auf jeden Fall einen Fehlercode (RFC_HANDLE_NULL) zurück und das Programm müsste sofort wieder abbrechen).

  • In 'Hostname' wird keine Eintragung gemacht (bzw. in 3.0: Radio-Button 'Server' gedrückt):
Das Programm wird in diesem Fall von der aus gestartet. Stellen Sie sicher, dass das Programm vom SAP-Applikationsserver aus erreichbar ist.
Stellen Sie sicher, dass die die Berechtigung zu Starten des Programms besitzt. Melden Sie sich hierzu unter der Benutzer-ID der (i.a c11adm) an. Gehen Sie möglichst in das 'work'-Directory der (/usr/sap/.../D.../work) und versuchen Sie von dort das RFC-Serverprogramm von Hand zu starten. ( Wie oben : wird ein RFC-Serverprogramm ohne Parameter aufgerufen so liefert der Aufruf von RfcAccept darin auf jeden Fall einen Fehlercode
(RFC_HANDLE_NULL) zurück und das Programm

Beispiel müsste sofort wieder abbrechen).

  • In 3.0 kann auch der Radio-Button 'User' gedrückt werden.
In diesem Fall wird das Programm von 'SAPGUI', d.h. unter der Benutzer-ID und dem Environment des Benutzers gestartet.
* Stellen Sie sicher, dass das Programm von 'sapgui'/'saptemu' erreichbar ist.
* Stellen Sie sicher, dass 'sapgui' die Berechtigung zu Starten des Programms besitzt.
* Versuchen Sie hierzu einfach, das RFC-Serverprogramm in Ihrem Environment aufzurufen.
  • Probleme im RFC-Serverprogramm selbst
  • Um 'stderr'-Ausgaben des RFC-Serverprogramms aufzufangen, können Sie anstelle des eigentlichen Serverprogramms ein Rahmenprogramm in die Destination eintragen, das wiederum das eigentliche Serverprogramm mit derselben Kommandozeile startet und dabei aber die Standardausgabe des Programms auf ein File umlenkt.

Beispiel:
RFC-Serverprogramm sei /xxx/xxxx
Aufgerufen wird aber das C-Shell-Script (vergessen Sie nicht die Angabe der Shell in der 1. Zeile) :
#!/bin/csh
date >> /tmp/rfclog
/xxx/xxxx $* >>& /tmp/rfclog
echo $status >>& /tmp/rfclog

Zeigen Sie sich die Log-Datei /tmp/rfclog zur weiteren Fehleranalyse an.
  • Sie können in der RFC-Destination den Trace-Schalter aktivieren (Sichern nicht vergessen). Dann wird von dem RFC-Serverprogramm in seinem aktuellen Directory eine Datei 'dev_rfc' mit allen empfangenen Daten, Operationen und aufgetretenen Fehlern beschrieben.

  • Debugging eines RFC-Serverprogramms: Ein RFC-Serverprogramm kann mit Hilfe eines C-Debuggers wie dbx, xdb oder Codeview etc analysiert werden. Dazu gehen Sie wie folgt vor:

Tragen Sie in SM59 für Ihre Destination ein Programm ein, das einfach die ihm übergebene Kommandozeile in eine definierte Datei schreibt :
Beispiel (C-Shell)

#!/bin/csh
echo $* > /tmp/rfc
Rufen Sie den C-Debugger mit Ihrem RFC-Serverprogramm auf, z.B. XdbProgrammname> und setzen Sie einen Breakpoint hinter den Aufruf von RfcAccept.
Starten Sie das aufrufende ABAP-Programm. Dies führt dazu, dass das oben beschriebene Rahmenprogramm seine Kommandozeile in seine Ausgabedatei (/tmp/rfc im Beispiel) schreibt.
Lesen Sie diese Datei und starten Sie schnell das in den Debugger geladene RFC-Serverprogramm mit derselben Kommandozeile.





Fill RESBD Structure from EBP Component Structure   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7273 Date: 20240523 Time: 090055     sap01-206 ( 97 ms )