Um Ergebnisse eines asynchron gerufenen Funktionsbausteins zu erhalten, verwenden Sie folgende Syntax:
CALL FUNCTION Remotefunction
STARTING NEW TASK Taskname
PERFORMING RETURN_FORM ON END OF TASK.
Sobald der gerufene Funktionsbaustein beendet ist, führt der nächste Dialogschritt im rufenden Programm (z.B. AT USER-COMMAND) das System in die FORM-Routine, die nach Ergebnissen sucht. Diese FORM-Routine besteht aus einer besonderen Syntax und muss mit einem USING-Parameter aufgerufen werden, der sich auf den Namen der Aufgabe bezieht:
Client-System
CALL FUNCTION Remotefunction
STARTING NEW TASK Taskname
DESTINATION Dest
PERFORMING RETURN_FLIGHT ON END OF TASK.
...
FORM RETURN_FLIGHT USING Taskname.
RECEIVE RESULTS FROM FUNCTION Remotefunction
IMPORTING F1 = a1
EXCEPTIONS SYSTEM_FAILURE MESSAGE SYSTEM_MSG.
SET USER-COMMAND 'OKCD'.
ENDFORM.
Wenn ein Funktionsbaustein kein Ergebnis zurückliefert, können Sie den Zusatz PERFORMING RETURN_FORM ON END OF TASK weglassen.
Wenn ein asynchroner Aufruf mehrere aufeinander folgende Funktionsbausteine mit derselben Destination aufruft, müssen Sie jedem einen anderen Aufgabennamen zuordnen.
Ein rufendes Programm, das einen asynchronen RFC mit PERFORMING startet, kann nicht den Rollbereich ändern oder in einen internen Modus wechseln, weil die Antwort auf den asynchronen Aufruf eines Funktionsbausteins dann nicht an das entsprechende Programm weitergeleitet werden kann. Einen Wechsel des Rollbereichs führen Sie mit SUBMIT oder CALL TRANSACTION durch.
Wenn das rufende Programm, das den asynchronen Aufruf abgesetzt hat, beendet wird, obwohl es noch auf eine Antwort wartet, dann kann diese Antwort auf den asynchronen Aufruf nicht abgeliefert werden.
Wenn Sie die Anweisung WAIT bei PERFORMING form ON END OF TASK verwenden, wartet das System auf die Antwort eines zuvor gestarteten asynchronen Aufrufs. WAIT muss hier im selben Programmkontext stehen.
Das System setzt die Verarbeitung des Programms nach WAIT fort, wenn entweder die Bedingung eines logischen Ausdrucks von der Unterroutine erfüllt wurde, welche die fragliche Aufgabe ausführt, oder wenn eine festgesetzte Zeitspanne überschritten wurde. Nähere Informationen zu WAIT finden Sie in der Online-Hilfe des ABAP-Editors.
Das Schlüsselwort RECEIVE gibt es nur beim Funktionsbausteinaufruf CALL FUNCTION Remotefunction STARTING NEW TASK Taskname. Wenn der Funktionsbaustein keine Ergebnisse liefert, können Sie diesen Teil weglassen.
Die Anweisung SET USER-COMMAND 'OKCD' wirkt so als ob der Benutzer diese Funktion im Befehlsfeld eingegeben und bestätigt hätte; d.h. die aktuellen Positionen der Liste und des Cursors werden berücksichtigt.
Rückrufe werden nicht unterstützt.
Die Anweisung SET USER-COMMAND 'OKCD' ersetzt die Anweisung REFRESH SCREEN. REFRESH SCREEN wird nicht länger gepflegt und sollte daher nicht verwendet werden.
DATA: INFO LIKE RFCSI,
* Ergebnis des RFC_SYSTEM_INFO-Funktionsbausteins
MSG(80) VALUE SPACE.
* Behandlung der Ausnahmen
CALL FUNCTION 'RFC_SYSTEM_INFO'
STARTING NEW TASK 'INFO'
PERFORMING RETURN_INFO ON END OF TASK
EXCEPTIONS
COMMUNICATION_FAILURE = 1 MESSAGE MSG
COMMUNICATION_FAILURE = 2.MESSAGE MSG.
IF SY-SUBRC = 0.
WRITE: 'Warte auf Antwort'.
ELSE.
WRITE MSG
ENDIF.
...
AT USER-COMMAND.
* Rückkehr aus FORM-Routine RETURN_INFO über SET USER-COMMAND
IF SY-UCOMM = 'OKCD'.
IF MSG = SPACE.
WRITE: 'Destination =', INFO-RFCDEST.
ELSE.
WRITE MSG.
ENDIF.
ENDIF.
...
FORM RETURN_INFO USING TASKNAME.
RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO'
IMPORTING RFCSI_EXPORT = INFO
EXCEPTIONS
COMMUNICATION_FAILURE = 1 MESSAGE MSG
SYSTEM_FAILURE = 2 MESSAGE MSG.
SET USER-COMMAND 'OKCD'. "Setzt OK-Code
ENDFORM.