共用方式為


使用 BizTalk Server 從 SAP 接收輸入 RFC 呼叫

在 RFC 伺服器案例中,有三個實體:

  • 將要求傳送至 SAP 以叫用 RFC 的 SAP 用戶端。 這可以使用 SAP GUI 或透過 SAP 配接器進行 RFC 用戶端呼叫來叫用。

  • SAP 系統,其中包含 SAP 用戶端叫用的 RFC 函式定義。 SAP 系統會將要求傳遞至 RFC 伺服器, (介面卡) 。 配接器會使用此屬性來取得 SAP 伺服器對配接器進行之 RFC 呼叫的中繼資料。

  • 作為 RFC 伺服器並裝載實際 RFC 的 SAP 配接器。

    本主題不會討論第一個實體 SAP 用戶端。 如果您使用 SAP GUI 來叫用 RFC,請參閱 SAP 檔。 如果您使用 SAP 配接器來叫用 RFC,請參閱使用 BizTalk Server在 SAP 中叫用 RFC

    本節提供如何在 SAP 用戶端叫用 RFC 之後,使用配接器來接收 RFC 伺服器呼叫的指示。 如需配接器如何使用 SAP 配接器來接收 RFC 伺服器呼叫的詳細資訊,請參閱 SAP 中的 RFC 作業

如何從 SAP 系統接收輸入 RFC 呼叫?

使用 BizTalk Server 在 SAP 系統上執行作業牽涉到建立 SAP 應用程式的建置組塊中所述的程式工作。 若要從 SAP 系統接收 RFC 呼叫,這些工作如下:

  1. 將您的 SAP 系統設定為將 RFC 傳送至外部應用程式,在此案例中為 SAP 配接器。

  2. 建立 BizTalk 專案,並為 SAP 配接器從 SAP 系統接收的 RFC 產生架構。

  3. 在 BizTalk 專案中建立訊息,以接收來自 SAP 系統的訊息並傳送回應。

  4. 建立協調流程以接收來自 SAP 系統的 RFC、處理它,並將回應傳送給 SAP 系統。

  5. 建置和部署 BizTalk 專案。

  6. 藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。

  7. 啟動 BizTalk 應用程式。

    本主題提供執行這些工作的指示。

SAP 系統上的活動

使用 SAP 配接器從 SAP 系統接收輸入 RFC 呼叫之前,請確定您在 SAP 系統上完成下列工作。

  • SAP 配接器的 RFC 目的地必須存在。 SAP 配接器會透過 SAP 系統上定義的 RFC 目的地,從 SAP 系統接收 RFC。 RFC 目的地包含 SAP 閘道主機、SAP 閘道服務,以及您必須在程式碼中的連線 URI 中指定的 SAP 程式識別碼。 如需如何在 SAP 上設定 RFC 目的地的詳細資訊,請參閱 建立 RFC、RFC 目的地,以及從 SAP 系統傳送 RFC

  • 您必須建立函式模組,以定義 SAP 系統上的 RFC。 SAP 配接器會使用 SAP 系統上的 RFC 定義,在設計階段和執行時間擷取 RFC (的相關中繼資料) 。 如需詳細資訊,請參閱 在 SAP 系統中建立 RFC

    以下是 RFC 上 SAP 系統上原始程式碼的範例,其會新增兩個整數並傳回其結果。 程式碼只會透過指定的目的地呼叫 RFC。 函式的實作是由 SAP 配接器用戶端程式代碼所完成。

    FUNCTION Z_RFC_ADD.  
    *"------------------------------------------------------------------  
    *"  
    *"Local interface:  
    *"  IMPORTING  
    *"     VALUE(X) TYPE  INT4  
    *"     VALUE(Y) TYPE  INT4  
    *"     VALUE(DEST) TYPE  CHAR20 DEFAULT 'SAPADAPTER'  
    *"  EXPORTING  
    *"     VALUE(RESULT) TYPE  INT4  
    *"------------------------------------------------------------------  
    CALL FUNCTION 'Z_RFC_ADD' DESTINATION DEST  
      EXPORTING X = X  
                Y = Y  
      IMPORTING RESULT = RESULT.  
    
    ENDFUNCTION.  
    

以本主題為基礎的範例

根據本主題的範例 RFCServer 也隨附 BizTalk 配接器套件。 如需詳細資訊,請參閱 SAP 配接器的範例

產生架構

在本主題中,為了示範如何從 SAP 系統接收輸入 RFC 呼叫,我們會產生 Z_RFC_ADD RFC 的架構。 您在上一個步驟中建立了此 RFC。 此 RFC 接受兩個整數值作為輸入參數。

如需如何為特定 RFC 產生架構的指示 ,請參閱在 SAP 中流覽、搜尋和取得 RFC 作業的中繼資料

