次の方法で共有


SAP アダプターに関する運用上の問題のトラブルシューティング

このセクションでは、microsoft BizTalk Adapter for mySAP Business Suite を使用するときに発生する可能性がある操作エラーを解決するためのトラブルシューティング手法の使用について説明します。

トレースを有効にする

SAP アダプターでのトレースのサポートについては、SAP アダプターの 診断トレースとメッセージ ログを参照してください

バインドの読み込み中にエラーが発生しました

問題

アダプター サービス参照の追加 Visual Studio プラグインやアダプター サービスの使用 BizTalk プロジェクト アドインを開始しようとする際、GUI が次のエラーを表示します。

There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.

原因

アダプター サービス参照の追加プラグインまたはアダプター サービスの使用アドインを起動すると、Windows Communication Foundation (WCF) は、インストールされているすべてのアダプターのアダプター バインドを読み込みます。 さらに、アダプターのバインドは、エンタープライズ アプリケーションの特定のクライアント ソフトウェアに依存します。 この問題は、次の理由のいずれかまたは両方で発生する可能性があります。

  • アダプターをインストールしたコンピューターには、必要な LOB クライアント ソフトウェアがインストールされていません。

  • BizTalk アダプター パックに含まれるすべてのアダプターをインストールするアダプターの一般的または完全なインストールを行いました。 ただし、LOB クライアント ライブラリは、1 つのエンタープライズ アプリケーションに対してのみインストールできます。 その結果、GUI は他のアダプターのバインディングの読み込みに失敗します。

    解決策

  • 必要なアダプターのみをインストールするには、アダプターのカスタム インストールを行ってください。

  • BizTalk アダプター パックをインストールしたコンピューターに、必要な LOB クライアントのバージョンがインストールされていることを確認します。 サポートされている LOB システム には、サポートされているバージョンが一覧表示されます。 BizTalk アダプター パックには、SAP システムとインターフェイスするための特定の DLL も必要です。 アダプターに必要な DLL の詳細については、「 Data Provider for SAP 用のカスタム RFC のインストール」を参照してください。

BizTalk 管理コンソールに SAP アダプターがありません

問題

BizTalk アダプター パックに含まれる SAP アダプターは、BizTalk Server 管理コンソールのアダプターの一覧に表示されません。

原因

SAP アダプターは WCF カスタム バインドです。 そのため、BizTalk Server 管理コンソールには WCF-Custom アダプターが表示されますが、WCF カスタム バインドは表示されないため、WCF ベースの SAP アダプターは表示されません。

解決策

BizTalk Server 管理コンソールに SAP アダプターを明示的に追加するには、「SAP アダプターを BizTalk Server 管理コンソールに追加する」で説明されている手順に従います。

SAP への接続を開く際に、DLL が不足しているというエラーが表示される

問題

SAP アダプターを使用して SAP システムへの接続を開こうとすると、一部の DLL が見つからないことを通知するダイアログ ボックスが SAP システムに表示されます。

原因

SAP アダプターは、librfc32u.dll を使用して SAP システムとの接続を確立します。 librfc32u.dllでは、一連の DLL が機能する必要があります。 これらのサポート DLL が、SAP アダプターがインストールされているコンピューターの PATH 変数に追加されていない場合、このエラーが発生します。

解決策

アダプター バインドの 読み込み時のエラー の解決策として提供されている表を参照してください。 次の表に、SAP アダプターを使用して SAP システムとインターフェイスするために必要なサポート DLL の一覧を示します。

65,536 ノードを超える XML を取得中にエラーが発生しました

問題

このアダプターでは、65,536 ノードを超える XML 出力を取得するときに、次のエラーが発生します。

Maximum number of items that can be serialized or deserialized in an object graph is '65536'.
Change the object graph or increase the MaxItemsInObjectGraph quota.

原因

アダプターは、65,536 項目を超えるオブジェクトをシリアル化および逆シリアル化できません。

解決策

