Ansicht
Dokumentation
OAARFCRD - Transaktionaler RFC
CL_GUI_FRONTEND_SERVICES - Frontend Services Addresses (Business Address Services)Diese Dokumentation steht unter dem Copyright der SAP AG.
Beschreibung
Zu Release 3.0 ist es möglich, Funktionsbausteine asynchron auf einem anderen R/3-System oder einem externen Programm ausführen zu lassen. Der Aufruf der Funktionsbausteine erfolgt nicht sofort, sondern beim nächsten COMMIT WORK. Bis zu diesem Zeitpunkt werden die Aufrufe in einer internen Tabelle aufgesammelt. Sie bilden pro Destination eine Logical Unit of Work (LUW).
Bei COMMIT WORK werden alle Aufrufe auf einem gerade freien Workprozeß in der Reihenfolge ihres Aufrufs abgearbeitet. Wurden vor COMMIT WORK auch Verbuchungssätze abgesetzt, werden die asynchron abgesetzten Funktionsbausteine erst ausgeführt, wenn die Funktionsbausteine zur Verbuchung fehlerfrei abgearbeitet werden konnten.
Der Transaktionale asynchrone tRFC garantiert, daß alle Datenbankoperationen als Ganzes durchgeführt
werden oder, falls einer der Funktionsbausteine mit einem Abbruch reagiert, gänzlich verworfen
werden (Rollback). Wurde eine LUW fehlerfrei ausgeführt, kann sie nicht noch einmal ausgeführt
werden (exactly once). In bestimmten Fällen kann es nötig werden, eine LUW anwendungsprogrammiert
zurückzurollen; z.B. weil eine Tabelle gerade gesperrt ist. Dazu wird der Funktionsbaustein RESTART_OF_BACKGROUNDTASK
aufgerufen. Er führt einen Rollback durch und veranlaßt, daß die LUW zu einem späteren
Zeitpunkt nocheinmal ausgeführt wird. Jeder LUW ist eine Transaktions-Id zugeordnet. Diese müssen
Sie nur kennen, wenn Sie z.B. auf die Ausführung der Funktionsbausteine IN BACKGROUND TASK warten wollen.
Der Funktionsbaustein ID_OF_BACKGROUNDTASK liefert die ID der LUW. Er ist nach dem 1. CALL... IN BACKGROUNDTASK und vor COMMIT WORK aufzurufen. Mit dem Funktionsbaustein
STATUS_OF_BACKGROUNDTASK und der ID kann zu einem späteren Zeitpunkt abgefragt
werden, ob die LUW fehlerfrei durchgeführt wurde. Im allgemeinen wird die LUW sofort nach COMMIT
WORK auf dem angegebenen Zielsystem ausgeführt. Soll der Start jedoch zu einem bestimmten Zeitpunkt
erfolgen, so kann mit dem Funktionsbaustein START_OF_BACKGROUNDTASK ein Startzeitpunkt
gesetzt werden. Auch dieser Funktionsbaustein ist innerhalb der LUW, also nach dem 1. CALL... IN BACKGROUNDTASK und vor COMMIT WORK, aufzurufen.
Technische Realisierung
Alle Aufrufe werden in den Tabellen ARFCSSTATE und ARFCSDATA aufgezeichnet. Jede LUW ist durch eine
weltweit eindeutige ID gekennzeichnet. Bei COMMIT WORK werden die unter dieser ID aufgezeichneten Aufrufe
auf dem entsprechende Zielsystem ausgeführt. Dazu transportiert der Systemfunktionsbaustein ARFC_DEST_SHIP
die Daten auf das Zielssystem und der Funktionsbaustein ARFC_EXECUTE führt die aufgezeichneten
Funktionsaufrufe aus. Tritt bei einem der Aufrufe ein Fehler oder eine Exception auf, dann werden alle
von den vorhergehenden Aufrufen abgesetzten Datenbankoperationen zurückgenommen (ROLLBACK) und
eine entsprechende Fehlermeldung in die Datei ARFCSSTATE geschrieben. Diese Fehlermeldung kann mit Hilfe der Transaktion SM58 ausgewertet werden.
Konnte eine LUW erfolgreich auf dem Zielsystem ausgeführt werden, wird der Funktionsbaustein
ARFC_DEST_CONFIRM aufgerufen, der das erfolgreiche Ausführen auf dem Zielsystem quittiert. Zuletzt werden die entsprechenden Einträge in ARFCSSTATE und ARFCSDATA gelöscht.
Konnte das Zielsystem nicht erreicht werden, weil z.B. die Verbindung zur Zeit nicht aktiv ist, dann
wird der Report RSARFCSE mit der ID als Parameter im Batch eingeplant und in regelmäßigen
Abständen aufgerufen. Die dabei wirksam werdenden Standardwerte können Sie sich mit 'Info
-> Systemeinstellung' in der SM58 anzeigen lassen. Wollen Sie pro Destination eine eigene Einstellung
verwenden, können Sie dies mit den TRFC-Optionen in der Transaktion SM59 bekanntgeben. Ferner
können Sie durch die Erweiterung SABP0003 (Pflege m.H. der Transaktion CMOD) diese Einstellung
individuell nach Destination, Benutzernamen etc. übersteuern. Wird in der vorgesehenen Zeit keine
Verbindung erreicht, dann wird der Eintrag in der ARFCSSTATE nach einer bestimmten, ebenfalls von Ihnen
in der Erweiterung festgelegten Zeit gelöscht. Das Löschen erfolgt durch Batcheinplanung des Reports RSARFCDL.
Weitere Hinweise
Debuggen
Rufen Sie die betreffende Transaktion im Debugger auf und setzen Sie in 'Springen->Einstellungen' das Auswahlfeld 'In Background Task:...' Das bewirkt, daß die LUW nicht sofort versendet wird. Sie haben dadurch die Möglichkeit, mittels SM58 die LUW im Debugger auszuführen.
RFC-API
Es ist auch möglich, in 'C' implementierte Funktionsbausteine asynchron auszuführen (Verbindungstyp TCP/IP in SM59). Die Implementierung der Funktionsbausteine erfolgt wie gewohnt in Verbindung mit der RFC-API. Die Funktionsbausteine ARFC_DEST_SHIP und ARFC_DEST_CONFIRM sind dort enthalten und rufen die entsprechenden Funktionen auf.
Einschränkungen:
- Die Windows-API unterstützt asynchrone Aufrufe noch nicht.
- Das einmalige Ausführen muß von der Implementierung des Funktionsbausteins gewährleistet werden.
PERFORM Short Reference PERFORM Short Reference
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 5782 Date: 20240520 Time: 122343 sap01-206 ( 156 ms )