共用方式為


在 Azure Logic Apps 中產生 SAP 成品的結構描述

適用於:Azure Logic Apps (使用量 + 標準)

本操作指南示範如何建立範例邏輯應用程式工作流程,以產生SAP 成品的結構描述。 工作流程從 [要求] 觸發程序開始,其可從 SAP 伺服器接收 HTTP POST 要求。 工作流程接著會使用名為 [產生結構描述] 的 SAP 動作為指定的 IDoc 和 BAPI 產生結構描述,而 SAP 動作可將要求傳送至 SAP 伺服器。 若要傳送此要求,您可使用名為 [將訊息傳送至 SAP] 的一般 SAP 受控連接器動作,或使用名為 [[BAPI] SAP 中的呼叫方法] 的特定 SAP 受控或內建動作。 此 SAP 動作會傳回 XML 結構描述,而不是 XML 文件本身的內容或資料。 在回應中傳回的結構描述會使用 Azure Resource Manager 連接器上傳到企業整合帳戶。 結構描述包含下列部分:

元件 描述
要求訊息結構 使用此資訊來形成 BAPI get 清單。
回應訊息結構 使用此資訊來剖析回應。

標準和取用邏輯應用程式工作流程都提供在多租用戶 Azure 中裝載並執行的 SAP 受控連接器。 標準工作流程也會提供預覽 SAP 內建連接器,該連接器裝載並執行於單一租用戶 Azure Logic Apps 中,但此連接器目前處於預覽狀態並受限於 Microsoft Azure Previews 的補充使用規定。 如需詳細資訊,請參閱連接器技術參考

必要條件

產生 SAP 成品的結構描述

下列範例邏輯應用程式工作流程會在工作流程的 SAP 觸發程序收到來自 SAP 伺服器的要求時觸發。 工作流程接著會執行 SAP 動作,以產生指定 SAP 成品的結構描述。

新增「要求」觸發程序

若要讓工作流程透過 HTTP 接收來自 SAP 伺服器的要求,您可以使用要求內建觸發程序。 此觸發程序會建立具有 URL 的端點,讓 SAP 伺服器可將 HTTP POST 要求傳送至工作流程。 工作流程收到這些要求後,觸發程序便會在您的工作流程中引發並執行後續步驟。

根據您在多租用戶 Azure Logic Apps 中有取用工作流程,或在單一租用戶 Azure Logic Apps 中有標準工作流程,請遵循對應的步驟:

  1. Azure 入口網站中,建立取用邏輯應用程式資源和空白工作流程,其在設計工具中開啟。

  2. 在設計工具中,遵循下列一般步驟,以尋找和新增名為收到 HTTP 要求時的要求內建觸發程序

    此螢幕擷取畫面顯示取用工作流程的要求觸發程序。

  3. 儲存您的工作流程您 在設計師工具列上選取儲存

    此步驟會產生端點 URL,觸發程序可以從 SAP 伺服器接收要求,例如:

    此螢幕擷取畫面顯示要求觸發程序在取用工作流程中收到要求時所產生的端點 URL。

新增 SAP 動作以產生結構描述