この問題を解決するには、次の 2 つの方法のいずれかで maxItemsInObjectGraph パラメーターを設定します。

  • サービス クラスの ServiceBehavior 属性で maxItemsInObjectGraph パラメーターを変更して、このパラメーターを設定します。

  • アプリケーションの app.config ファイルに次のコードを追加します。

    <behaviors>
      <endpointBehaviors>
        <behavior name="NewBehavior">
          <dataContractSerializer maxItemsInObjectGraph="65536000" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

    サンプル app.config は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="NewBehavior">
         <dataContractSerializer maxItemsInObjectGraph="65536000" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>
      <endpoint   behaviorConfiguration="NewBehavior" binding="sapBinding"
       contract="IOutboundContract" name="sap_ICalculator" />
    </client>
  </system.serviceModel>
</configuration>

BizTalk Server で WCF-Custom ポートの接続 URI を入力中にエラーが発生しました

問題

BizTalk Server では、SAP システムに接続するための接続 URI を指定すると、次のエラーが発生します。

Error saving properties.
(System.ArgumentException) The specified address is invalid.
(System.ArgumentException) Invalid address;
"<connection URI>" is not a well-formed absolute uri.

原因

接続 URI は、標準のエンコード形式に準拠していません。 たとえば、パラメーターの値にスペースが含まれている場合があります。

解決策

指定した接続 URI が標準エンコード形式に準拠していることを確認します。 たとえば、空白は "%20" に置き換える必要があります。

SAP での操作の完了中に System.ArgumentNullException エラーが発生する

問題

BizTalk Server を使用して SAP システムで操作を実行すると、アダプターによって次のエラーが発生します。

System.ArgumentNullException: Value cannot be null.

原因

メッセージの WCF アクションが指定されていません。 WCF では、すべての操作に対して SOAP アクションを指定する必要があります。このアクションは、LOB アプリケーションで実行される操作についてアダプターに通知します。

解決策

送信ポートで SOAP アクションを指定するか、BizTalk オーケストレーションのメッセージ コンテキスト プロパティとして指定します。 手順については、 SAP システムの SOAP アクションの構成を参照してください。 各操作のアクションの一覧については、「 メッセージとメッセージ スキーマ 」を参照してください。

指定されたアクションで操作名が正しくないため、XmlReaderParsingException が発生しました。

問題

BizTalk Server 管理コンソールでは、SAP システムにメッセージを送信するときに次のエラーが発生します。

Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Invalid argument:
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Operation Name="<operation_name>" Action="<action>" />
</BtsActionMapping>

原因

使用アダプター サービス BizTalk プロジェクト アドインによって作成されたポート バインド ファイルをインポートして WCF-Custom ポートを構成する場合、ポート内のアクションは次の形式で指定されます。

<BtsActionMapping>
  <Operation Name="Op1" Action="http://MyService/Svc/Op1" />
</BtsActionMapping>

上記の形式では、操作名はスキーマの生成中に選択した操作によって制御されます。 たとえば、RFC_CUSTOMER_GETのスキーマを生成した場合、アクションの操作名は "RFC_CUSTOMER_GET" になります。 ただし、Visual Studio の BizTalk オーケストレーションで作成された論理ポートの操作名が異なる場合があります。

解決策

論理ポート (Visual Studio の BizTalk オーケストレーション内) と物理ポート (BizTalk Server 管理コンソール) の両方の操作名が同じであることを確認します。

SAP への 100 を超える接続を開くときにエラーが発生しました

問題

このアダプターは、SAP システムへの 100 を超える接続を開くと、次の例外をスローします。

Microsoft.ServiceModel.Channels.Common.ConnectionException: ErrorCode=RFC_OK. ErrorGroup=RFC_ERROR_COMMUNICATION. SapErrorMessage=Connect to SAP gateway failed
Connect_PM  GWHOST=<gw_host>, GWSERV=<gw_serv>, SYSNR=<sys_number>
LOCATION    CPIC (TCP/IP) on local host with Unicode
ERROR       max no of 100 conversations exceeded

