!--a11y-->
Transaktionale Integrität von
tRFCs 
Sie können Funktionsbausteine im Hintergrund in einem anderen SAP-System oder einem externen Programm ausführen. Solcherart aufgerufene Funktionsbausteine werden nicht sofort ausgeführt, sondern warten, bis ein COMMIT WORK ausgelöst wird.
Transaktionale RFCs verdanken ihren Namen der Tatsache, dass der zugeordnete Aufrufmechanismus die transaktionale Integrität für alle innerhalb des IN BACKGROUND TASK-Suffixes durchgeführten Aufrufe garantiert. So wie bei Datenbankaktualisierungen werden auch für Aufrufe, die zum Ablauf in Hintergrund-Aufgaben eingeplant sind, logische Arbeitseinheiten (LUWs) erzeugt. Alle tRFCs mit einer einzigen Destination, die zwischen zwei COMMIT WORK-Anweisungen vorkommen, gehören zu einer einzigen LUW. Innerhalb einer LUW werden alle Aufrufe
· in der Reihenfolge ausgeführt, in der sie aufgerufen werden
· im selben Programmkontext im Zielsystem aufgeführt
· in einer einzigen Transaktion ausgeführt: sie werden entweder komplett auf die Datenbank geschrieben (COMMIT) oder komplett zurückgesetzt (ROLLBACK).
LUWs werden anhand von Transaktionskennungen identifiziert, die weltweit eindeutig sind. Zur Festlegung der Transaktionskennung rufen Sie in einem ABAP-Programm den Funktionsbaustein ID_OF_BACKGROUNDTASK auf. (Sie müssen diesen Funktionsbaustein nach dem ersten asynchronen CALL und vor dem zugehörigen COMMIT WORK aufrufen.)
Da der RFC wie eine Transaktion behandelt wird, werden Datenbankoperationen entweder alle ausgeführt oder, falls ein Funktionsbaustein abbricht, alle zurückgesetzt. Wurde eine LUW erfolgreich abgeschlossen, können Sie sie nicht noch einmal ausführen. In manchen Fällen kann es erforderlich sein, eine LUW programmgesteuert zurückzusetzen, z.B. wenn eine Tabelle gesperrt ist. Dazu rufen Sie den Funktionsbaustein RESTART_OF_BACKGROUNDTASK auf, der ein ROLLBACK durchführt und sicherstellt, dass die LUW später noch einmal ausgeführt wird.
In der Regel wird eine LUW sofort nach einem COMMIT WORK im Zielsystem ausgeführt. Sie können jedoch auch eine bestimmte Zeit festlegen, zu der sie ausgeführt werden soll. Dazu rufen Sie innerhalb der betreffenden LUW den Funktionsbaustein START_OF_BACKGROUNDTASK auf, und zwar nach dem ersten CALL... IN BACKGROUND TASK und vor COMMIT WORK.
Alle transaktionalen RFC-Aufrufe werden in den Tabellen ARFCSSTATE und ARFCSDATA gespeichert. Dabei wird jede LUW durch eine eindeutige ID identifiziert. Bei einem COMMIT WORK werden die zu dieser ID gehörenden Aufrufe im Zielsystem ausgeführt. Der Systemfunktionsbaustein ARFC_DEST_SHIP transportiert die Daten ins Zielsystem und der Funktionsbaustein ARFC_EXECUTE führt die gespeicherten Aufrufe aus. Tritt während eines Aufrufs ein Fehler oder eine Ausnahme ein, so setzt das System alle Datenbankoperationen, die von den vorhergehenden Aufrufen gestartet wurden, zurück und schreibt eine entsprechende Fehlernachricht in die Datei ARFCSSTATE.
Den Status einer Transaktionskennung können Sie auf zwei Arten prüfen:
· Aus einem ABAP-Programm
Der Funktionsbaustein ID_OF_BACKGROUNDTASK gibt die ID der LUW zurück. Rufen Sie diesen Funktionsbaustein nach dem ersten CALL... IN BACKGROUND TASK und vor COMMIT WORK auf.
CALL FUNCTION ‘ID_OF_BACKGROUNDTASK’ IMPORTING TASK-ID = TID.
Haben Sie die ID der LUW herausgefunden, können Sie mit dem Funktionsbaustein STATUS_OF_BACKGROUNDTASK den Status des transaktionalen RFC abfragen.
CALL FUNCTION ‘STATUS_OF_BACKGROUNDTASK’
|
EXPORTING TID |
= TASK-ID |
|
IMPORTING ERRORTAB |
= ERTAB |
|
EXCEPTIONS COMMUNICTATION |
= 01 |
|
(Verbindung nicht verfügbar: Versuch wird wiederholt) |
|
|
RECORDED |
= 02 |
|
(ARFC ist eingeplant) |
|
|
ROLLBACK |
= 03 |
|
(Rollback im Zielsystem ausgelöst) |
|
· Online
Rufen Sie die Transaktion SM58 auf (Werkzeuge ® Administration, Verwaltung ® Monitor ® Transaktionaler RFC). Dieses Werkzeug zeigt eine Liste aller transaktionalen RFCs an, die nicht erfolgreich abgeschlossen werden konnten oder die als Hintergrund-Jobs eingeplant werden mussten. Die Liste enthält die ID der LUW und die entsprechende Fehlernachricht, die im Zielsystem auftrat. Um den Text der Nachricht zu sehen, klicken Sie zweimal darauf.
Mit der Transaktion SM58 können Sie außerdem Ihren transaktionalen RFC in unterschiedlichen Phasen steuern. Wenn der Aufruf während des Sendevorgangs abbricht, können Sie mit der Funktion LUW-Rollback die LUW von Hand zurücksetzen, ehe Sie einen neuen Sendeversuch starten. Wenn das Zielsystem nicht verfügbar ist, können Sie mit der Funktion Eingeplante Jobs anzeigen den Hintergrund-Job anzeigen, den das System für Sie erzeugt hat. Wenn ein temporärer Fehler aufgetreten ist (z.B. ein Syntaxfehler), können Sie mit der Funktion Funktionsbaustein ausführen den Aufruf erneut starten.
Wenn eine LUW im Zielsystem erfolgreich gelaufen ist, löst das System den Funktionsbaustein ARFC_DEST_CONFIRM aus und bestätigt die erfolgreiche Ausführung im Zielsystem. Anschließend werden die Einträge in den Tabellen ARFCSSTATE und ARFCSDATA gelöscht.
Auch in Funktionsbausteinen, die in 'C' implementiert wurden, können Sie Programme asynchron ausführen (Verbindungstyp TCP/IP in Transaktion SM59, siehe Destinationstypen). Die Funktionsbausteine werden wie üblich in Verbindung mit der RFC-Bibliothek implementiert. Die RFC-Bibliothek enthält die Funktionsbausteine ARFC_DEST_SHIP und ARFC_DEST_CONFIRM, welche die entsprechenden Funktionen aufrufen.