次の方法で共有


WCF サービス モデルを使用して SAP で RFC を呼び出す

Microsoft BizTalk Adapter for mySAP Business Suite は、クライアント プログラムによって呼び出すことができる操作として SAP システム上の RFC を表示します。 WCF サービス モデルでは、これらの操作は生成された WCF クライアント クラスのメソッドとして呼び出されます。 Add Adapter Service Reference Visual Studio Plug-in を使用すると、コードで呼び出す RFC ごとにメソッドを含む WCF クライアント クラスを生成できます。 アダプター サービス参照の追加プラグインでは、各 RFC で使用されるパラメーターとデータ型をカプセル化する .NET 型も生成されます。 その後、この WCF クライアント クラスのインスタンスを作成し、そのメソッドを呼び出してターゲット RFC を呼び出すことができます。

次のセクションでは、SAP アダプターを使用して SAP システムで RFC を呼び出す方法について説明します。

WCF クライアント クラス

SAP アダプターは、1 つのサービス コントラクト "Rfc" に基づくすべての RFC 操作を表示します。 つまり、呼び出すすべての RFC 操作に対して、1 つの WCF クライアント クラス RfcClient が作成されます。 各ターゲット RFC は、このクラスのメソッドとして表されます。 各メソッドでは、次の手順を実行します。

  • SAP エクスポート パラメーターが 出力 パラメーターとして表示される

  • SAP 変更パラメーターは ref パラメーターとして 表示されます。

  • 構造などの複雑な SAP 型は、SAP 型のフィールドに対応するプロパティを持つ .NET クラスとして表示されます。 これらのクラスは、次の名前空間で定義されています: microsoft.lobservices.sap._2007._03.Types.Rfc。

    次のコードは 、RfcClient クラスの一部と、SAP システムでSD_RFC_CUSTOMER_GETを呼び出すメソッドを示しています。

 [System.Diagnostics.DebuggerStepThroughAttribute()]  
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
public partial class RfcClient : System.ServiceModel.ClientBase<Rfc>, Rfc {  
  
    ...  
  
    /// <summary>The metadata for this RFC was generated using the RFC SDK.</summary>  
    /// <param name="KUNNR">Customer number</param>  
    /// <param name="NAME1">Name of the customer</param>  
    /// <param name="CUSTOMER_T">Table of the selected customers</param>  
    /// <returns></returns>  
    public void SD_RFC_CUSTOMER_GET(string KUNNR, string NAME1, ref microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] CUSTOMER_T) {...}  
}  

RFC クライアント アプリケーションを作成する方法

RFC クライアント アプリケーションを作成するには、次の手順を実行します。

RFC クライアント アプリケーションを作成するには

  1. RfcClient クラスを生成します。 アダプター サービス参照の追加 Visual Studio プラグインまたは ServiceModel メタデータ ユーティリティ ツール (svcutil.exe) を使用して、作業する RFC を対象とする RfcClient クラスを生成します。 WCF クライアントを生成する方法の詳細については、「WCF クライアントまたは WCF サービス コントラクトを生成して SAP ソリューション成果物を生成する」を参照してください。

  2. 手順 1 で生成された RfcClient クラスのインスタンスを作成し、クライアント バインドを指定します。 クライアント バインドを指定するには、 RfcClient が使用するバインディングアドレスとエンドポイント アドレスを指定する必要があります。 これは、コード内で命令的に行うか、構成で宣言的に行うことができます。 クライアント バインドを指定する方法の詳細については、「 SAP システムのクライアント バインドの構成」を参照してください。 次のコードは、構成から RfcClient を初期化し、SAP システムの資格情報を設定します。

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. WCF クライアントを開きます。

    rfcClient.Open();  
    
  4. 手順 2 で作成した RfcClient でメソッドを呼び出して、SAP システムに対する操作を実行します。 次のコードでは、RfcClientSD_RFC_CUSTOMER_GET メソッドを呼び出して、SAP システムで RFC を呼び出します。

    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers =   
        new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
    
    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
    
  5. WCF クライアントを終了します。

    rfcClient.Close();   
    

次に示す完全なコード例は、SD_RFC_CUSTOMER_GETを呼び出して、名前が "AB" で始まる顧客の一覧を返し、各顧客の名前と ID をコンソールに書き込みます。 この例では、using ステートメント内に RfcClient 作成します。 RfcClient を明示的に閉じる必要はありません。実行パスがコンテキストを終了すると閉じられます。

using System;  
using System.Collections.Generic;  
using System.Text;  
  
using System.ServiceModel;  
using Microsoft.ServiceModel.Channels;  
using Microsoft.Adapters.SAP;  
  
namespace SapRfcClientSM  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            try  
            {  
                // Create client from configuration  
                using (RfcClient rfcClient = new RfcClient("SAPBinding_Rfc"))  
                {  
  
                    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
                    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
  
                    // Open client  
                    rfcClient.Open();  
  
                    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers = new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
  
                    // Invoke SD_RFC_CUSTOMER_GET  
                    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
  
                    // Write the results to the console  
                    foreach (microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST customer in customers)  
                    {  
                        Console.WriteLine("Customer Name = " + customer.NAME1);  
                        Console.WriteLine("         Id   = " + customer.KUNNR);  
                        Console.WriteLine();  
                    }  
                }  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine(ex.Message);  
                if (ex.InnerException != null)  
                    Console.WriteLine("Inner exception is :" + ex.InnerException);  
            }  
        }  
    }  
}  

参照

WCF サービス モデルを使用してアプリケーションを開発する
RFC 操作のメッセージ スキーマ