根據您在多租用戶 Azure Logic Apps 中有取用工作流程,或在單一租用戶 Azure Logic Apps 中有標準工作流程,請遵循對應的步驟:

  1. 在工作流程設計工具的要求觸發程序之下,選取 [新增步驟]

  2. 在設計工具中,遵循下列一般步驟,以尋找和新增名為 [產生結構描述] 的 SAP 受控動作

    如需此 SAP 受控動作的詳細資訊,請參閱產生結構描述

  3. 如果出現提示,請為內部部署 SAP 伺服器提供連線資訊。 完成時,選取建立。 否則,繼續進行下一個步驟來設定 SAP 動作。

    根據預設,當您為 SAP 受控作業建立連線時,強型別藉由對結構描述執行 XML 驗證用於檢查無效的值。 此行為可協助您更早偵測問題。 深入了解安全型別設定。 如需其他選擇性可用的連線參數,請參閱預設連線資訊

    在 Azure Logic Apps 設定及測試您的連線之後,動作資訊方塊隨即出現。 如需可能發生之任何連線問題的詳細資訊,請參閱針對連線進行疑難排解

    此螢幕擷取畫面顯示取用工作流程以及名為 [產生結構描述] 的 SAP 受控動作。

  4. [產生結構描述] 動作中,藉由選取 SAP 伺服器上可用的 SAP 動作,提供您要為其產生結構描述之成品的路徑。

    1. 在 [主體 ActionUri] 參數的編輯方塊中,選取資料夾圖示。 從開啟的清單中,選取 BAPIIDOCRFCTRFC。 此範例會選取 [IDOC]。 如果您選取不同的類型,可用的 SAP 動作會根據您的選取項目而變更。

      注意

      如果您收到不正確的閘道 (500) 錯誤或不正確的要求 (400) 錯誤,請參閱 500 不正確的閘道或 400 不正確的要求錯誤

      此螢幕擷取畫面顯示取用工作流程、[產生結構描述] 動作,以及選取 [IDOC]。

    2. 使用箭號瀏覽 SAP 動作類型資料夾,以尋找並選取您要使用的 SAP 動作。

      此範例會選取 ORDERS>ORDERS05>720>Send

      此螢幕擷取畫面顯示取用工作流程、[產生結構描述] 動作,以及尋找 [訂單] 動作。

      如果找不到您需要的動作,您可手動輸入路徑,例如:

      此螢幕擷取畫面顯示取用工作流程,並手動輸入 SAP 動作的路徑。

      提示

      針對 [主體 ActionUri] 參數,您可以使用運算式編輯器來提供參數值。 如此一來,您就可以對不同的訊息類型使用相同的 SAP 動作。

      如需 SAP 動作的詳細資訊,請參閱 IDoc 作業的訊息結構描述

    3. 若要產生多個成品的結構描述,請在 [主體 ActionUri] 區段中,選取 [新增項目]

      此螢幕擷取畫面顯示選取可新增項目的選項。

    4. 針對每個成品,提供您想要用於結構描述產生的 SAP 動作,例如:

      此螢幕擷取畫面顯示用於產生多個結構描述的多個 SAP 動作。

  5. 儲存您的工作流程您 在設計師工具列上選取儲存

測試結構描述產生的工作流程

根據您在多租用戶 Azure Logic Apps 中有取用工作流程,或在單一租用戶 Azure Logic Apps 中有標準工作流程,請遵循對應的步驟:

  1. 如果您的取用邏輯應用程式資源尚未啟用,請在邏輯應用程式功能表上選取 [概觀]。 在工具列上,選取 [啟用]

  2. 在設計工具工具列上選取 [執行] > [執行],以手動開始工作流程。

  3. 若要模擬 Webhook 觸發程序承載並觸發工作流程,請使用 HTTP 要求工具和其指示,將 HTTP 要求傳送至工作流程要求觸發程序所建立的端點 URL,包括要求觸發程序預期的方法。 確定在您的要求中包含您的訊息內容。

    此範例會使用 POST 方法和端點 URL 來傳送 IDoc 檔案,該檔案必須是 XML 格式,並包含您選取之 SAP 動作的命名空間,例如:

    <?xml version="1.0" encoding="UTF-8" ?>
    <Send xmlns="http://Microsoft.LobServices.Sap/2007/03/Idoc/2/ORDERS05//720/Send">
      <idocData>
        <...>
      </idocData>
    </Send>
    
  4. 傳送 HTTP 要求後,請等候來自工作流程的回應。

    注意

    如果回應所需的所有步驟未在要求逾時期限內完成,工作流程可能會逾時。 如果發生此情況,要求可能就會遭到封鎖。 為協助您診斷問題,請了解如何檢查和監控邏輯應用程式工作流程

  5. 在邏輯應用程式的 [概觀] 窗格的 [執行歷程記錄] 底下,尋找並開啟工作流程執行。

  6. 尋找 [產生結構描述] 動作,並檢閱動作的輸出。

    輸出中會顯示針對所指定訊息產生的結構描述。

