Ansicht
Dokumentation

OAARFCRD - Transaktionaler RFC

OAARFCRD - Transaktionaler RFC

CL_GUI_FRONTEND_SERVICES - Frontend Services   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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 )