重要

由於您產生輸入 RFC 呼叫的架構,請確定從取用配接器服務 BizTalk 專案增益集的 [選取合約類型] 下拉式清單中選取[服務 (輸入作業) 。

定義訊息和訊息類型

您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您必須將您在第一個步驟中產生的架構連結到 BizTalk 專案的協調流程檢視中的訊息。

針對本主題,您必須建立兩個訊息,一個接收來自 SAP 系統的訊息,另一個則用來傳送回應給 SAP 系統。

執行下列步驟來建立訊息,並將其連結至架構:

  1. 將新的協調流程新增至 BizTalk 專案。

  2. 如果尚未開啟,請開啟協調流程檢視 BizTalk 專案。 按一下 [ 檢視],指向 [其他 Windows],然後按一下 [ 協調流程檢視]。

  3. 在 [ 協調流程檢視]中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。

  4. 以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。

  5. Message_1的 [屬性]窗格中,執行下列動作。

    使用 作法
    識別碼 輸入 要求
    訊息類型 從下拉式清單中展開 [ 架構],然後選取 [RFCServer.SAPBindingSchema.Z_RFC_ADD],其中 RFCServer 是您 BizTalk 專案的名稱。 SAPBindingSchema 是針對 RFC Z_RFC_ADD產生的架構。
  6. 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性] 窗格中,執行下列動作。

    使用 作法
    識別碼 輸入 回應
    訊息類型 從下拉式清單中展開 [ 架構],然後選取 [RFCServer.SAPBindingSchema.Z_RFC_ADDResponse]。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用BizTalk Server從 SAP 系統接收 RFC 伺服器呼叫。 在此範例中,請考慮 RFC 用戶端將要求傳送至 SAP 系統以新增兩個整數的案例。 SAP 系統會使用輸入參數來取得要求,並將它傳遞至 SAP 配接器所裝載的外部 RFC 伺服器。 SAP 配接器會從 SAP 系統接收要求、處理要求以新增兩個整數,並產生回應。 SAP 配接器會將回應傳遞至 SAP 系統,接著會傳遞至 RFC 用戶端。

若要在協調流程中達成此目的,協調流程必須包含:

  • 雙向接收埠,可從 SAP 系統接收 RFC 伺服器要求,並傳送回應。

  • 傳送和接收圖形。

  • 建構訊息圖形,並在該訊息指派圖形內處理來自 SAP 系統的 RFC 伺服器要求。

    RFC 伺服器呼叫的範例協調流程如下所示。

    協調流程,讓 RFC 伺服器呼叫

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 Shape資料行中列出的名稱是如上述協調流程所示的訊息圖形名稱。

圖形 圖形類型 屬性
ListenToSAP 接收 - 將 [名稱 ] 設定為 ListenToSAP
- 將 Activate 設定為 True
SendResponse 傳送 - 將 名稱 設定為 SendResponse

新增建構訊息圖形

若要處理傳入 RFC 呼叫以新增兩個整數值,您必須在兩個傳送圖形之間,將「建構訊息」圖形和該「訊息指派」圖形新增至協調流程。 在此範例中,訊息指派圖形會叫用 以新增兩個整數。 [訊息指派] 圖形也會設定要傳送至 SAP 系統的回應動作。

針對 [建構訊息] 圖形,將 Message Constructed 屬性設定為 Response

處理 RFC 要求的程式碼可能是與 BizTalk 專案相同的 Visual Studio 解決方案的一部分。 新增兩個整數的範例程式碼看起來像這樣。

namespace RFCServerResponseCreator  
{  
    public class RFCServerResponseCreator  
    {  
        private static XmlDocument messageIn;  
        private static XmlDocument messageOut;  
        public static XmlDocument CreateRequest(int a, int b, string destination)  
        {  
            messageIn = new XmlDocument();  
            messageIn.LoadXml(  "<Z_RFC_ADD xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +  
                                "<DEST>" + destination + "</DEST>" +  
                                "<X>" + a + "</X>" +  
                                "<Y>" + b + "</Y>" +   
                                "</Z_RFC_ADD>"  
                             );  
            return messageIn;  
        }  
        public static XmlDocument CreateResponse(int a, int b)  
        {  
            int c = a + b;  
            messageOut = new XmlDocument();  
            messageOut.LoadXml( "<Z_RFC_ADDResponse xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +  
                                "<RESULT>" + c + "</RESULT>" +   
                                "</Z_RFC_ADDResponse>"  
                              );  
            return messageOut;  
        }  
    }  
}  

注意

建置專案之後,將會在專案目錄中建立 RFCServerResponseCreator.dll。 您必須將此 DLL 新增至全域組件快取 (GAC) 。

