BizTalk Serverを使用して SAP から受信 RFC 呼び出しを受信する
RFC サーバー シナリオでは、次の 3 つのエンティティがあります。
RFC を呼び出す要求を SAP に送信する SAP クライアント。 これは、SAP GUI を使用するか、SAP アダプターを介して RFC クライアント呼び出しを行うことによって呼び出すことができます。
SAP クライアントが呼び出す RFC 関数定義を含む SAP システム。 SAP システムは、要求を RFC サーバー (アダプター) に渡します。 これは、SAP サーバーがアダプターに対して行う RFC 呼び出しのメタデータを取得するためにアダプターによって使用されます。
RFC サーバーとして機能し、実際の RFC をホストする SAP アダプター。
最初のエンティティである SAP クライアントについては、このトピックでは説明しません。 SAP GUI を使用して RFC を呼び出す場合は、SAP ドキュメントを参照してください。 SAP アダプターを使用して RFC を呼び出す場合は、「BizTalk Serverを使用して SAP で RFC を呼び出す」を参照してください。
このセクションでは、SAP クライアントによって RFC が呼び出されると、アダプターを使用して RFC サーバー呼び出しを受信する方法について説明します。 アダプターが SAP アダプターを使用した RFC サーバー呼び出しの受信をサポートする方法の詳細については、「SAP での RFC に対する操作」を参照してください。
SAP システムから受信 RFC 呼び出しを受信する方法
BizTalk Serverを使用して SAP システムで操作を実行するには、「SAP アプリケーションを作成するための構成要素」で説明されている手続き型タスクが含まれます。 SAP システムから RFC 呼び出しを受信するには、次のタスクを実行します。
外部アプリケーション (この場合は SAP アダプター) に RFC を送信するように SAP システムを構成します。
BizTalk プロジェクトを作成し、SAP アダプターが SAP システムから受信する RFC のスキーマを生成します。
SAP システムからメッセージを受信し、応答を送信するためのメッセージを BizTalk プロジェクトに作成します。
SAP システムから RFC を受信して処理し、応答を SAP システムに送信するオーケストレーションを作成します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する手順について説明します。
SAP システムでのアクティビティ
SAP アダプターを使用して SAP システムから受信 RFC 呼び出しを受信する前に、SAP システムで次のタスクを完了してください。
SAP アダプターの RFC 変換先が存在する必要があります。 SAP アダプターは、SAP システムで定義されている RFC 宛先を介して SAP システムから RFC を受信します。 RFC 変換先には、SAP ゲートウェイ ホスト、SAP ゲートウェイ サービス、およびコードの接続 URI で指定する必要がある SAP プログラム ID が含まれています。 SAP で RFC 変換先を設定する方法については、「RFC、 RFC 変換先を作成し、SAP システムから RFC を送信する」を参照してください。
SAP システムで RFC を定義する汎用モジュールを作成する必要があります。 SAP アダプターは、SAP システムの RFC 定義を使用して、RFC に関するメタデータを取得します (デザイン時と実行時の両方)。 詳細については、「 SAP システムでの RFC の作成」を参照してください。
2 つの整数を追加し、その結果を返す RFC の SAP システム上のソース コードの例を次に示します。 このコードは、指定された宛先を介して RFC を呼び出すだけです。 関数の実装は、SAP アダプター クライアント コードによって行われます。
FUNCTION Z_RFC_ADD. *"------------------------------------------------------------------ *" *"Local interface: *" IMPORTING *" VALUE(X) TYPE INT4 *" VALUE(Y) TYPE INT4 *" VALUE(DEST) TYPE CHAR20 DEFAULT 'SAPADAPTER' *" EXPORTING *" VALUE(RESULT) TYPE INT4 *"------------------------------------------------------------------ CALL FUNCTION 'Z_RFC_ADD' DESTINATION DEST EXPORTING X = X Y = Y IMPORTING RESULT = RESULT. ENDFUNCTION.
このトピックに基づくサンプル
このトピックに基づく RFCServer のサンプルは、BizTalk アダプター パックでも提供されています。 詳細については、「 SAP アダプターのサンプル」を参照してください。
スキーマの生成
このトピックでは、SAP システムから受信 RFC 呼び出しを受信する方法を示すために、RFC のスキーマ Z_RFC_ADD 生成します。 前の手順でこの RFC を作成しました。 この RFC は、入力パラメーターとして 2 つの整数値を受け取ります。
特定の RFC のスキーマを生成する方法については、「 SAP の RFC 操作のメタデータを参照、検索、取得 する」を参照してください。
重要
受信 RFC 呼び出しのスキーマを生成するため、アダプター サービス BizTalk プロジェクト アドインの [コントラクトの種類の選択] ドロップダウン リストから [サービス (受信操作)] を選択してください。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 最初の手順で生成したスキーマを、BizTalk プロジェクトのオーケストレーション ビューからのメッセージにリンクする必要があります。
このトピックでは、2 つのメッセージを作成する必要があります。1 つは SAP システムからメッセージを受信し、もう 1 つは SAP システムに応答を送信するメッセージです。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
BizTalk プロジェクトに新しいオーケストレーションを追加します。
まだ開いていない場合は、オーケストレーション ビュー BizTalk プロジェクトを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
プロパティ 目的 識別子 「 Request」と入力します。 メッセージ型 ドロップダウン リストから [ スキーマ] を展開し、[ RFCServer.SAPBindingSchema.Z_RFC_ADD] を選択します。 RFCServer は BizTalk プロジェクトの名前です。 SAPBindingSchema は、RFC Z_RFC_ADD用に生成されたスキーマです。 手順 2 を繰り返して、新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ペインで、次の操作を行います。
プロパティ 目的 識別子 「 応答」と入力します。 メッセージ型 ドロップダウン リストから [ スキーマ] を展開し、[ RFCServer.SAPBindingSchema.Z_RFC_ADDResponse] を選択します。
オーケストレーションの設定
SAP システムから RFC サーバー呼び出しを受信するためにBizTalk Serverを使用するには、BizTalk オーケストレーションを作成する必要があります。 この例では、RFC クライアントが 2 つの整数を追加するために SAP システムに要求を送信するシナリオを考えてみましょう。 SAP システムは、入力パラメーターを使用して要求を受け取り、それを SAP アダプターによってホストされる外部 RFC サーバーに渡します。 SAP アダプターは、SAP システムから要求を受信し、要求を処理して 2 つの整数を追加し、応答を生成します。 SAP アダプターは、応答を SAP システムに渡します。これにより、RFC クライアントに渡されます。
これをオーケストレーションの一部として実現するには、オーケストレーションに次のものが含まれている必要があります。
SAP システムから RFC サーバー要求を受信し、応答を送信するための双方向受信ポート。
図形の送受信。
SAP システムから送信される RFC サーバー要求を処理するために、Message 図形を作成し、その中にメッセージ割り当て図形を作成します。
RFC サーバー呼び出しのサンプル オーケストレーションは次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に表示される名前は、前のオーケストレーションに表示されているメッセージ図形の名前です。
図形 | 図形の種類 | プロパティ |
---|---|---|
ListenToSAP | 受信 | - 名前を ListenToSAP に設定する - Activate をTrue に設定する |
SendResponse | Send | - 名前を SendResponse に設定する |
メッセージの構築図形の追加
受信 RFC 呼び出しを処理して 2 つの整数値を追加するには、2 つの送信図形の間にメッセージの構築図形を追加し、その中にメッセージ割り当て図形をオーケストレーションに追加する必要があります。 この例では、Message Assignment 図形が を呼び出して 2 つの整数を追加します。 [メッセージの割り当て] 図形では、SAP システムに送信される応答のアクションも設定されます。
[メッセージの構築] 図形で、 Message Constructed プロパティを Response に設定します。
RFC 要求を処理するコードは、BizTalk プロジェクトと同じ Visual Studio ソリューションの一部である可能性があります。 2 つの整数を追加するためのサンプル コードは次のようになります。
namespace RFCServerResponseCreator
{
public class RFCServerResponseCreator
{
private static XmlDocument messageIn;
private static XmlDocument messageOut;
public static XmlDocument CreateRequest(int a, int b, string destination)
{
messageIn = new XmlDocument();
messageIn.LoadXml( "<Z_RFC_ADD xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +
"<DEST>" + destination + "</DEST>" +
"<X>" + a + "</X>" +
"<Y>" + b + "</Y>" +
"</Z_RFC_ADD>"
);
return messageIn;
}
public static XmlDocument CreateResponse(int a, int b)
{
int c = a + b;
messageOut = new XmlDocument();
messageOut.LoadXml( "<Z_RFC_ADDResponse xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +
"<RESULT>" + c + "</RESULT>" +
"</Z_RFC_ADDResponse>"
);
return messageOut;
}
}
}
Note
プロジェクトをビルドすると、プロジェクト ディレクトリに RFCServerResponseCreator.dll が作成されます。 この DLL をグローバル アセンブリ キャッシュ (GAC) に追加する必要があります。
次の式を追加して、メッセージ割り当て図形からこのコードを呼び出し、SAP システムに送信される応答のアクションを設定します。 式を追加するには、[メッセージの割り当て] 図形をダブルクリックして式エディターを開きます。
Response = RFCServerResponseCreator.RFCServerResponseCreator.CreateResponse(Request.X, Request.Y);
Response(WCF.Action) = "http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response";
重要
応答メッセージに対してアクションを明示的に設定する必要があります。 アクションを設定しない場合、WCF-Custom アダプターは要求アクションに "Response" を追加してアクション メッセージに到着します。 そのため、応答メッセージのアクションは http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADDResponse
になります。 ただし、sapBinding では、要求アクションに "/response" を追加することによって、応答アクションが想定されます (例: http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response
)。
ポートの追加
論理ポートには、次のプロパティを指定してください。 [ ポート ] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
Port | プロパティ |
---|---|
RFCServerPort | - 識別子を RFCServerPort に設定する - 型を RFCServerPortType に設定する - 通信パターンを Request-Response に設定する - 通信方向を Receive-Send に設定する |
アクション 図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、ポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前のオーケストレーションに表示されるメッセージ図形の名前です。
図形 | プロパティ |
---|---|
ListenToSAP | - メッセージを要求に設定する - 操作を RFCServerPort.Add.Request に設定する |
SendResponse | - メッセージを FuncResponse に設定する - 操作を RFCServerPort.Add.Response に設定する |
これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。
BizTalk ソリューションをビルドし、BizTalk Serverに展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。
BizTalk アプリケーションの構成
BizTalk プロジェクトを展開すると、先ほど作成したオーケストレーションが、BizTalk Server管理コンソールの [オーケストレーション] ウィンドウの下に一覧表示されます。 アプリケーションを構成するには、BizTalk Server管理コンソールを使用する必要があります。 アプリケーションの構成の詳細については、「アプリケーション を構成する方法」を参照してください。
アプリケーションの構成には、次の作業が含まれます。
アプリケーションのホストの選択。
オーケストレーションで作成したポートを、BizTalk Server管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。
WCF-Custom または WCF-SAP 受信ポートを定義します。 このポートは、SAP システムから受信 RFC 呼び出しを受信し、応答を SAP システムに返送します。 ポートを作成する方法については、「 SAP アダプターへの物理ポート バインドを手動で構成する」を参照してください。
Note
アダプター サービス BizTalk プロジェクト アドインを使用してスキーマを生成すると、ポートに関する情報と、それらのポートに対して設定するアクションを含むバインド ファイルも作成されます。 BizTalk 管理コンソールからこのバインド ファイルをインポートして、送信ポート (送信呼び出し用) または受信ポート (受信呼び出し用) を作成できます。 詳細については、「 SAP へのポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。
また、RFCServerResponseCreator プロジェクトのアセンブリを BizTalk アプリケーションに追加する必要があります。 SAP システムから受信した RFC 呼び出しを処理するために、このプロジェクトを作成しました。 そのためには次を行います。
BizTalk Server管理コンソールの左側にあるコンソール ツリーで、バインドをインポートした BizTalk アプリケーションの下で、[リソース] を右クリックし、[追加] をポイントして、[BizTalk アセンブリ] をクリックします。
[ リソースの追加 ] ダイアログ ボックスで、[ 追加] をクリックし、RFCServerResponseCreator.dll を含むフォルダーに移動します。 ファイルを選択し、[ 開く] をクリックします。
[ リソースの追加 ] ダイアログ ボックスで、[ OK] をクリックします。
アプリケーションの起動
SAP システムから受信 RFC 呼び出しを受信するには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションの起動手順については、「 オーケストレーションを開始する方法」および「アプリケーションを 起動する方法」を参照してください。
この段階で、次のことを確認します。
SAP システムから RFC 呼び出しを受信するための WCF-Custom または WCF-SAP 受信ポートが実行されています。
操作の BizTalk オーケストレーションが実行されています。
操作の実行
アプリケーションを実行した後、RFC を SAP アダプターに送信する必要があります。 これを行うには、SAP システムでトランザクション SE37 を実行します。 RFC 呼び出しの入力パラメーターも指定する必要があります。 アダプターは、パラメーターと共に呼び出しを受け取り、処理し、応答を SAP システムに返送します。 RFC を送信したのと同じトランザクションで応答を確認できます。
考えられる例外
BizTalk Serverを使用して SAP システムから RFC サーバー呼び出しを受信するときに発生する可能性がある例外の詳細については、「SAP アダプターでの例外とエラー処理」を参照してください。
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、バインド ファイルと呼ばれる XML ファイルに構成設定をエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションに対して送信ポートや受信ポートなどを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「 SAP アダプター バインドの再利用」を参照してください。