原因

既定では、SAP はシステムへの 100 を超える接続を有効にしません。

解決策

接続の最大数を増やすには、SAP クライアント ライブラリがインストールされているコンピューターに環境変数を作成し、数値に設定する必要があります。 この環境変数に指定する値は、SAP システムに対して行うことができる接続の最大数です。 次の詳細を含む環境変数を作成します。

  • 変数名: CPIC_MAX_CONV

  • 変数値: 任意の正の数値。 たとえば、SAP システムへの 200 接続を有効にするには、値として 200 を指定します。

    環境変数の詳細については、「 Windows PowerShell: about_Environment_Variables」を参照してください。

IDOC のメタデータの生成または取得中にエラーが発生しました

問題

SAP システムで IDOC の 受信 操作のメタデータを生成するときに、SAP アダプターで次のエラーが発生します。

Error while retrieving or generating the WSDL.
Adapter message: Details: ErrorCode=RFC_EXCEPTION.
ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage= OBJECT_UNKNOWN.
AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: IDOCTYPE_READ_COMPLETE.

原因

SAP アダプターは、IDOCTYPE_READ_COMPLETE RFC を使用して、IDOC の 受信 操作のメタデータを取得します。 この RFC を呼び出す場合は、SAP システム内の特定のユーザーアクセス許可が必要です。 メタデータを生成するために、IDOCTYPE_READ_COMPLETE RFC を呼び出す権限を持たない資格情報を使用して SAP システムに接続している場合、SAP アダプターはエラーを返します。

解決策

アダプターに使用したのと同じ資格情報を使用して SAP GUI にログインします。 トランザクション SE37 に移動し、IDOCTYPE_READ_COMPLETEとして実行する RFC の名前を入力します。

PI_IDOCTYPおよびPI_CIMTYP入力パラメータに、カスタム IDoc に対応する値を入力します。 PI_VERSIONパラメーターとPI_RELEASEパラメーターについては、[アダプター メタデータ] UI で選択した値と同じ値を入力します。 そして、F8 キーを押して実行します。

アダプターが受け取るものと同じ例外が発生し、問題に関する詳細情報が表示されます。

それでも問題を解決できない場合は、Receive 操作ではなく ReceiveIdoc 操作のスキーマを生成します。 この場合、SAP アダプターは IDOCTYPE_READ_COMPLETE を使用せず、エラーを発生させません。

未リリースのセグメントがある IDOC の送受信中にエラーが発生しました

問題

SAP アダプターは、未リリースのセグメントを持つ IDOC の送信 ( Send 操作を使用) または受信 IDOC ( 受信 操作を使用) 中に XmlReaderParsingException を提供します。

原因

IDOC はセグメントで構成されます。 メタデータの生成中、SAP アダプターは、SAP システムに存在するすべてのリリース済みセグメントを取得します。 ただし、アダプター クライアントがメタデータを使用して IDOC の受信などの操作を実行する場合、SAP アダプターは XmlReaderParsingException を提供します。 これは、IDOC を受信すると、SAP システムが未リリースのセグメント (アダプターによって生成されなかったメタデータ) も送信した可能性があるために発生します。

解決策

次のいずれかを実行します。

  • リリースされていないセグメントに適切なパッチを適用して、SAP システムをアップグレードします。

  • SendIdoc 操作または ReceiveIdoc 操作を使用して、IDOC をそれぞれ送受信します。 これらの操作の詳細については、SAP の IDOC に対する操作を参照してください。

SAP FilePort を使用して受信した SAP にフラット ファイル IDOC を送信中にエラーが発生しました

問題

SAP FilePort を使用して生成された SAP システムにフラット ファイル IDOC を ( 送信 操作を使用して) 送信しようとすると、BizTalk オーケストレーションのフラット ファイル パーサーはフラットファイルを XML 形式に変換できず、IDOD 送信 操作が失敗します。

原因

