使用する
非同期で呼び出された関数から結果を受け取るには、次の構文を使用します。
CALL FUNCTION Remotefunction
STARTING NEW TASK Taskname
PERFORMING RETURN_FORM ON END OF TASK.
呼び出された関数が完了すると、呼び出し側プログラム(などAT USER-COMMAND)の次のダイアログステップが、システムをFORMルーチンに導き、結果をチェックします。このFORMルーチンは特別な構文で構成されており、タスクの名前を参照するusingパラメーターを使用して呼び出す必要があります。
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.
-
汎用モジュールが結果を返さない場合は、追加PERFORMING RETURN_FORM ON END OF TASKを省略できます。
-
非同期呼び出しが同じ宛先を持つ複数の連続する汎用モジュールを呼び出す場合は、それぞれに異なるタスク名を割り当てる必要があります。
-
で非同期RFCを開始する呼び出し側プログラムは、PERFORMINGロール領域を切り替えたり、内部モードに変更したりすることはできません。これは、非同期汎用モジュール呼び出し応答を関連するプログラムに渡すことができないためです。SUBMITまたはでロールエリア切り替えを実行できますCALL TRANSACTION。
-
非同期呼び出しを実行した呼び出し側プログラムが終了した場合、応答を期待しているにもかかわらず、非同期呼び出しからのこれらの応答は配信できません。
-
PERFORMINGフォームONENDOF TASKでWAITステートメントを使用して、以前に開始された非同期呼び出しへの応答を待つことができます。この場合、WAITは同じプログラムコンテキストにある必要があります。
-
問題のタスクを実行するサブルーチンによって論理式の条件が満たされた場合、または指定された期間を超えた場合、プログラム処理はWAIT後に続行されます。WAITステートメントの詳細については、ABAPエディタのオンラインヘルプを参照してください。
-
キーワードRECEIVEは、汎用モジュール呼び出しでのみ発生しますCALL FUNCTION Remotefunction STARTING NEW TASK Taskname。汎用モジュールが結果を返さない場合は、この部分を定義する必要はありません。
-
ステートメントの効果はSET USER-COMMAND 'OKCD'、ユーザーがコマンドフィールドに関数を入力してEnterキーを押した場合とまったく同じです。したがって、リストとカーソルの現在の位置が考慮されます。
コールバックはサポートされていません。
SET USER-COMMAND 'OKCD'ステートメントはコマンドを置き換えますREFRESH SCREEN。REFRESH SCREENはメンテナンスされていないため、使用しないでください。
DATA: INFO LIKE RFCSI,
* Result of RFC_SYSTEM_INFO function module
MSG(80) VALUE SPACE.
* Exception handling
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: 'Wait for response'.
ELSE.
WRITE MSG
ENDIF.
...
AT USER-COMMAND.
* Return from FORM routine RETURN_INFO via 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'. "Sets OK code
ENDFORM.