共用方式為


針對 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 用戶端程式庫。 因此,GUI 無法載入其他配接器的系結。

    解決方法

  • 請務必執行介面卡的自訂安裝,只安裝您需要的介面卡。

  • 請確定您在安裝 BizTalk 配接器套件的電腦上安裝必要的 LOB 用戶端版本。 支援的 LOB 系統 會列出支援的版本。 BizTalk 配接器套件也需要特定 DLL 才能與 SAP 系統進行介面。 如需介面卡所需 DLL 的詳細資訊,請參閱 為 SAP 資料提供者安裝自訂 RFC

BizTalk 管理主控台中遺漏 SAP 配接器

問題

BizTalk 配接器套件隨附的 SAP 配接器不會顯示在 BizTalk Server 管理主控台的介面卡清單中。

原因

SAP 配接器是 WCF 自訂系結。 因此,雖然BizTalk Server管理主控台會顯示 WCF-Custom 配接器,但它不會顯示 WCF 自訂系結,因此不會顯示 WCF 型 SAP 配接器。

解決方法

您可以依照將 SAP 配接器新增至 BizTalk Server 管理主控台中所述的步驟,明確地將 SAP 配接器新增至 BizTalk Server管理主控台。

開啟 SAP 連線時遺失 DLL 錯誤

問題

當您嘗試使用 SAP 配接器開啟 SAP 系統的連線時,SAP 系統中會出現一個對話方塊,告知某些 DLL 遺失。

原因

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 個專案的物件。

解決方法

您可以透過下列兩種方式之一設定 maxItemsInObjectGraph 參數來修正此問題:

  • 變更 maxItemsInObjectGraph 服務類別上 ServiceBehavior 屬性中的 參數,以設定此參數。

  • 將下列內容新增至應用程式的 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 時發生錯誤

問題

當您指定要連線到 SAP 系統的連線 URI 時,BizTalk Server會提供下列錯誤。

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 管理主控台) 中的實體埠 (都相同。

開啟超過 100 個 SAP 連線時發生錯誤

問題

配接器會在開啟超過 100 個 SAP 系統的連線時擲回下列例外狀況。

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 系統的連線數目上限。 使用下列詳細資料建立環境變數:

產生或擷取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 來執行。

您應該會收到與介面卡接收相同的例外狀況,並取得問題的詳細資訊。

如果您仍然無法解決問題,請產生 ReceiveIdoc 作業的架構,而不是 Receive 作業。 在此情況下,SAP 配接器不會使用IDOCTYPE_READ_COMPLETE,也不會擲回任何錯誤。

傳送或接收未發行區段的IDOC 時發生錯誤

問題

SAP 配接器會提供 XmlReaderParsingException,同時使用 傳送 作業) 傳送 IDOC (,或使用 接收作業 ( 使用接收作業) 未發行的區段。

原因

IDOC 是由區段所組成。 產生中繼資料時,SAP 配接器會擷取 SAP 系統中所有已發行的區段。 不過,當配接器用戶端使用中繼資料來執行如接收 IDOC 等作業時,SAP 配接器會提供 XmlReaderParsingException。 這是因為收到 IDOC 時,SAP 系統可能也會傳送一些未發行的區段,也就是配接器未產生的中繼資料。

解決方法

執行下列任一項:

  • 為未發行的區段套用適當的修補程式,以升級您的 SAP 系統。

  • 分別使用 SendIdocReceiveIdoc 作業來傳送和接收IDOC。 如需這些作業的詳細資訊,請參閱 SAP 中的IDOC 作業

將一般檔案IDOC 傳送至使用 SAP FilePort 收到的 SAP 時發生錯誤

問題

如果您嘗試使用 Send 作業將 (傳送) 一般檔案 IDOC 傳送至使用 SAP FilePort 產生的 SAP 系統,BizTalk 協調流程中的一般檔案剖析器無法將 flatf-file 轉換為 XML 格式,因此無法執行 IDOD 傳送 作業。

原因

當 SAP 系統使用 FilePort 產生 IDOC 時,它會修剪區段結尾的所有空白空間。 不過,一般檔案剖析器預期區段中最後一個欄位的資料必須存在,才能成功將一般檔案轉換為 XML。 由於空白空間不存在於區段中,所以一般檔案剖析器無法將一般檔案剖析為 XML。

解決方法

針對使用 SAP FilePort 產生的這類一般檔案IDOC,請改用 SendIdoc 作業。 如需這項作業的詳細資訊,請參閱 SAP 中的 IDOC 作業

如果 EnableBizTalkCompatibilityMode 屬性設定為 true,則從 SAP 接收IDOC 時發生錯誤

問題

收到 IDOC 並將 EnableBizTalkCompatibilityMode 系結屬性設定為 true 時,會發生下列例外狀況:

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

原因

如果系結屬性 EnableBizTalkCompatibilityMode 設定為 true,您必須將 SAP 配接器的 BizTalk 屬性架構 DLL 新增為 BizTalk 應用程式中的資源,也就是部署專案的應用程式。

解決方法

SAP 配接器的 BizTalk 屬性架構名稱 Microsoft.Adapters.SAP.BiztalkPropertySchema.dll。 這是由安裝磁片磁碟機 > :\ Program Files\Microsoft BizTalk Adapter Pack\bin 下的 < BizTalk 配接器套件安裝。 執行下列工作,將此元件新增為 BizTalk 應用程式中的資源。

在 BizTalk 應用程式中新增元件作為資源

  1. 啟動 BizTalk Server 管理主控台。

  2. 在主控台樹中,依序展開 [BizTalk 群組]、[ 應用程式] 和您要新增 BizTalk 元件的應用程式。

  3. 展開 [應用程式 ] 和您要新增 BizTalk 元件的應用程式。

  4. 以滑鼠右鍵按一下 [資源],指向 [ 新增],然後按一下 [BizTalk 元件]。

  5. 按一下 [新增],流覽至包含 BizTalk 元件檔案的資料夾,選取 BizTalk 元件檔案,然後按一下 [ 開啟]。

  6. [選項] 中,指定將 BizTalk 元件安裝至 GAC 的選項,然後按一下 [ 確定]。

從 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 資料行失敗。

解決方法

您必須使用 WCF 服務模型,手動編輯 BizTalk 專案的架構 (列舉) 或 .NET 專案的用戶端 Proxy) (,才能包含從 SAP 系統接收的值。

在轉換成 XML 之前和之後的一般檔案IDOC 不相同

問題

如果您使用一般檔案剖析器,使用架構將一般檔案 IDOC 轉換成 XML,然後使用架構將 XML 轉換為一般檔案 IDOC,則兩個一般檔案 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等等。不過,在取用配接器服務增益集所產生的系結檔案中,作業名稱與您產生中繼資料的作業名稱相同。 例如,如果您產生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 配接器的 WCF-Custom 接收埠從 SAP 伺服器接收輸入訊息時,您才會收到下列錯誤。

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. 以滑鼠右鍵按一下錯誤中所參考的 rood 節點,然後選取 [ 屬性]。

  2. 針對 RootNode TypeName 屬性,請移除任何不合法的字元或保留字,例如 dot (.) 。

在 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應用程式中使用泛型作業架構,請建立包含單一泛型作業架構的應用程式,然後使用BizTalk Server中所有其他應用程式的泛型作業架構。

另請參閱

針對 SAP 配接器進行疑難排解