如需檢閱工作流程執行歷程記錄的詳細資訊,請參閱監視邏輯應用程式工作流程

將結構描述上傳到企業整合帳戶

您可以選擇性地將產生的結構描述下載或儲存在存放庫中,例如整合帳戶或 Azure 儲存體帳戶,例如,在 Blob 容器中。 整合帳戶為 Azure Logic Apps 中的工作流程提供 XML 動作的一流體驗。 您可以選擇將產生的結構描述上傳至相同工作流程中的現有整合帳戶,該工作流程會使用名為 [建立或更新資源] 的 Azure Resource Manager 動作來產生這些結構描述。

注意

結構描述使用 base64 編碼格式。 若要將結構描述上傳至整合帳戶,您必須先使用 base64ToString() 函數,以對其進行解碼。 下列範例顯示 properties 元素的程式碼:

"properties": {
   "Content": "@base64ToString(items('For_each')?['Content'])",
   "ContentType": "application/xml",
   "SchemaType": "Xml"
}

針對這項工作,如果您還沒有整合帳戶,則需要整合帳戶。 根據您在多租用戶 Azure Logic Apps 中有取用工作流程,還是在單一租用戶 Azure Logic Apps 中有標準工作流程,遵循對應的步驟,以在結構描述產生之後,將結構描述從工作流程上傳至整合帳戶。

  1. 在工作流程設計工具中名為 [產生結構描述] 的 SAP 受控動作底下,選取 [新增步驟]

  2. 遵循下列一般步驟,尋找並新增名為 [建立或更新資源] 的 Azure Resource Manager 受控動作。 如果系統提示您使用認證進行登入,請繼續進行。

    在 Azure Logic Apps 設定及測試您的連線之後,動作資訊方塊隨即出現。

    此螢幕擷取畫面顯示取用工作流程以及名為 [建立或更新資源] 的 Azure Resource Manager 動作。

  3. 在 [建立或更新資源] 動作中,提供必要資訊

    1. 若要在工作流程中包含先前步驟的任何輸出,請在您要包含輸出的參數內選取,開啟動態內容清單,然後選取要包含的輸出。

    2. 從 [新增參數] 清單,選取 [位置] 和 [屬性] 參數。

    3. 提供這些新增參數的值,例如:

      此螢幕擷取畫面顯示取用工作流程以及已新增參數名為 [位置和屬性] 的 Azure Resource Manager 動作。

    [產生結構描述] 動作會產生結構描述作為集合,因此設計工具會自動為 Azure Resource Manager 動作新增 For each 迴圈,例如:

    此螢幕擷取畫面顯示取用工作流程以及每個包含 Azure Resource Manager 動作的迴圈。

  4. 儲存您的工作流程您 在設計師工具列上選取儲存

測試工作流程

  1. 根據您有取用還是標準邏輯應用程式工作流程,遵循一般步驟來手動測試及執行工作流程

  2. 成功執行之後,請移至企業整合帳戶,並檢查產生的結構描述是否存在。

XML 結構描述範例

如果您了解如何產生 XML 結構描述以便用於建立範例文件,請檢閱下列範例。 這些範例示範如何使用許多類型的承載,包括:

您可以使用選擇性 XML 初構開始 XML 結構描述。 SAP 連接器可搭配或不搭配 XML 初構運作。

<?xml version="1.0" encoding="utf-8">

RFC 要求的 XML 範例

下列範例顯示基本 RFC 呼叫,其中 RFC 名稱為 STFC_CONNECTION。 此要求會使用名為 xmlns= 的預設命名空間。 不過,您可指派和使用命名空間別名,例如 xmmlns:exampleAlias=。 命名空間值是適用於 Microsoft 的 SAP 服務中所有 RFC 的命名空間。 要求具有名為 <REQUTEXT> 的簡單輸入參數。

<STFC_CONNECTION xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
   <REQUTEXT>exampleInput</REQUTEXT>
</STFC_CONNECTION>

