SAP WS-Metadata Exchange を使用してメタデータを取得する

Windows Communication Foundation (WCF) カスタム バインドとして、Microsoft BizTalk Adapter for mySAP Business Suite は、microsoft BizTalk Adapter for mySAP Business Suite から特定の操作のメタデータを取得するために使用できる WS-Metadata Exchange (MEX) エンドポイントを公開します。

WCF には、サービスに関するメタデータのエクスポート、発行、取得、インポートのための豊富なインフラストラクチャが用意されています。 アダプターなどの WCF サービスは、メタデータを使用してサービス エンドポイントと対話する方法を記述し、svcutil.exe などのツールがサービスを使用するためのクライアント コードを自動的に生成できるようにします。 WCF は、サービスのメタデータを MetadataSet 型のインスタンスとして表します。これは、WS-Metadata Exchange (MEX) で定義されているメタデータシリアル化形式に強く関連付けられています。 MetadataExchangeClient を使用して、アダプターに対する対象の操作用の MetadataSet を作成できます。

メタデータ交換に対する WCF のサポートは、このドキュメントの範囲を超える広範なトピックです。 WCF でのメタデータのサポートの詳細については、 の WCF ドキュメントの「メタデータ」を参照してください https://go.microsoft.com/fwlink/?LinkId=105634。 WCF がメタデータ用に公開するアーキテクチャ、クラス、名前空間の特に適切な説明については、 の「メタデータ アーキテクチャの概要」 https://go.microsoft.com/fwlink/?LinkId=105635を参照してください。 先に進む前に、これらの WCF トピックの WCF サービスからのメタデータの取得に関連するコンテンツについて理解しておく必要があります。

次のトピックでは、 MetadataExchangeClient を使用して SAP アダプターからメタデータを取得する方法について説明します。

MetadataExchangeClient を使用したメタデータの取得

MetadataExchangeClient を使用するには、接続 URI とバインド (SAPBinding) を指定する必要があります。 接続 URI は、メタデータを取得する操作を識別します。

次のセクションでは、接続 URI を指定する方法、重要なバインド プロパティ、および MetadataExchangeClient を使用してアダプターからメタデータを取得する方法について説明します。

接続 URI

MetadataExchangeClient を使用するには、MEX エンドポイントと、メタデータを取得する操作または操作を指定する SAP 接続 URI を指定する必要があります。 MEX エンドポイントとターゲット操作は、次の方法で接続 URI で指定します。

  • クエリ文字列に "wsdl" パラメーターを含める必要があります。 クエリ文字列の最初のパラメーターである場合は、疑問符 (?) の直後に指定されます。 最初のパラメーターでない場合は、アンパサンド (&) で前に置く必要があります。

  • "wsdl" パラメーターの後に 1 つ以上の "op" パラメーターを指定する必要があります。 各 "op" パラメーターの前にはアンパサンド (&) が付き、ターゲット操作のメッセージ アクション (ノード ID) を指定します。

    たとえば、次の接続 URI は、SALESORDER_CREATEFROMDAT201 IDOC と SALESORDER_CREATEFROMDAT202 IDOC の送信操作を対象とします。 "wsdl" パラメーターと "op" パラメーターが強調表示されています。

"sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?wsdl&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT201//620/Send&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT202//620/Send"

注意

受信操作の接続 URI にリスナー パラメーターを含める必要はありません。 アダプターはクライアントとして接続し、SAP システムからメタデータを取得します。

また、 で Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants 定義されている定数を使用して、接続 URI を作成するときに操作を指定することもできます。 これは、このトピックの最後にあるコード例で示されています。

この接続 URI を MetadataExchangeClient に渡す方法は、クライアントの作成とアダプターからのメタデータの取得に使用するオーバーロードされたメソッドによって異なります。

SAP 接続 URI の詳細については、「 SAP システム接続 URI の作成」を参照してください。

バインドのプロパティ

MetadataExchangeClient を作成するときは、SAPBinding を指定する必要があります。

アダプターがメタデータを生成する方法に影響を与えるバインディング プロパティがいくつかあります。 それらのプロパティは以下のとおりです。

  • GenerateFlatfileCompatibleIdocSchema

  • ReceiveIDocFormat

  • EnableSafeTyping

  • FlatFileSegmentIndicator

    MetadataExchangeClientGetMetadata メソッドを呼び出す前に、これらのバインド プロパティがアプリケーションに必要な値に設定されていることを確認する必要があります。 SAP アダプターのバインド プロパティの詳細については、「 BizTalk Adapter for mySAP Business Suite Binding Properties」を参照してください。

次の例では、 MetadataExchangeClient を使用して、BAPI_TRANSACTION_COMMITおよびBAPI_TRANSACTION_ROLLBACK操作のサービス記述 (WSDL ドキュメント) を作成します。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;

// Needed for WCF and SAP adapter
using System.ServiceModel;
using Microsoft.ServiceModel.Channels;
using Microsoft.Adapters.SAP;

// Needed for MetadataExchangeClient class
using System.ServiceModel.Description;
// Needed for ServiceDescription class
using System.Web.Services;

namespace SapMetadataExchangeClient
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a binding
            SAPBinding binding = new SAPBinding();

            //Create a metadata exchange client that will retrieve metadata according to the WS-MEX standard.
            MetadataExchangeClient client = new MetadataExchangeClient(binding);
            client.SoapCredentials.UserName.UserName = "YourUserName";
            client.SoapCredentials.UserName.Password = "YourPassword";

            //Set up an endpoint address and specify the operation for which we want metadata.
            string connectionUri = "sap://Client=800;lang=EN@A/YourSAPHost/00?wsdl&op="
                + Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
                + "BAPI_TRANSACTION_COMMIT"
                + "&op="
                + Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
                + "BAPI_TRANSACTION_ROLLBACK";

            EndpointAddress address = new EndpointAddress(connectionUri);

            //Get the metadata.
            MetadataSet ms = client.GetMetadata(address);

            // Check for the metadata set size.
            Collection<MetadataSection> documentCollection = ms.MetadataSections;
            if (documentCollection != null && documentCollection.Count > 0)
            {
                //Get the WSDL from the metadata set
                System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;

                //Save the WSDL to a file.
                wsdl.Write("BapiTx.wsdl");

            }

        }
    }
}

参照

IMetadataRetrievalContract を使用した SAP でのメタデータの取得からプログラムでメタデータを取得する