2017-06-04 23 views
1

私はSAP ABAPの初心者です。私は非同期RFC(並列処理)をデバッグしています。私はRFCの呼び出し部分にブレークポイントを、RFCの内部には外部ブレークポイントを、実行の際にはタスクの最後に呼び出される形式で外部ブレークポイントを配置しました。私はRFC FMをデバッグすることができます。非同期RFCをデバッグする方法 - 新しいタスクを開始する...タスクの最後に実行する...?

別のセッションが開きます。しかし、私はタスクの終了後に呼び出される演奏をデバッグすることができません。 RFCがデバッグされると、コントロールはFMの呼び出しポイントに戻ります。フォームの中には入っていません。すべての反復が終了すると、最後に演奏の中に入ります。なぜそうなのか?実行は並行して実行してはいけませんか?私はFUNCTIONのXXXからの結果を受け取るように書かれている実行インサイド

。しかし、デバッガの制御は、RFCから戻った後に実行されません。

+1

[もっと速い回答を得るために、どのような状況で「緊急」や他の類似のフレーズを追加することができますか?](https://meta.stackoverflow.com/q/326569) - 概要は次のとおりですこれはボランティアに対処する理想的な方法ではなく、おそらく回答を得ることには非生産的であるということです。これをあなたの質問に追加しないでください。 – halfer

+0

私はそれを気にします。ありがとう – user3757558

答えて

1

あなたがプログラム全体の流れにはほとんど情報を与えているが、あなたのケースに関連するかもしれないdocumentationの部分があります:

登録したコールバック・ルーチンを実行するための前提条件は、 であります リモート機能が終了すると、呼び出し元のプログラムは内部セッションにまだ存在します。ロールインでの作業プロセスの次の変更でここで実行されるです。プログラムが で終了した場合、またはコールシーケンスの一部としてスタックに配置されている場合、 コールバックルーチンは実行されません。

[...]

に実行されるコールバックルーチンが明示的 をプログラムすることができますまたは暗黙的に到達する時間:非同期タスクFOR

  • ステートメントWAITは、明示的なプログラミングのために使用されています。条件で指定されているとおり、このステートメントは ワークプロセスを変更し、今度は に登録されたコールバックルーチンを実行します。 の条件が満たされるまで(最大待ち時間を制限することができる)、多くの登録ルーチンが終了するのを待ちます。現在のプログラムでリモート機能 の結果が必要な場合は、明示的な のプログラミングが推奨されます。

  • リモート関数の結果は、現在のプログラムで必要とされない場合は、コールバック・ルーチンが実行される時間が も終わりに、 例えば(ワークプロセスの暗黙的な変化によって決定することができるがダイアログステップの)。 WAITの使用が望ましくないGUIシナリオでは、これは良い例です( の例)。 この場合、 プログラムが終了する前に作業プロセスが変更されていることを確認する必要があります。また、作業プロセスが で暗黙的に変更された場合、すべてのコールバックルーチンが時間通りに登録されるわけではないというリスクもあります。

プログラム呼び出しを発行し、コールバックルーチンの登録が終了されるか、またはコールバックが唯一の次のロールイン上で実行されるようにWAIT FOR ASYNCHRONOUS TASKSを発行しない可能性が高いです。


あなたの質問を再度読んで、明らかに、コールバックルーチンがそれを登録したプログラムと並行して実行されると仮定します。そうではありませんが、ABAPはマルチスレッドではありません。

+0

私ははっきりしていません。私のプログラムは終了しません。私のコールバックルーチンがRFCから返ってから実行されないのはなぜですか? – user3757558

+0

システムデバッガなどのように考慮する必要のあるデバッグオプションはありますか?明確な考えが必要です – user3757558

+1

はい。いいえ。実際のプログラムに関する詳細情報を、誰でも設定を理解できる形で提供することが望ましい。 – vwegert

関連する問題