SAP システムは、FilePort を使用して IDOC を生成すると、セグメントの末尾にあるすべての空のスペースを削除します。 ただし、フラット ファイル パーサーは、フラット ファイルを XML に正常に変換するために、セグメント内の最後のフィールドのデータが存在することを想定しています。 セグメントに空のスペースがないため、フラット ファイル パーサーはフラット ファイルを XML に解析できません。

解決策

SAP FilePort を使用して生成されたこのようなフラット ファイル IDOC の場合は、代わりに SendIdoc 操作を使用します。 この操作の詳細については、SAP の IDOC に対する操作を参照してください。

EnableBizTalkCompatibilityMode プロパティが true に設定されている場合、SAP から IDOC を受信中にエラーが発生する

問題

EnableBizTalkCompatibilityMode バインディング プロパティが true に設定された IDOC の受信中に、次の例外が発生します。

System.Exception: Loading property information list by namespace failed or property not found in the list. Verify that the schema is deployed properly.

原因

バインド プロパティ EnableBizTalkCompatibilityModetrue に設定されている場合は、BizTalk アプリケーション、つまりプロジェクトが配置されているアプリケーションのリソースとして、SAP アダプターの BizTalk プロパティ スキーマ DLL を追加する必要があります。

解決策

SAP アダプターの BizTalk プロパティ スキーマの名前は Microsoft.Adapters.SAP.BiztalkPropertySchema.dll。 これは、BizTalk Adapter Pack のセットアップにより、<インストールドライブ>:\Program Files\Microsoft BizTalk Adapter Pack\bin にインストールされます。 このアセンブリをリソースとして BizTalk アプリケーションに追加するには、次のタスクを実行します。

BizTalk アプリケーションでアセンブリをリソースとして追加する

  1. BizTalk Server 管理コンソールを起動します。

  2. コンソール ツリーで、[ BizTalk グループ]、[ アプリケーション] の順に展開し、BizTalk アセンブリを追加するアプリケーションを展開します。

  3. アプリケーションを展開し、BizTalk アセンブリを追加する対象のアプリケーションを選択します。

  4. [リソース] を右クリックし、[追加] をポイントして、[BizTalk アセンブリ] をクリックします。

  5. [ 追加] をクリックし、BizTalk アセンブリ ファイルを含むフォルダーに移動し、BizTalk アセンブリ ファイルを選択して、[ 開く] をクリックします。

  6. [オプション] で、BizTalk アセンブリを GAC にインストールするためのオプションを指定し、[OK] をクリックします

SAP システムからの IDOC の受信中の検証エラー

問題

SAP システムから受信した IDOC は、次のようなエラーで検証に失敗します。

There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=<token>"
Source: "Pipeline " Receive Port: "ReceiveIdoc" URI: "<connection uri>"
Reason: The document failed to validate because of the following error:
"The 'http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/3/CREMAS03//620:TAXBS' element has an invalid value according to its data type."

原因

IDOC を受信するために生成されたメタデータには、受信操作の一部として特定の列に対して受信できる許容値が含まれています。 これらの値は、生成されたメタデータで列挙として公開されます。 ただし、IDOC が実際に受信されると、受信した値が列挙値と異なる場合があります。 そのため、値の検証中に受信操作が失敗します。 たとえば、上記のエラー メッセージでは、TAXBS 列の検証が失敗します。

解決策

SAP システムから受信した値を含めるには、スキーマ (BizTalk プロジェクトの場合) またはクライアント プロキシ (WCF サービス モデルを使用する .NET プロジェクトの場合) の列挙体を手動で編集する必要があります。

XML に変換する前と後のフラット ファイル IDOC は同じではありません

問題

フラット ファイル パーサーを使用してスキーマを使用してフラット ファイル IDOC を XML に変換した後、スキーマを使用するパイプラインを介して XML をフラット ファイル IDOC に変換する場合、2 つのフラット ファイル IDOC は同じではありません。

原因

