使用 BizTalk Server 從 SAP 接收IDOC
接收 IDOC 牽涉到 SAP 配接器作為 RFC 伺服器,以接收來自 SAP 的特殊 RFC 呼叫。 SAP 配接器可以接收做為 RFC 伺服器或 tRFC 伺服器的IDOC。 如需使用配接器作為 tRFC 伺服器接收 IDOC 的詳細資訊,請參閱使用 BizTalk Server 從交易式內容中接收 SAP 的IDOC。
SAP 配接器會顯示兩個不同的作業來接收IDOC:
接收 作業可讓配接器接收具有強型別架構的IDOC。
ReceiveIdoc 作業可讓配接器接收具有弱式型別架構的IDOC。 這項作業會在 idocData > 標籤下的 < XML 訊息中,以字串的形式接收IDOC。
在配接器端,您可以指定 ReceiveIDocFormat 系結屬性的值,以指定配接器將接收的 IDOC 格式。
Typed 指定配接器將會收到具有強型別架構的IDOC。 這會產生 XML IDOC。
字串 指定配接器將會收到具有弱式型別架構的IDOC。 這會產生具有 idocData > 標記的 < XML 訊息。
Rfc 指定介面卡會以任何格式接收IDOC。
針對接收IDOC,SAP 配接器也支援一組訊息內容屬性,讓配接器用戶端可以在協調流程中使用。 如需屬性清單,請參閱 接收IDOC 的訊息內容屬性。
如需 SAP 配接器如何支援從 SAP 系統接收IDOC 的詳細資訊,請參閱 SAP 中的IDOC 作業。 如需用於接收 IDOC 之 SOAP 訊息結構的詳細資訊,請參閱 IDOC 作業的訊息架構。
從 SAP 系統接收IDOC 的 BizTalk 案例
下表提供從 SAP 系統接收IDOC 的重要 BizTalk 案例:
從 SAP 輸入配接器 | BizTalk 處理 | 輸出 |
---|---|---|
透過 tRFC 介面) IDOC ( | 中繼資料設計階段 1.將系結屬性 GenerateFlatFileCompatibleIdocSchema 設定為 True。 2.使用取用配接器服務增益集,為特定 IDOC 產生 接收 作業的架構。 3.將系結屬性 ReceiveIdocFormat 設定為 Typed。 協調流程設計階段 1. 接收 XML IDOC。 2.使用一般檔案組合器,將 XML IDOC 轉換成一般檔案。 |
一般檔案 IDOC |
透過 tRFC 介面) IDOC ( | 中繼資料設計階段 1.將系結屬性 GenerateFlatFileCompatibleIdocSchema 設定為 True。 2.使用取用配接器服務增益集,為特定 IDOC 產生 接收 作業的架構。 3.將系結屬性 ReceiveIdocFormat 設定為 Typed。 協調流程設計階段 - 接收 XML IDOC。 |
XML IDOC |
透過 tRFC 介面) IDOC ( | 中繼資料設計階段 1.將系結屬性 GenerateFlatFileCompatibleIdocSchema 設定為 True。 2.使用取用配接器服務增益集,為特定 IDOC 產生 接收 作業的架構。 3.將系結屬性 ReceiveIdocFormat 設定為 String。 協調流程設計階段 1.在 idocData > 標記中使用 < 一般檔案 IDOC 接收 XML 訊息。 2.使用接收埠組態中的 WCF 配接器 XPath 支援,從 XML 訊息擷取一般檔案 IDoc。 例如: /*[local-name()='ReceiveIdoc']/*[local-name()='idocData'] 3.使用一般檔案反組譯程式,將一般檔案 IDOC 轉換為 XML IDOC。 重要 這個方法可用來使用新的 WCF 型 SAP 配接器接收IDOC,並直接將它們套用至寫入的現有 BizTalk 專案中,以接收來自現有 BizTalk SAP 配接器的IDOC。 這也是接收版本號碼小於 SYSREL () 版本號碼之 IDOC 的建議方法。 |
XML IDOC |
透過 tRFC 介面) IDOC ( | 中繼資料設計階段 1.使用取用配接器服務增益集,從 IDOC 節點產生 ReceiveIdoc 作業的架構。 2.將系結屬性 ReceiveIdocFormat 設定為 String。 協調流程設計階段 - 接收以 idocData > 標記中字串表示的 < IDOC 的 XML 訊息。 |
XML 訊息中的一般檔案 IDOC |
如何從 SAP 系統接收 IDOC?
使用 BizTalk Server 在 SAP 系統上執行作業牽涉到建立 SAP 應用程式的建置組塊中所述的程式性工作。 若要從 SAP 系統接收 IDOC,這些工作如下:
建立 BizTalk 專案,並針對您想要在 SAP 系統中叫用的 IDOC 產生架構。 產生架構時,請確定您已設定必要的系結屬性,如上表所列。 如需如何設定系結屬性的指示,請參閱 設定 SAP 配接器的系結屬性。
在 BizTalk 專案中建立訊息,以便從 SAP 系統傳送和接收訊息。
建立協調流程以從 SAP 系統接收 IDOC。
建置和部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
啟動 BizTalk 應用程式。
本主題提供執行這些工作的指示。
以本主題為基礎的範例
根據本主題的範例、ReceiveIDOC 和ReceiveIDOC_SYSREL,也會隨附 BizTalk 配接器套件。 如需詳細資訊,請參閱 SAP 配接器的範例。
產生架構
您必須為ORDERS03的接收作業產生架構。/IDOC/ORDERS/ORDERS03節點下的 V3.620 IDOC。 如需如何為特定 IDOC 產生架構的指示,請參閱 流覽、搜尋及取得 SAP 中 IDOC 作業的中繼資料 。 產生架構時,您可能也想要設定下列屬性:
GenerateFlatFileCompatibleIDoc –產生 < appinfo > 標記,以便 BizTalk 一般檔案剖析器可用於 BizTalk 案例中,以支援一般檔案IDOC。
FlatFileSegmentIndicator – 指出 IDOC 架構 < appinfo > 標籤是否應該包含區段定義名稱或區段類型名稱。 當使用想要傳送/接收一般檔案 IDOC 至 SAP 或從 SAP 傳送/接收時,就適用此情況。 如果 GenerateFlatFileCompatibleIDoc 設定為 false,則會忽略 FlatFileSegmentIndicator 系結屬性。
重要
由於您正在產生輸入 IDOC 呼叫的架構,因此請務必從取用配接器服務 BizTalk 專案增益集的 [選取合約類型] 下拉式清單中選取 [服務 (輸入作業) 。
定義訊息和訊息類型
您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您必須將您在第一個步驟中產生的架構連結到 BizTalk 專案的協調流程檢視中的訊息。
針對本主題,您必須建立兩個訊息,一個從 SAP 系統接收 IDOC,另一個則用來傳送回應。
執行下列步驟來建立訊息,並將其連結至架構:
建立訊息並連結至架構
將新的協調流程新增至 BizTalk 專案。
如果尚未開啟,請開啟協調流程檢視 BizTalk 專案。 按一下 [檢視],指向 [其他視窗],然後按一下 [ 協調流程檢視]。
在協調 流程檢視中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。
以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。
在Message_1的 [屬性]窗格中,執行下列動作:
使用 作法 識別碼 輸入 要求。 訊息類型 從下拉式清單中,展開 [ 架構],然後選取 [ReceiveIDOC.SAPBindingSchema2],其中 ReceiveIDOC 是您 BizTalk 專案的名稱。 SAPBindingSchema2 是針對接收作業產生的架構。 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性 ] 窗格中,執行下列動作:
使用 作法 識別碼 輸入 回應。 訊息類型 從下拉式清單中,展開 [ 架構],然後選取 [ReceiveIDOC.SAPBindingSchema3]。
設定協調流程
您必須建立 BizTalk 協調流程,才能使用BizTalk Server從 SAP 系統接收IDOC。 在典型的案例中,SAP 配接器會從 SAP 系統接收 IDOC 呼叫、處理要求,並將回應傳遞至 SAP 系統。 若要在協調流程中達成此目的,協調流程必須包含:
雙向接收埠,可從 SAP 系統接收IDOC 並傳送回應。
傳送和接收圖形。
建構訊息圖形,並在該訊息指派圖形內產生要傳送至 SAP 系統的回應。
注意
如果協調流程包含雙向接收埠 (要求-回應) 從 SAP 系統接收 IDOC,則協調流程必須將回應傳回 SAP 系統。 如果沒有,SAP 系統不會傳送下一個 IDOC。 不過,如果單向接收埠,協調流程就不需要將回應傳送至 SAP 系統。
單向傳送埠,將從 SAP 系統接收的IDOC 傳送至資料夾。
從 SAP 系統接收 IDOC 的範例協調流程如下所示:
協調流程
新增訊息圖形
請確定您為每個訊息圖形指定下列屬性。 Shape資料行中所列的名稱是上述協調流程中顯示的訊息圖形名稱。
圖形 | 圖形類型 | 屬性 |
---|---|---|
ListenToSAP | 接收 | - 將 名稱 設定為 ListenToSAP - 將 Activate 設定為 True |
SaveIDOC | 傳送 | - 將 [名稱 ] 設定為 SaveIDOC |
SendResponse | 傳送 | - 將 [名稱] 設定為 SendResponse |
新增建構訊息圖形
在協調流程中,您必須產生回應,並將它傳送至 SAP 系統。 若要這樣做,您必須將建構訊息圖形和該訊息指派圖形新增至協調流程。 [訊息指派] 圖形會叫用程式碼,以產生傳送至 SAP 系統的回應訊息。 [訊息指派] 圖形也會設定要傳送至 SAP 系統的回應動作。
重要
如果協調流程包含雙向接收埠 (要求-回應) 從 SAP 系統接收 IDOC,則協調流程必須將回應傳回 SAP 系統。 如果沒有,SAP 系統不會傳送下一個 IDOC。 不過,如果單向接收埠,協調流程就不需要將回應傳送至 SAP 系統。
針對建構訊息圖形,將 Message Constructed 屬性設定為 Response。
產生回應的程式碼可能是與 BizTalk 專案相同的 Visual Studio 解決方案的一部分。 產生回應訊息的範例程式碼看起來像這樣。
namespace IdocReceiveResponseMessageCreator
{
public class IdocReceiveResponseMessageCreator
{
private static XmlDocument Message;
private static string XmlFileLocation;
private static string ResponseDoc;
public static XmlDocument XMLMessageCreator()
{
XmlFileLocation = "C:\\test\\in";
try
{
ResponseDoc = (Directory.GetFiles(XmlFileLocation, "*.xml", SearchOption.TopDirectoryOnly))[0];
}
catch (Exception ex)
{
Console.WriteLine("Trying to get XML from: " + XmlFileLocation);
Console.WriteLine("EXCEPTION: " + ex.ToString());
throw ex;
}
//Create Message From XML
Message = new XmlDocument();
Message.PreserveWhitespace = true;
Message.Load(ResponseDoc);
return Message;
}
}
}
注意
建置專案之後,將會在專案目錄中建立 IdocReceiveResponseMessageCreator.dll。 您必須將此 DLL 新增至全域組件快取 (GAC) 。
新增下列運算式,以從訊息指派圖形叫用此程式碼,並設定傳送至 SAP 系統的回應動作。 若要新增運算式,請按兩下 [訊息指派] 圖形以開啟 [運算式編輯器]。
Response = IdocReceiveResponseMessageCreator.IdocReceiveResponseMessageCreator.XMLMessageCreator();
Response(WCF.Action)= "http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/Receive/response";
重要
您必須在回應訊息上明確設定動作。 如果您未設定動作,WCF-Custom 配接器會藉由將「回應」附加至要求動作來抵達動作訊息。 因此,回應訊息的動作會 http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/ReceiveResponse
變成 。 不過,sapBinding 會藉由將 「/response」 附加至要求動作來預期回應動作,例如 http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/Receive/response
。
新增埠
請確定您為邏輯埠指定下列屬性。 [ 埠] 資料行中所列的名稱是協調流程中顯示的埠名稱。
連接埠 | 屬性 |
---|---|
ReceiveIDOCPort | - 將 識別碼 設定為 ReceiveIDOCPort - 將 Type 設定為 ReceiveIDOCPortType - 將 通訊模式 設定為 Request-Response - 將 通訊方向 設定為 Receive-Send |
GetIDOCPort | - 將 識別碼 設定為 GetIDOCPort - 將 類型 設定為 GetIDOCPortType - 將 通訊模式 設定為 單向 - 設定要傳送的通訊方向 |
重要
如果協調流程包含雙向接收埠 (要求-回應) 從 SAP 系統接收 IDOC,則協調流程必須將回應傳回 SAP 系統。 如果沒有,SAP 系統不會傳送下一個 IDOC。
新增一般檔案組合器
您必須新增組合器,將傳入的 IDOC 訊息轉換成一般檔案。
若要新增一般檔案組合器
以滑鼠右鍵按一下 BizTalk 專案,指向 [ 新增],然後選取 [ 新增專案]。
從對話方塊中,執行下列動作:
使用 作法 類別 管線檔案 Visual Studio 安裝的範本 傳送管線 名稱 SendIDOC 這會開啟管線Designer。 從 BizTalk 管線元件 工具箱中,將 [ 一般檔案組合器 管線] 元件拖曳至傳送管線的 [ 組合 ] 階段。
從 [管線元件屬性 ] 檢視中,指定 [檔架構 ] 屬性的值。 從下拉式清單中,確定您選取對應至 IDOC 接收作業的架構。
指定動作圖形的訊息並連接到埠
下表指定要設定的屬性及其值,以指定動作圖形的訊息,並將其連結至埠。 Shape資料行中所列的名稱是上述協調流程中顯示的訊息圖形名稱。
圖形 | 屬性 |
---|---|
ListenToSAP | - 將 訊息 設定為 要求 - 將 作業 設定為 ReceiveIDOCPort.ReceiveIDOC.Request |
SaveIDOC | - 將 訊息 設定為 要求 - 將 作業 設定為 GetIDOCPort.ReceiveIDOC.Request |
SendResponse | - 將 訊息 設定為 回應 - 將 作業 設定為 ReceiveIDOCPort.ReceiveIDOC.Response |
指定這些屬性之後,訊息圖形和埠會連線,而且您的協調流程已完成。
您現在必須建置 BizTalk 解決方案,並將其部署至BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程
設定 BizTalk 應用程式
部署 BizTalk 專案之後,您稍早建立的協調流程會列在 BizTalk Server 管理主控台的 [協調流程] 窗格底下。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需設定應用程式的詳細資訊,請參閱 如何設定應用程式。
設定應用程式牽涉到:
選取應用程式的主機。
將您在協調流程中建立的埠對應至 BizTalk Server 管理主控台中的實體埠。 針對此協調流程,您必須:
定義傳送位置和實體傳送埠。 此位置將包含來自 SAP 系統的IDOC。
重要
針對 XMLTransmit 管線,請確定您選取 [SendIDOC]。 您已建立此管線作為 BizTalk 專案的一部分。
定義 WCF-Custom 或 WCF-SAP 接收埠。 此埠會從 SAP 系統接收輸入 IDOC,並將它傳遞至協調流程。 此埠也會將回應傳送至 SAP 系統。 如需如何建立埠的資訊,請參閱 手動設定實體埠系結至 SAP 配接器。
重要
確定 Binding 屬性 ReceiveIDocFormat 已設定為 Typed。
重要
如果系結屬性 EnableBizTalkCompatibilityMode 設定為 true,請確定您新增 BizTalk 屬性架構 DLL 作為 BizTalk 應用程式中的 SAP 配接器資源,也就是您專案部署所在的應用程式。 如需新增資源的指示,請參閱針對 SAP 配接器的作業問題進行疑難排解。
注意
使用取用配接器服務 BizTalk 專案增益集產生架構也會建立系結檔案,其中包含要針對這些埠設定的埠和動作的相關資訊。 您可以從 BizTalk 管理主控台匯入此系結檔案,以建立輸出通話) 的傳送埠 (,或針對輸入呼叫) 接收埠 (。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結至 SAP。
您也必須將 IdocReceiveResponseMessageCreator 專案的元件新增至 BizTalk 應用程式。 您已建立此專案來產生要傳送至 SAP 系統的回應。 若要這樣做:
在 BizTalk Server 管理主控台左側的主控台樹中,于匯入系結的 BizTalk 應用程式底下,以滑鼠右鍵按一下[資源],指向 [新增],然後按一下 [BizTalk 元件]。
在 [ 新增資源 ] 對話方塊中,按一下 [ 新增 ],然後流覽至包含 IdocReceiveResponseMessageCreator.dll 的資料夾。 選取檔案,然後按一下 \[開啟\]。
在 [ 新增資源] 對話方塊中,按一下 [ 確定]。
啟動應用程式
您必須啟動 BizTalk 應用程式,才能從 SAP 系統接收 IDOC。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程或 如何啟動應用程式。
在這個階段,請確定:
將傳入 IDOC 儲存到檔案位置的 FILE 傳送埠正在執行中
要從 SAP 系統接收IDOC 的 WCF-Custom 或 WCF-SAP 接收埠正在執行。
作業的 BizTalk 協調流程正在執行。
執行作業
執行應用程式之後,您必須移至 SAP 系統,並將 IDOC 傳送至配接器。 配接器會接收 IDOC,並將它儲存至協調流程中指定的檔案位置。
可能的例外狀況
如需使用 BizTalk Server 從 SAP 系統接收 IDOC 時可能會遇到的例外狀況相關資訊,請參閱使用 SAP 配接器處理例外狀況和錯誤處理。
最佳做法
部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,如此就不需要為相同的協調流程建立傳送埠、接收埠等。 如需系結檔案的詳細資訊,請參閱 重複使用 SAP 配接器系結。