新增下列運算式,以從訊息指派圖形叫用此程式碼,並設定傳送至 SAP 系統的回應動作。 若要新增運算式,請按兩下 [訊息指派] 圖形以開啟 [運算式編輯器]。

Response = RFCServerResponseCreator.RFCServerResponseCreator.CreateResponse(Request.X, Request.Y);  
Response(WCF.Action) = "http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response";  

重要

您必須在回應訊息上明確設定動作。 如果您未設定動作,WCF-Custom 配接器會將「回應」附加至要求動作,以到達動作訊息。 因此,回應訊息的動作會 http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADDResponse 變成 。 不過,sapBinding 會藉由將 「/response」 附加至要求動作來預期回應動作,例如 http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response

新增埠

請確定您為邏輯埠指定下列屬性。 [ ] 資料行中列出的名稱是協調流程中顯示的埠名稱。

連接埠 屬性
RFCServerPort - 將 識別碼 設定為 RFCServerPort
- 將 類型 設定為 RFCServerPortType
- 將 通訊模式 設定為 Request-Response
- 將 通訊方向 設定為 接收傳送

指定動作圖形的訊息並連接到埠

下表指定要設定的屬性及其值,以指定動作圖形的訊息,並將其連結至埠。 Shape資料行中列出的名稱是如上述協調流程所示的訊息圖形名稱。

圖形 屬性
ListenToSAP - 將 訊息 設定為 要求
- 將 作業 設定為 RFCServerPort.Add.Request
SendResponse - 將 訊息 設定為 FuncResponse
- 將 作業 設定為 RFCServerPort.Add.Response

指定這些屬性之後,訊息圖形和埠就會連線,而且您的協調流程已完成。

您現在必須建置 BizTalk 解決方案,然後將其部署至BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程

設定 BizTalk 應用程式

部署 BizTalk 專案之後,您稍早建立的協調流程會列在 [BizTalk Server 管理主控台] 的 [協調流程] 窗格中。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需設定應用程式的詳細資訊,請參閱 如何設定應用程式

設定應用程式牽涉到:

  • 選取應用程式的主機。

  • 將您在協調流程中建立的埠對應至 BizTalk Server 管理主控台中的實體埠。 針對此協調流程,您必須:

    • 定義 WCF-Custom 或 WCF-SAP 接收埠。 此埠會從 SAP 系統接收輸入 RFC 呼叫,並將回應傳回至 SAP 系統。 如需如何建立埠的詳細資訊,請參閱 手動設定 SAP 配接器的實體埠系結

      注意

      使用取用配接器服務 BizTalk 專案增益集產生架構也會建立系結檔案,其中包含埠的相關資訊,以及要為這些埠設定的動作。 您可以從 BizTalk 管理主控台匯入此系結檔案,以建立輸出呼叫) 的傳送埠 (,或接收輸入呼叫的埠 () 。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結至 SAP

    您也必須將 RFCServerResponseCreator 專案的元件新增至 BizTalk 應用程式。 您已建立此專案來處理從 SAP 系統收到的 RFC 呼叫。 若要這樣做:

  1. 在BizTalk Server管理主控台左側的主控台樹中,于您匯入系結的 BizTalk 應用程式底下,以滑鼠右鍵按一下 [資源],指向 [新增],然後按一下 [BizTalk 元件]。

  2. 在 [ 新增資源] 對話方塊中,按一下 [ 新增],然後流覽至包含 RFCServerResponseCreator.dll 的資料夾。 選取檔案,然後按一下 \[開啟\]

  3. 在 [ 新增資源] 對話方塊中,按一下 [確定]。

啟動應用程式

您必須啟動 BizTalk 應用程式,才能從 SAP 系統接收輸入 RFC 呼叫。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程如何啟動應用程式

在此階段,請確定:

  • 從 SAP 系統執行 WCF-Custom 或 WCF-SAP 接收埠來接收 RFC 呼叫。

  • 作業的 BizTalk 協調流程正在執行。

執行作業

執行應用程式之後,您必須將 RFC 傳送至 SAP 配接器。 您可以在 SAP 系統上執行交易 SE37 來執行此動作。 您也必須指定 RFC 呼叫的輸入參數。 配接器會連同參數一起接收呼叫、處理它,並將回應傳回至 SAP 系統。 您將能夠在傳送 RFC 的相同交易上看到回應。

可能的例外狀況

如需使用 BizTalk Server從 SAP 系統接收 RFC 伺服器呼叫時可能會遇到的例外狀況相關資訊,請參閱 SAP 配接器的例外狀況和錯誤處理

最佳做法

部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,如此您就不需要為相同的協調流程建立傳送埠、接收埠等。 如需系結檔案的詳細資訊,請參閱 重複使用 SAP 配接器系結

另請參閱

開發 BizTalk 應用程式