下列範例顯示具有資料表參數的 RFC 呼叫。 此範例呼叫及測試 RFC 群組適用於所有 SAP 系統。 資料表參數名為 TCPICDAT。 資料表行類型為 ABAPTEXT,而且此元素會針對資料表中的每一列重複。 此範例包含一行,名為 LINE。 具有資料表參數的要求可以包含任意數目的欄位,其中數字是正整數 (n)。

<STFC_WRITE_TO_TCPIC xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
   <RESTART_QNAME>exampleQName</RESTART_QNAME>
   <TCPICDAT>
      <ABAPTEXT xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
         <LINE>exampleFieldInput1</LINE>
      </ABAPTEXT>
      <ABAPTEXT xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
         <LINE>exampleFieldInput2</LINE>
      </ABAPTEXT>
      <ABAPTEXT xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
         <LINE>exampleFieldInput3</LINE>
      </ABAPTEXT>
   </TCPICDAT>
</STFC_WRITE_TO_TCPIC>

提示

若要檢閱 RFC STFC_WRITE_TO_TCPIC 的結果,請使用 SAP 登入的資料瀏覽器 (T-Code SE16) 和名為 TCPIC 的資料表。

下列範例顯示具有匿名欄位之資料表參數的 RFC 呼叫,這是沒有指派名稱的欄位。 複雜類型會在個別的命名空間之下宣告,其中的宣告會設定目前節點及其所有子元素的新預設值。 此範例使用十六進位代碼 x002F 作為符號 / 的逸出字元,因為此符號保留在 SAP 欄位名稱中。

<RFC_XML_TEST_1 xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
   <IM_XML_TABLE>
      <RFC_XMLCNT xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
         <_x002F_AnonymousField>AQIDBAU=</_x002F_AnonymousField>
      </RFC_XMLCNT>
   </IM_XML_TABLE>
</RFC_XML_TEST_1>

上一個範例也會示範編碼 SAP 資料類型 byteXString 的二進位陣列。 二進位陣列是以 XML 編碼的 base64 (XSD 二進位資料類型 xs:base64Binary)。 在此範例中,範例 base64 字串值會AQIDBAU=解碼為二進位陣列 [01][02][03][04]。 此編碼方式會有所不同,而且比基礎 SAP .NET 連接器的十六進位編碼更節省空間。 使用十六進位編碼時,相同的值會編碼為字串 01020304

注意

使用二進位陣列編碼時請小心,因為十六進位編碼使用 base64 範圍的子集,並顯示為有效的 base64 值。 例如,字串值 01020304 也會解碼為有效的 base64 編碼值,但會產生不同的二進位陣列 [d3][5d][36][d3][7d][38],而不是二進位陣列 [01][02][03][04]

下列範例包含命名空間的前置詞。 您可以一次宣告所有前置詞,也可以將任意數目的前置詞宣告為節點的屬性。 名為 ns0 的 RFC 命名空間別名作為基本類型的根和參數。

注意

複雜類型會在不同的命名空間之下針對具有別名 ns3 的 RFC 類型宣告,而不是使用具有別名 ns0 的一般 RFC 命名空間。

<ns0:BBP_RFC_READ_TABLE xmlns:ns0="http://Microsoft.LobServices.Sap/2007/03/Rfc/" xmlns:ns3="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">
   <ns0:DELIMITER>0</ns0:DELIMITER>
   <ns0:QUERY_TABLE>KNA1</ns0:QUERY_TABLE>
   <ns0:ROWCOUNT>250</ns0:ROWCOUNT>
   <ns0:ROWSKIPS>0</ns0:ROWSKIPS>
   <ns0:FIELDS>
      <ns3:RFC_DB_FLD>
         <ns3:FIELDNAME>KUNNR</ns3:FIELDNAME>
      </ns3:RFC_DB_FLD>
   </ns0:FIELDS>
</ns0:BBP_RFC_READ_TABLE>

BAPI 要求的 XML 範例

下列 XML 範例是呼叫 BAPI 方法的範例要求。

注意

