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 呼び出しを受信するには、次のタスクを実行します。
RFC を外部アプリケーション (この場合は SAP アダプター) に送信するように 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 呼び出しを受信する方法を示すために、 Z_RFC_ADD RFC の スキーマを生成します。 前の手順でこの RFC を作成しました。 この RFC は、入力パラメーターとして 2 つの整数値を受け取ります。
特定の RFC のスキーマを生成する方法については 、SAP の RFC 操作のメタデータの参照、検索、および取得 を参照してください。
Von Bedeutung
受信 RFC 呼び出しのスキーマを生成するため、アダプター サービス BizTalk プロジェクト アドインの [コントラクトの種類の選択] ドロップダウン リストから [サービス (受信操作)] を選択してください。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 最初の手順で生成したスキーマを、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。
このトピックでは、2 つのメッセージを作成する必要があります。1 つは SAP システムからメッセージを受信し、もう 1 つは SAP システムに応答を送信するメッセージです。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
BizTalk プロジェクトに新しいオーケストレーションを追加します。
オーケストレーション ビューを開きます。まだ開いていない場合は、BizTalk プロジェクトを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「要求」を入力してください。 メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 RFCServer.SAPBindingSchema.Z_RFC_ADDを選択します。 RFCServer は BizTalk プロジェクトの名前です。 SAPBindingSchema は、RFC Z_RFC_ADD用に生成されるスキーマ です。 手順 2. を繰り返して、新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「 応答」と入力します。 メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 RFCServer.SAPBindingSchema.Z_RFC_ADDResponseを選択します。
オーケストレーションの設定
SAP システムから RFC サーバー呼び出しを受信するために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 この例では、RFC クライアントが SAP システムに要求を送信して 2 つの整数を追加するシナリオを考えてみましょう。 SAP システムは、入力パラメーターを使用して要求を受け取り、それを SAP アダプターによってホストされている外部 RFC サーバーに渡します。 SAP アダプターは、SAP システムから要求を受信し、要求を処理して 2 つの整数を追加し、応答を生成します。 SAP アダプターは、応答を SAP システムに渡します。この応答は、RFC クライアントに渡されます。
これをオーケストレーションの一部として実現するには、オーケストレーションに次のものが含まれている必要があります。
SAP システムから RFC サーバー要求を受信し、応答を送信する双方向受信ポート。
形状を送信および受信します。
SAP システムから送信される RFC サーバー要求を処理するために、メッセージの図形を作成し、その中にメッセージ割り当て図形を作成します。
RFC サーバー呼び出しのサンプル オーケストレーションは、次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に表示される名前は、前のオーケストレーションに表示されるメッセージ図形の名前です。
形 | 図形の種類 | 特性 |
---|---|---|
リッスン・トゥ・エスエーピー | 受け取る | - 名前を ListenToSAP に設定する - アクティブ化を True に設定する |
SendResponse | 送信 | - 名前を SendResponse に設定する |
メッセージ構築シェイプの追加
受信 RFC 呼び出しを処理して 2 つの整数値を追加するには、2 つの送信図形の間に、メッセージの構築図形を追加し、その中にメッセージ割り当て図形をオーケストレーションに追加する必要があります。 この例では、[メッセージの割り当て] 図形が呼び出され、2 つの整数が追加されます。 メッセージ割り当て図形は、SAP システムに送信される応答のアクションも設定します。
[メッセージの構築] 図形の場合は、[メッセージ構築済み] プロパティを 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;
}
}
}
注
プロジェクトをビルドすると、プロジェクト ディレクトリに 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";
Von Bedeutung
応答メッセージに対してアクションを明示的に設定する必要があります。 アクションを設定しない場合、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
)。
ポートの追加
論理ポートには、次のプロパティを指定してください。 [ ポート ] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
港 / ポート | 特性 |
---|---|
RFCServerPort | - 識別子を RFCServerPort に設定する - 型を RFCServerPortType に設定する - 通信パターンを Request-Response に設定する - 通信方向を Receive-Send に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表は、アクション図形のメッセージを指定し、それらをポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前のオーケストレーションに表示されるメッセージ図形の名前です。
形 | 特性 |
---|---|
リッスン・トゥ・エスエーピー | - メッセージを要求に設定する - 操作を 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 アダプターへの物理ポート バインドを手動で構成する」を参照してください。
注
Consume Adapter Service BizTalk Project アドインを使用してスキーマを生成すると、ポートに関する情報と、それらのポートに設定するアクションを含むバインディング ファイルも作成されます。 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 アダプター・バインディングの再利用を参照してください。