SAP では、リモート関数呼び出し (RFC) サーバーとして SAP に登録されている他のアプリケーションまたは SAP システムで関数を呼び出せます。 WebSphere® Message Broker では、SAP に RFC サーバーとして SAP アダプターを登録し、SAP からの同期および非同期呼び出しを受け入れることができます。
SAP では、BAPI インターフェースが関数呼び出しです。 SAP に RFC サーバーとしてシステムが接続している場合、BAPI インターフェースを使用して、SAP で実行されているプログラムが外部システムを呼び出すことができるインターフェースを定義できます。 この外部システムは、RFCDestination 値によって SAP で識別されます。この値は、SAP 管理のプログラム ID にバインドされます。 プログラム ID は、外部システムが最初に SAP に接続する際に指定されます。
WebSphere Adapter for SAP を使用して、アダプターに関連するプログラム ID を構成し、メッセージ・フローをブローカーにデプロイすると、メッセージ・フローを RFC サーバーとして SAP に接続できます。 デプロイメント後、メッセージ・フローは BAPI インターフェースを使用して同期関数呼び出しを受信できます。
BAPI インポート・パラメーターは、アダプターにより受け取られ、メッセージ・ツリー構造として SAPInput ノードから伝搬されます。 BAPI エクスポート・パラメーターは、SAPReply ノードにメッセージ・ツリー構造として伝搬されます。 その後、アダプターはエクスポート・パラメーターを呼び出し元の SAP プログラムに戻します。 この場合、通常 SAPReply ノードは SAPInput ノードと同じフロー内にあります。 SAPInput ノードは、各 BAPI 呼び出しに固有 ID (応答 ID) を提供します。 応答 ID は SAPReply ノード (ローカル環境内) に伝搬され、応答している BAPI 呼び出しを示します。
ローカル環境に応答 ID が全くない場合、SAPReply ノードは、メッセージ・フローの現在の実行をトリガーした SAPInput ノードからの応答 ID を自動的に使用します。 フローが SAPInput ノード以外によってトリガーされた場合、またはフローで中断が生じた場合、エラーが出されます。 メッセージ・フローで未処理の例外が生じると、SAP におけるシステム障害の原因となります。
BAPI が出力パラメーターを全く予期しない場合であっても、(空の) メッセージが SAPReply ノードに伝搬される必要があります。
メッセージ・フローに追加インスタンスを加えて構成すると、SAP からの 2 つの同時のコールアウトを処理できます。
シナリオ 1
以下のダイアグラムは、WebSphere Message Broker が SAP とターゲット・アプリケーション (この場合、DB2®) 間のリンクを提供するメッセージ・フローを示しています。SAP プログラムは応答データを必要とするので、呼び出しが完了するまでは他の処理をブロックします。
シナリオ 2
以下のダイアグラムも、SAP プログラムが応答データを必要とするメッセージ・フローを示していますが、このシナリオでは、WebSphere Message Broker とターゲット・アプリケーション (この場合、WebSphere MQ) 間の呼び出しは非同期です。 SAP システムは、呼び出しが完了するまでその他の処理をブロックします。 SAP の「最大クライアント待機時間」プロパティーの値が不十分である場合、または 0 に設定されている場合、タイムアウト・エラーが生成される可能性があります。 SAP 入力ノードの「最大クライアント待機時間」プロパティーについて詳しくは、最大クライアント待機時間 (秒) を参照してください。 SAPInput ノードとは違うフロー内で SAPReply ノードを使用する際には、SAPInput ノードと同一の実行グループ中に SAPReply ノードをデプロイしてください。
シナリオ 3
以下のダイアグラムは、SAP から WebSphere Message Broker への非同期呼び出しと、WebSphere Message Broker からターゲット・アプリケーションへの非同期呼び出しを示しています。 このシナリオは、このトピックで説明されているインバウンド処理とアウトバウンド処理を結合させて、シナリオ 1 と 2 と同じ結果を達成する方法を示しています。アウトバウンド処理について詳しくは、BAPI インターフェースのアウトバウンド処理を参照してください。