SAP 藉由描述商務物件來回應 RFC RPY_BOR_TREE_INIT (Azure Logic Apps 沒有其輸入篩選條件),讓這些物件可供外部系統使用。 Azure Logic Apps 會檢查輸出資料表 BOR_TREESHORT_TEXT 欄位用於商務物件的名稱。 Azure Logic Apps 無法存取輸出資料表中 SAP 未傳回的商務物件。

如果您使用自訂商務物件,務必在 SAP 中發佈和發行這些商務物件。 否則,SAP 不會在輸出資料表 BOR_TREE 中列出您的自訂商務物件。 直到從 SAP 公開商務物件後,您才能在 Azure Logic Apps 中存取自訂商務物件。

下列範例使用 BAPI 方法 GETLIST 取得銀行清單。 此範例包含銀行的商務物件,名為 BUS1011

<GETLIST xmlns="http://Microsoft.LobServices.Sap/2007/03/Bapi/BUS1011">
   <BANK_CTRY>US</BANK_CTRY>
   <MAX_ROWS>10</MAX_ROWS>
</GETLIST>

下列範例使用 CREATE 方法來建立銀行物件。 此範例使用與上一個範例相同的商務物件,名為 BUS1011。 當您使用 CREATE 方法來建立銀行時,請務必認可您的變更,因為此方法預設不會認可。

提示

確定您的 XML 文件遵循 SAP 系統中設定的任何驗證規則。 例如,在此範例文件中,美國的銀行金鑰 (<BANK_KEY>) 必須是銀行路由號碼,也稱為 ABA 號碼。

<CREATE xmlns="http://Microsoft.LobServices.Sap/2007/03/Bapi/BUS1011">
   <BANK_ADDRESS>
      <BANK_NAME xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc">ExampleBankName</BANK_NAME>
      <REGION xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc">ExampleRegionName</REGION>
      <STREET xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc">ExampleStreetAddress</STREET>
      <CITY xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc">Redmond</CITY>
   </BANK_ADDRESS>
   <BANK_CTRY>US</BANK_CTRY>
   <BANK_KEY>123456789</BANK_KEY>
</CREATE>

下列範例使用銀行路由號碼 (這是 <BANK_KEY> 的值) 取得銀行的詳細資料。

<GETDETAIL xmlns="http://Microsoft.LobServices.Sap/2007/03/Bapi/BUS1011">
   <BANKCOUNTRY>US</BANKCOUNTRY>
   <BANKKEY>123456789</BANKKEY>
</GETDETAIL>

IDoc 要求的 XML 範例

若要產生純文字 SAP IDoc XML 結構描述,請使用 SAP 登入應用程式和 WE60 T-Code。 透過使用者介面存取 SAP 文件,並針對您的 IDoc 類型和延伸模組產生 XSD 格式的 XML 結構描述。 如需一般 SAP 格式和承載及其內建對話方塊的詳細資訊,請檢閱 SAP 文件

此範例會宣告根節點和命名空間。 範例程式碼 http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//700/Send 中的 URI 會宣告下列組態:

  • /IDoc 是所有 IDoc 的根附註。

  • /3 是常見區段定義的記錄類型版本。

  • /ORDERS05 是 IDoc 類型。

  • // 是空的區段,因為沒有 IDoc 延伸模組。

  • /700 是 SAP 版本。

  • /Send 是將資訊傳送至 SAP 的動作。

<ns0:Send xmlns:ns0="http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//700/Send" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization" xmlns:ns1="http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/Common/" xmlns:ns2="http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//700">
   <ns0:idocData>

您可以重複 idocData 節點,以在單一呼叫中傳送一批 IDocs。 在下列範例中,有一個名為 EDI_DC40 的控制項記錄,以及多個資料記錄。