フラット ファイル IDOC から XML を生成する場合、フラット ファイル パーサーは空白値を持つ XML ノードを生成しません。 この XML をフラット ファイルに変換すると、XML に存在しないノードはフラット ファイル IDOC に反映されません。 そのため、フラット ファイルの IDOC は同じではありません。

解決策

フラット ファイルを XML に変換するために使用されるスキーマ(またはその逆)で、"送信" または "受信" ノード定義内で、次の操作を行います。

  1. suppress_empty_nodes プロパティを false に設定し、generate_empty_nodes プロパティを true に設定します。 既定では、 suppress_empty_nodes プロパティは true に設定され、 generate_empty_nodes プロパティは false に設定されているため、すべての空のノードは XML に反映されません。

  2. フラット ファイルには、末尾に追加のキャリッジ リターンが含まれている場合があります。 この余分な復帰を回避するには、 suppress_trailing_delimiters プロパティを [はい ] に設定できます。 このプロパティは、Visual Studio でスキーマを開くと、 末尾の区切り記号の非表示 プロパティとしても公開されます。

バインドファイルを使用して作成された物理ポートでの不正なアクションエラー

問題

アダプター サービス アドインを使用して SAP システム上の特定の操作のスキーマを生成すると、アドインによってポート バインド ファイルも作成されます。 このバインド ファイルは、BizTalk Server 管理コンソールを使用してインポートして、BizTalk Server に物理ポートを作成できます。 ただし、このようなポートを使用して SAP システムにメッセージを送信すると、アダプターはポートで指定されたアクションを理解できず、次のようなエラーが発生します。

Microsoft.ServiceModel.Channels.Common.UnsupportedOperationException: Incorrect Action
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Operation Name="<op_name>" Action="<action>" />
</BtsActionMapping>. Correct the specified Action, or refer to the documentation on the allowed formats for the Actions.

原因

BizTalk オーケストレーションで論理ポートを作成する場合は、それらのポートに対する操作に特定の名前を指定するか、Operation_1、Operation_2などの既定の名前のみを使用します。ただし、Consume Adapter Service アドインによって生成されたバインド ファイルでは、操作名はメタデータを生成する操作の名前と同じです。 たとえば、RFC_CUSTOMER_GETのメタデータを生成する場合、アクションは次のように設定されます。

<Operation Name="RFC_CUSTOMER_GET" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/RFC_CUSTOMER_GET" />

バインド ファイルをインポートすると、物理ポートに同じアクションが設定されます。 そのため、論理ポート (Operation_1、Operation_2 など) の操作名が物理ポートのアクションで指定された操作名と一致しないため、エラーが発生します。

解決策

論理ポートの操作名が、物理ポートのアクションの一部として指定された操作名と同じであることを確認します。 次のいずれかを行ってください:

  • BizTalk オーケストレーションの論理ポートの操作名を、Operation_1などからメタデータを生成する操作 (RFC_CUSTOMER_GETなど) に変更します。

  • 物理ポートのアクションの操作名を論理ポートの操作名に変更します。 たとえば、物理ポートのアクションを次のように変更できます。

    <Operation Name="Operation_1" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/RFC_CUSTOMER_GET" />
    

SAP で実行された操作の応答メッセージにテーブル パラメーターが含まれていない

原因

SAP アダプターを使用して、多数のテーブルを返す操作を SAP システムで実行し、各テーブルに多数のレコードがある場合は、SAP システムからの応答メッセージの一部として返される大きなデータセットに相当します。 そのため、既定では、SAP アダプターは応答メッセージの一部としてテーブル パラメーターを返しません。

解決策

SAP アダプターが応答の一部として返すテーブルを要求できます。 これを行うには、SAP システムに送信する要求メッセージの一部として空のテーブル パラメーターを指定します。 たとえば、<table_parameter_name /> のようにします。

アダプター クライアントが SAP から応答を受信しない

問題

