Show TOC

FunktionsdokumentationErgebnisse von einem asynchronen RFC empfangen Dieses Dokument in der Navigationsstruktur finden

 

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.