<...>
   <ns0:idocData>
      <ns2:EDI_DC40>
         <ns1:TABNAM>EDI_DC40</ns1:TABNAM>
         <...>
         <ns1:ARCKEY>Cor1908207-5</ns1:ARCKEY>
      </ns2:EDI_DC40>
      <ns2:E2EDK01005>
         <ns2:DATAHEADERCOLUMN_SEGNAM>E23DK01005</ns2:DATAHEADERCOLUMN_SEGNAM>
         <ns2:CURCY>USD</ns2:CURCY>
      </ns2:E2EDK01005>
      <ns2:E2EDK03>
      <...>
   </ns0:idocData>

下列範例顯示範例 IDoc 控制項記錄,其使用名為 EDI_DC 的前置詞。 您必須更新值,以符合您的 SAP 安裝和 IDoc 類型。 例如,您的 IDoc 用戶端代碼可能不是 800。 請連絡您的 SAP 小組,確定您使用的是 SAP 安裝的正確值。

<ns2:EDI_DC40>
   <ns:TABNAM>EDI_DC40</ns1:TABNAM>
   <ns:MANDT>800</ns1:MANDT>
   <ns:DIRECT>2</ns1:DIRECT>
   <ns:IDOCTYP>ORDERS05</ns1:IDOCTYP>
   <ns:CIMTYP></ns1:CIMTYP>
   <ns:MESTYP>ORDERS</ns1:MESTYP>
   <ns:STD>X</ns1:STD>
   <ns:STDVRS>004010</ns1:STDVRS>
   <ns:STDMES></ns1:STDMES>
   <ns:SNDPOR>SAPENI</ns1:SNDPOR>
   <ns:SNDPRT>LS</ns1:SNDPRT>
   <ns:SNDPFC>AG</ns1:SNDPFC>
   <ns:SNDPRN>ABAP1PXP1</ns1:SNDPRN>
   <ns:SNDLAD></ns1:SNDLAD>
   <ns:RCVPOR>BTSFILE</ns1:RCVPOR>
   <ns:RCVPRT>LI</ns1:RCVPRT>

下列範例顯示具有一般區段的範例資料記錄。 此範例使用 SAP 日期格式。 強型別文件可以使用原生 XML 日期格式,例如 2020-12-31 23:59:59

<ns2:E2EDK01005>
   <ns2:DATAHEADERCOLUMN_SEGNAM>E2EDK01005</ns2:DATAHEADERCOLUMN_SEGNAM>
      <ns2:CURCY>USD</ns2:CURCY>
      <ns2:BSART>OR</ns2:BSART>
      <ns2:BELNR>1908207-5</ns2:BELNR>
      <ns2:ABLAD>CC</ns2:ABLAD>
   </ns2>
   <ns2:E2EDK03>
      <ns2:DATAHEADERCOLUMN_SEGNAM>E2EDK03</ns2:DATAHEADERCOLUMN_SEGNAM>
      <ns2:IDDAT>002</ns2:IDDAT>
      <ns2:DATUM>20160611</ns2:DATUM>
   </ns2:E2EDK03>

下列範例顯示具有分組區段的資料記錄。 此記錄包含群組父節點 (名為 E2EDKT1002GRP) 和多個子節點,包括 E2EDKT1002E2EDKT2001

<ns2:E2EDKT1002GRP>
   <ns2:E2EDKT1002>
      <ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
         <ns2:TDID>ZONE</ns2:TDID>
   </ns2:E2EDKT1002>
   <ns2:E2EDKT2001>
      <ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
         <ns2:TDLINE>CRSD</ns2:TDLINE>
   </ns2:E2EDKT2001>
</ns2:E2EDKT1002GRP>

建議的方法是建立 IDoc 識別碼,以搭配 tRFC 使用。 您可以在 SAP 受控連接器中使用 [傳送 IDoc 作業],設定此交易識別碼 (名為 tid)。

下列範例顯示用以設定交易識別碼或 tid 的替代方法。 在此範例中,最後一個資料記錄區段節點和 IDoc 資料節點會關閉。 然後,GUID guid 會作為 tRFC 識別碼來偵測重複項目。

     </E2STZUM002GRP>
  </idocData>
  <guid>8820ea40-5825-4b2f-ac3c-b83adc34321c</guid>
</Send>

下一步