BizTalk Server でアダプターを使用する場合、WCF カスタム送信ポートの資格情報が正しくない場合、要求メッセージは処理されません。 正しい資格情報を指定すると、メッセージが SAP システムに送信され、応答が受信されます。 ただし、応答メッセージは出力ポートでは使用できません。

解決策

BizTalk ホスト インスタンスを再起動します。

SAP サーバーからの受信メッセージの受信に関する接続の問題

問題

次のエラーは、SAP アダプターの受信ポートを使用して SAP サーバーから受信メッセージを受信 WCF-Custom 場合にのみ発生します。

The Messaging Engine failed to add a receive ___location "<location_name>" with URL "<connection URI>" to the adapter "WCF-Custom".
Reason: "Microsoft.Adapters.SAP.RFCException: Details: ErrorCode=RFC_OK. ErrorGroup=RFC_ERROR_COMMUNICATION. SapErrorMessage=Connect to SAP gateway failed
Connect_PM  TPNAME=<name>, GWHOST=<host>, GWSERV=<server>

ただし、WCF-Custom 送信ポートを使用して SAP システムにメッセージを送信できます。

解決策

アダプター クライアントを実行しているのと同じコンピューターに SAP GUI をインストールし、受信メッセージをもう一度受信してみてください。 SAP GUI のインストール方法の詳細については、SAP ドキュメントを参照してください。

BizTalk プロジェクトの RootNode TypeName でエラーが発生しました

問題

Visual Studio の BizTalk プロジェクトで、アダプター の使用サービス アドインから生成されたスキーマに 、RootNode TypeName プロパティの無効な文字または予約語が含まれている場合、プロジェクトのコンパイル中に次のエラーが発生します。

Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).

解決策

  1. エラーで参照されているルード ノードを右クリックし、[ プロパティ] を選択します。

  2. RootNode TypeName プロパティの場合は、無効な文字や予約語 (ドット (.) など) を削除します。

Visual Studio でアダプターを使用するときのバインド警告が無効です

問題

アダプターを使用して Visual Studio でアプリケーションを作成し、アダプターによって生成された構成ファイル (app.config) を開くと、次のような警告が表示されます。

The element 'bindings' has invalid child element 'sapBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...

原因

この警告は、SAP アダプター バインド ( sapBinding) が Windows Communication Foundation (WCF) に付属する標準のバインドではないために表示されます。

解決策

この警告は無視しても問題ありません。

BizTalk Server での XLANG 例外

問題

BizTalk Server は、複数のスキーマがメッセージの種類と一致したため、アプリケーションがドキュメントの仕様を見つけることができないことを示す XLANG 例外または例外をスローします。

原因

これは、次のいずれかが原因で発生します。

  • BizTalk Server プロジェクトで複数の汎用操作 (SendIdoc や ReceiveIdoc など) のスキーマを生成し、それを BizTalk Server アプリケーションに展開した後、SAP システムでそれぞれの操作を実行するためにアプリケーションを実行しました。 スキーマは一般的であるため、BizTalk Server アプリケーションに展開されているスキーマ間に競合があります。

  • 複数のプロジェクトがある場合は、各 BizTalk Server プロジェクトの汎用操作スキーマを生成し、各プロジェクトを同じホスト上の個別の BizTalk Server アプリケーションに展開した後、SAP システムでそれぞれの操作を実行するアプリケーションまたはアプリケーションを実行しました。 スキーマとアセンブリは BizTalk Server のアプリケーション間でアクセスできるため、さまざまな BizTalk Server アプリケーションとアセンブリの下に展開される共通スキーマ間で競合が発生します。

    解決策

    BizTalk Server アプリケーションには、単一の汎用操作スキーマ ファイルを使用します。 同じホスト上の複数の BizTalk Server アプリケーションで汎用操作スキーマを使用する必要がある場合は、1 つの汎用操作スキーマを含むアプリケーションを作成し、BizTalk Server の他のすべてのアプリケーションの汎用操作スキーマを使用します。

こちらもご覧ください

SAP アダプターのトラブルシューティング