BAPI インバウンド処理およびアウトバウンド処理の場合、処理が同期的に処理されるように指定することも (メッセージ・フロー
とアダプターの両方が処理の際に使用可能になる必要があります)、非同期的に処理されるように指定することもできます (クライアント・アプリケーションで関数が呼び出される際にアダプターは使用可能になる必要はありません)。
同期処理の場合、メッセージ・フロー
はアダプターからの応答を待機します。非同期処理では、SAP アプリケーションは応答を待機せずに、SAP アプリケーションが関数呼び出しを行う際にアダプターが使用可能である必要はありません。
同期および非同期 RFC を示す図については、BAPI インバウンド・シナリオを参照してください。
BAPI インターフェースには 2 セットのアクティベーション指定プロパティーがあり (1 つは同期 RFC 用、もう 1 つは非同期 RFC 用)、これを使用してインバウンド処理をセットアップします。 「アダプター接続」ウィザードを使用して、これらのプロパティーに値を指定します。
インバウンド要求の結果として実行される処理アクションの順序は、構成時に「SAP リモート関数呼び出し (RFC) タイプ」リストから選択した項目によって異なります。
同期 RFC
構成時に
「同期 RFC」 (デフォルト) を選択すると、以下の処理ステップが実行されます。
- アダプターがイベント・リスナーを開始します。このリスナーは SAP サーバーで (RFCProgramID プロパティーで指定した) RFC 対応機能イベントを listen します。
- RFC 対応機能イベントは、イベント・リスナーによってアダプターにプッシュされます。
- アダプターは、受信した RFC 対応関数名を使用して、操作とビジネス・オブジェクト名を解決します。
- アダプターはビジネス・オブジェクトをエンドポイントに同期的に送信します。
- アダプターは、エンドポイントから応答ビジネス・オブジェクトを受信します。
- アダプターは応答ビジネス・オブジェクトを RFC 対応機能にマップし、それを SAP サーバーに戻します。
アダプターは、エンドポイントがアクティブになり使用可能になるまではイベントを listen しません。
非同期トランザクション RFC
構成時に「トランザクション/キューに入れられた非同期 RFC」を選択すると、以下の処理ステップが生じます。- SAP サーバー上のクライアントが、アダプターで RFC 対応関数呼び出しを呼び出します。
注: SAP サーバー上のキューから RFC 対応関数を送信するため、SAP サーバー上のクライアント・プログラムはイベントをユーザー定義のアウトバウンド・キューに送信します。
トランザクション ID はこの呼び出しに関連付けられます。
SAP サーバー上の呼び出し側プログラムは、アダプターへの呼び出しが正常に行われたかどうかを確認するために待機しないので、呼び出し側プログラムに戻されるデータはありません。
- RFC 関数呼び出しは、送信される関数のリスト上に置かれます。
SAP サーバー上でトランザクション・コード SM58 を入力すると、イベント・リストを表示できます。
- RFC 関数呼び出しは、アダプターで呼び出します。 アダプターが使用できない場合、呼び出しは SAP サーバー上のリストにとどまり、呼び出しが他のアダプターによって処理可能になるまでは定期的に呼び出しが繰り返されます。
SAP サーバーが呼び出しイベントを正常に送信すると、リストからその関数が削除されます。
- 「確実一回のみイベント送達」を選択した場合、アダプターはイベント永続表にトランザクション ID を設定します。
これにより、イベントが複数回処理されないようになります。
- アダプターは、受信した RFC 対応関数名を使用して、操作とビジネス・オブジェクト名を解決します。
- アダプターはビジネス・オブジェクトをエンドポイントに送信します。
SAP サーバー上のユーザー定義キューから関数を送信している場合、キュー内の関数順で送信されます。 SAP サーバー上でトランザクション・コード SMQ1 を入力すると、キューの内容を表示できます。
- 送信が正常に行われ、「確実一回のみイベント送達」を選択していた場合には、アダプターによってイベント永続表からトランザクション ID が削除されます。
アダプターがビジネス・オブジェクトを送信する際に障害が生じると、トランザクション ID はイベント表にとどまります。 別のイベントを
SAP サーバーから受信すると、以下の処理が生じます。
- アダプターはトランザクション ID を検査します。
- イベントが表内の ID と一致すると、障害が発生したイベントをアダプターが一度処理します。重複 ID のイベントは送信されないので、イベントは一度限り処理されます。