分享方式:


使用 Visual Studio Code 建立對應以在 Azure Logic Apps 中轉換資料

適用於:Azure Logic Apps (標準)

若要在 Azure Logic Apps 工作流程中交換具有不同 XML 或 JSON 格式的訊息,您必須將資料從一種格式轉換成另一種格式,特別是當您在來源和目標結構描述結構之間有落差時。 資料轉換可協助您彌合這些落差。 針對此工作,您必須建立對應,以定義來源和目標結構描述中資料元素之間的轉換。

若要以視覺化方式建立和編輯對應,您可以使用 Visual Studio Code 搭配標準邏輯應用程式專案的內容中的 Azure Logic Apps (標準) 延伸模組。 資料對應程式工具提供使用拖放手勢進行 XSLT 對應和轉換的整合體驗、用於建立運算式的預先建置函式程式庫,以及手動測試您在工作流程中建立和使用的對應方式。

建立對應之後,您可以直接從邏輯應用程式專案中的工作流程或從 Azure 入口網站中的工作流程呼叫該對應。 針對此工作,您可以在工作流程中使用名為 [使用對應程式工具 XSLT 轉換]資料對應程式作業動作。

本操作指南示範如何建立空白資料對應、選擇來源和目標結構描述、選取結構描述元素以開始對應、建立各種對應、儲存及測試您的對應,然後從邏輯應用程式專案中的工作流程呼叫對應。

限制和已知問題

  • 資料對應程式目前只能在 Windows 作業系統上執行的 Visual Studio Code 中運作。

  • 資料對應程式目前只能在 Visual Studio Code 中使用,而不是 Azure 入口網站,而且僅能從標準邏輯應用程式專案內,而不是使用量邏輯應用程式專案。

  • 資料對應程式目前不支援逗號分隔值 (.csv) 檔案。

  • 資料對應程式的程式 [程式碼檢視] 窗格目前為唯讀。

  • 對應版面配置和項目位置目前為自動且為唯讀。

  • 若要呼叫使用資料對應程式工具建立的對應,您只能使用名為 [使用對應程式工具 XSLT 轉換]資料對應程式作業動作。 針對任何其他工具建立的對應,請使用名為 [轉換 XML]XML 作業動作

  • 若要使用您使用資料對應程式工具建立的對應,但在 Azure 入口網站中,您必須將它們直接新增至標準邏輯應用程式資源

必要條件

  • Visual Studio Code 和 Azure Logic Apps (標準) 延伸模組用來建立標準邏輯應用程式工作流程。

    注意

    先前分開的資料對應程式延伸模組,現在會與 Azure Logic Apps (標準) 延伸模組合併。 為了避免衝突,當您安裝或更新 Azure Logic Apps (標準) 延伸模組時,會移除任何現有的資料對應程式延伸模組版本。 在延伸模組安裝或更新之後,請重新啟動 Visual Studio Code。

  • 描述要轉換的資料類型的來源和目標結構描述檔案。 這些檔案可以有下列其中一種格式:

    • 副檔名為 .xsd 的 XML 結構描述定義檔案
    • 副檔名為 .json 的 JavaScript 物件標記法檔案
  • 標準邏輯應用程式專案,其包含至少一個觸發程序的具狀態或無狀態工作流程。 如果您沒有專案,請在 Visual Studio Code 中遵循這些步驟:

    1. 連線至您的 Azure 帳戶 (如果您尚未這樣做)。

    2. 建立本機資料夾、本機標準邏輯應用程式專案,以及具狀態或無狀態工作流程。 在工作流程建立期間,選取 [在目前視窗中開啟]

  • 如果您想要測試對應並檢查轉換是否如預期般運作,請對輸入資料取樣。

  • 若要使用執行 XSLT 函式,您的 XSLT 程式碼片段必須存在於使用 .xml.xslt 副檔名的檔案中。 您必須將 XSLT 程式碼片段放在本機專案資料夾結構的 InlineXslt 資料夾中:Artifacts>DataMapper>Extensions>InlineXslt。 如果此資料夾結構不存在,請建立遺漏的資料夾。

建立資料對應

  1. 在 Visual Studio Code 左側功能表上,選取 Azure 圖示。

  2. Azure 窗格中,於 [資料對應程式] 區段底下,選取 [建立新的資料對應]

    Screenshot showing Visual Studio Code with Data Mapper tool, Azure window open, and selected button for Create new data map.

  3. 提供資料對應的名稱。

  4. 請遵循這些步驟來指定您的來源和目標結構描述:

    1. 在對應介面上,選取 [新增來源結構描述]

      Screenshot showing Visual Studio Code with Data Mapper open, new data map, and selected option for Add a source schema.

    2. 在開啟的 [設定] 窗格中,選取 [新增] > [瀏覽]

    3. 尋找並選取您的來源結構描述檔案,然後選取 [新增]

      如果您的來源結構描述未出現在 [開啟] 視窗中,請從檔案類型清單將 [XSD 檔案 (*.xsd)] 變更為 [所有檔案 (*.*)]

      對應介面現在會顯示來自來源結構描述的資料類型。 針對本指南中的範例,

    4. 在對應介面上,選取 [新增目標結構描述]

    5. 在開啟的 [設定] 窗格中,選取 [新增] > [瀏覽]

    6. 尋找並選取您的目標結構描述檔案,然後選取 [新增]

      如果您的目標結構描述未出現在 [開啟] 視窗中,請從檔案類型清單將 [XSD 檔案 (*.xsd)] 變更為 [所有檔案 (*.*)]

      對應介面現在會顯示來自目標結構描述的資料類型。

    或者,您也可以在本機將來源和目標結構描述檔案新增至邏輯應用程式專案的 [成品] / [結構描述] 資料夾中,使得它們會出現在 Visual Studio Code 中。 在此情況下,您可以選取 [選取現有],而不是 [新增],在 [設定] 窗格的資料對應程式工具中指定來源和目標結構描述。

    完成時,您的對應會類似下列範例:

    Screenshot showing the Data Mapper open and data map with sample source and target schemas.

下表描述可能出現在結構描述中的可能資料類型:

符號 類型 其他資訊
Icon representing an Array data type. 陣列 包含項目或重複的項目節點
Icon representing a Binary data type. 二進位
Icon representing a Bool data type. Bool 僅限 True 或 false
Icon representing a Complex data type. Complex 具有子系屬性的 XML 物件,類似於物件 JSON 類型
Icon representing a DateTime data type. Datetime
Icon representing a Decimal data type. Decimal
Icon representing an Integer data type. 整數 僅限整數
Icon representing the NULL symbol. Null 不是資料類型,但會在錯誤或無效的類型存在時出現
Icon representing a Number data type. 數字 JSON 整數或十進位
Icon representing an Object data type. Object 具有子系屬性的 JSON 物件,類似於複雜 XML 類型
Icon representing a String data type. String

若要沿著對應移動,您有下列選項:

  • 若要移動瀏覽,請將指標沿著對應介面拖曳。 或者,按住滑鼠滾輪,同時移動滑鼠或軌跡球。

  • 將一個層級向下移至對應之後,在對應的左下角,隨即會出現導覽列,您可以從下列選項中選取:

    Screenshot showing map navigation bar.

    選項 替代手勢
    縮小 在對應介面上,按 SHIFT+選取兩次。
    -或-
    使用滑鼠滾輪向下捲動。
    放大 在對應介面上,選取兩次。
    -或-
    使用滑鼠滾輪向上捲動。
    縮放至最適大小
    顯示 (隱藏) 迷你對應
  • 若要在對應上上移一個層級,請在對應頂端的階層連結路徑上,選取上一個層級。

選取要對應的目標和來源元素

  1. 在對應介面上,從右側開始,在目標結構描述區域中,選取您要對應的目標元素。 如果您想要的元素是父元素的子系,請先尋找並展開該父元素。

  2. 現在,在左側,從來源結構描述區域,選取 [選取元素]

  3. 在出現的 [來源結構描述] 視窗中,選取一或多個要在對應上顯示的來源元素。

    • 若要包含父代和直接子系,請開啟父代的捷徑功能表,然後選取 [新增子系]

    • 若要包含父代和該父代的所有子系,包括任何次父代,請開啟最上層父代的捷徑功能表,然後選取 [新增子系 (遞迴)]

  4. 完成時,您可以關閉來源結構描述視窗。 您一律可以稍後新增更多來源元素。 在對應上,於左上角選取 [顯示來源結構描述] (Icon for Show source schema.)。

建立元素之間的直接對應

若要在來源和目標結構描述中具有相同類型的元素之間直接轉換,請遵循下列步驟:

  1. 若要在建立對應時檢閱程式碼中發生的情況,請在對應的右上角選取 [顯示程式碼]

  2. 如果您尚未這麼做,請在對應上選取目標元素,然後選取您要對應的來源元素

  3. 將指標移至來源元素上方,讓圓形和加號 (+) 同時出現。

    Screenshot showing the data map and starting a mapping between EmployeeID and ID in the source and target schema, respectively.

  4. 將線條拖曳至目標元素,使線條連接到出現的圓形。

    Screenshot showing the data map and ending a mapping between EmployeeID and ID in the source and target schema, respectively.

    您現在已建立這兩個元素之間的直接對應。

    Screenshot showing the data map and a finished mapping between EmployeeID and ID in the source and target schema, respectively.

    程式碼檢視視窗會反映您所建立的對應關聯性:

    Screenshot showing code view with direct mapping between EmployeeID and ID in the source and target schema, respectively.

注意

如果您在資料類型不符的元素之間建立對應,則目標元素上會出現警告,例如:

Screenshot showing direct mapping between mismatching data types.

建立元素之間的複雜對應

如需來源和目標結構描述中元素之間的更複雜的轉換,例如您想要合併或具有不同資料類型的元素,您可以使用一或多個函式來執行該轉換的工作。

下表列出您可以使用的可用函式群組和範例函式:

群組 函式範例
集合 Average、Count、Direct Access、Distinct values、Filter、Index、Join、Maximum、Minimum、Reverse、Sort、Subsequence、Sum
轉換 To date、To integer、To number、To string
日期和時間 加上天數
邏輯比較 Equal、Exists、Greater、Greater or equal、If、If else、Is nil、Is null、Is number、Is string、Less、Less or equal、Logical AND、Logical NOT、Logical OR、Not equal
數學 Absolute、Add、Arctangent、Ceiling、Cosine、Divide、Exponential、Exponential (base 10)、Floor、Integer divide、Log、Log (base 10)、Module、Multiply、Power、Round、Sine、Square root、Subtract、Tangent
String Code points to string、Concat、Contains、Ends with、Length、Lowercase、Name、Regular expression matches、Regular expression replace、Replace、Starts with、String to code-points、Substring、Substring after、Substring before、Trim、Trim left、Trim right、Uppercase
Utility Copy、Error、Execute XPath、Format date-time、Format number、Run XSLT

在對應上,函式的標籤看起來類似下列範例,並且會根據函式群組進行色彩編碼。 在函式名稱的左側,會顯示函式的符號。 在函式名稱的右側,會顯示函式輸出資料類型的符號。

Screenshot showing example function label.

新增不含對應關聯性的函式

本節中的範例會將來源元素類型從 String 類型轉換成 DateTime 類型,其符合目標元素類型。 範例會使用可接受單一輸入的 To date 函式。

  1. 若要在建立對應時檢閱程式碼中發生的情況,請在對應的右上角選取 [顯示程式碼]

  2. 如果您尚未這麼做,請在對應上選取目標元素,然後選取您要對應的來源元素

  3. 在對應的左上角,選取 [顯示函式] (Icon for Show functions.)。

    Screenshot showing source and target schema elements plus the selected function, Show functions.

  4. 從開啟的函式清單中,尋找並選取您想要使用的函式,以將函式新增至對應。 如果函式未顯示在對應上,請嘗試縮小對應介面。

    此範例會選取 To date 函式。 您也可以以相同方式尋找並選取任何自訂函式。 如需詳細資訊,請參閱建立自訂函式

    Screenshot showing the selected function named To date.

    注意

    如果在將函式新增至對應時,對應線條不存在或未選取,則函式會出現在對應上,但與任何元素或其他函式中斷連線,例如:

    Screenshot showing the disconnected function, To date.

  5. 展開函式圖形以顯示函式的詳細資料和連接點。 若要展開函式圖形,請選取圖形內部。

  6. 將函式連接到來源和目標元素。

    1. 在來源元素與函式左邊緣之間拖曳並繪製線條。 您可以從來源元素或從函式開始。

      Screenshot showing start mapping between source element and function.

    2. 在函式右邊緣與目標元素之間拖曳並繪製線條。 您可以從目標元素或從函式開始。

      Screenshot showing finish mapping between function and target element.

  7. 在函式的 [屬性] 索引標籤上,確認或編輯要使用的輸入。

    Screenshot showing Properties tab for the function, To date.

    對於某些資料類型,例如陣列,轉換的範圍可能也會顯示可用。 此範圍通常是緊接的元素,例如陣列,但在某些情況下,範圍可能會超出緊接的元素。

    程式碼檢視視窗會反映您所建立的對應關聯性:

    Screenshot showing code view with direct mapping relationship between source and target elements.

例如,若要逐一查看陣列項目,請參閱在陣列之間建立迴圈。 若要在元素的值符合條件時執行工作,請參閱在元素之間新增條件

將函式新增至現有的對應關聯性

當來源和目標元素之間已存在對應關聯性時,您可以遵循下列步驟來新增函式:

  1. 在對應上,選取您所建立對應的線條。

  2. 將指標移至選取的線條上方,然後選取 出現的 [插入函式] 加號 (+),例如:

    Screenshot shows Visual Studio Code with elements from source and target schemas with mapping relationship and option to Insert function.

  3. 從開啟的函式清單中,尋找並選取您想要使用的函式。

    函式會出現在對應上,而且會在來源和目標元素之間自動連接。

新增具有多個輸入的函式

本節中的範例會串連多個來源元素類型,使得您可以將結果與目標元素類型對應。 範例會使用可接受多個輸入的 Concat 函式。

  1. 若要在建立對應時檢閱程式碼中發生的情況,請在對應的右上角選取 [顯示程式碼]

  2. 如果您尚未這麼做,請在對應上選取目標元素,然後選取您要對應的來源元素

  3. 在對應的左上角,選取 [顯示函式] (Icon for Show functions.)。

    Screenshot showing source and target schema elements and the selected function named Show functions.

  4. 從開啟的函式清單中,尋找並選取您想要使用的函式,以將函式新增至對應。 如果函式未顯示在對應上,請嘗試縮小對應介面。

    此範例會選取 Concat 函式:

    Screenshot showing the selected function named Concat.

    注意

    如果在將函式新增至對應時,對應線條不存在或未選取,則函式會出現在對應上,但與任何元素或其他函式中斷連線。 如果函式需要設定,則函式右上角會出現一個紅點,例如:

    Screenshot showing the disconnected function, Concat.

  5. 展開函式圖形以顯示函式的詳細資料和連接點。 若要展開函式圖形,請選取圖形內部。

  6. 在函式資訊窗格中,於 [屬性] 索引標籤的 [輸入] 底下,選取要作為輸入的來源資料元素。

    本範例會選取 FirstNameLastName 來源元素作為函式輸入,其會在對應上自動新增個別連線。

    Screenshot showing multiple source data elements selected as function inputs.

  7. 若要完成對應,請在函式的右邊緣與目標元素之間拖曳並繪製線條。 您可以從目標元素或從函式開始。

    Screenshot showing finished mapping from function with multiple inputs to target element.

    程式碼檢視視窗會反映您所建立的對應關聯性:

    Screenshot showing code view with complex mapping relationship between source and target elements.

在陣列之間建立迴圈

如果您的來源和目標結構描述包含陣列,您可以建立迴圈對應關聯性,逐一查看這些陣列中的項目。 本節中的範例會循序處理 Employee 來源陣列和 Person 目標陣列。

  1. 若要在建立對應時檢閱程式碼中發生的情況,請在對應的右上角選取 [顯示程式碼]

  2. 在對應上,於目標結構描述區域中,選取您要對應的目標陣列元素和目標陣列項目元素

  3. 在對應上,於目標結構描述區域中,展開目標陣列元素和陣列項目。

  4. 在來源結構描述區域中,將來源陣列元素和陣列項目元素新增至對應。

  5. 在來源和目標元素之間建立直接對應

    Screenshot showing the data map and drawing a connection between Name array items in the source and target arrays, Employee and Person, respectively.

    當您第一次在相符的陣列項目配對之間建立對應關聯性時,會自動在父代陣列級建立對應關聯性。

    Screenshot showing loop mapping between the Name array items plus the source and target arrays, Employee and Person, respectively.

    程式碼檢視視窗會反映您所建立的對應關聯性:

    Screenshot showing code view with looping relationship between source and target arrays, Employee and Person, respectively.

  6. 繼續對應其他陣列元素。

    Screenshot showing continue looping mapping between other array items in source and target arrays.

設定條件和工作以在元素之間執行

若要新增會評估條件並在符合條件時執行工作的對應關聯性,您可以使用多個函式,例如 If 函式、比較函式如 Greater,以及要執行的工作,例如 Multiply

本節中的範例會使用下列函式,計算購買數量超過 20 個項目時要套用的折扣:

  • Greater:檢查項目數量是否大於 20。
  • If:檢查 Greater 函式是否傳回 true。
  • Multiply:將項目價格乘以 10% 和項目數量來計算折扣。
  1. 若要在建立對應時檢閱程式碼中發生的情況,請在對應的右上角選取 [顯示程式碼]

  2. 如果您尚未這麼做,請在對應上選取目標元素,然後選取您要對應的來源元素

    此範例會選取下列元素:

    Screenshot showing the data map and elements to map.

  3. 在對應的左上角,選取 [顯示函式] (Icon for Show functions.)。

  4. 將下列函式新增至對應:GreaterIfMultiply

  5. 展開所有函式圖形以顯示函式的詳細資料和連接點。

  6. 連接來源元素、函式和目標元素,如下所示:

    • 來源結構描述的 ItemPrice 元素至目標結構描述的 ItemPrice 元素
    • 來源結構描述的 ItemQuantity 元素至 Greater 函式的 Value 欄位
    • Greater 函式的輸出至 If 函式的 Condition 欄位
    • 來源結構描述的 ItemPrice 元素至 Multiply 函式的 Multiplicand 0* 欄位
    • Multiply 函式的輸出至 If 函式的 Value 欄位
    • If 函式的輸出至目標結構描述的 ItemDiscount 元素

    注意

    If 函式中,ANY 字組會出現在函式名稱右邊,表示您可以將輸出值指派給任何項目。

  7. 在下列函式的 [屬性] 索引標籤上,指定下列值:

    函式 輸入參數和值
    大於 - #1:來源元素名為 ItemQuantity
    - #2: 20
    乘積 - 被乘數 #1:來源元素名為 ItemPrice
    - 被乘數 #2:.10
    If - 條件is-greater-than(ItemQuantity,20)
    - multiply(ItemPrice, .10)

    下圖顯示完成的範例:

    Screenshot showing finished condition example.

    程式碼檢視視窗會反映您所建立的對應關聯性:

    Screenshot showing code view with conditional mapping between source and target elements using the functions, Greater, If, and Multiply.

儲存您的對應

完成時,在對應工具列上,選取 [儲存]

Visual Studio Code 會將對應儲存為下列成品:

  • Artifacts>MapDefinitions 專案資料夾中的 <your-map-name>.yml 檔案
  • Artifacts>Maps 專案資料夾中的 <your-map-name>.xslt 檔案

隨時產生 XSLT 檔案

若要隨時產生 <your-map-name>.xslt 檔案,請在對應工具列上選取 [產生 XSLT]

測試您的對應

若要確認轉換如預期般運作,您需要範例輸入資料。

  1. 測試對應之前,請務必產生最新的 <your-map-name>.xslt 檔案

  2. 在您的對應工具列上,選取 [測試]

  3. 在 [測試對應] 窗格的 [輸入] 視窗中,貼上您的範例輸入資料,然後選取 [測試]

    測試窗格會切換至 [輸出] 索引標籤,並顯示測試的狀態碼和回應本文。

從專案中的工作流程呼叫您的對應

  1. 在 Visual Studio Code 左側功能表上,選取 [總管] (檔案圖示) 以檢視邏輯應用程式專案結構。

  2. 展開具有您的工作流程名稱的資料夾。 從 workflow.json 檔案的捷徑功能表中,選取 [開啟設計工具]

  3. 在工作流程設計工具上,遵循下列一般步驟,來新增名為使用對應程式工具 XSLT 轉換資料對應程式作業內建動作

  4. 在設計工具上,選取 [使用資料對應程式 XSLT 轉換] 動作。

  5. 在出現的動作資訊窗格中,指定 [內容] 值,並將 [對應來源] 設定為 [邏輯應用程式]。 從 [對應名稱] 清單中,選取您想要使用的對應檔案 (.xslt)。

    Screenshot shows Visual Studio Code, Standard workflow designer, with selected action named Transform using Data Mapper XSLT and action properties.

    若要在 Azure 入口網站中使用相同的使用資料對應程式 XSLT 轉換動作,您必須將對應新增至標準邏輯應用程式資源

建立自訂函式

若要建立可搭配資料對應程式工具使用的您自己的函式,請遵循下列步驟:

  1. 建立 XML (.xml) 檔案,其具有可描述函式用途的有意義名稱。

    如果您有多個相關函式,則可以針對這些函式使用單一檔案。 雖然您可以使用任何檔案名稱,但有意義的檔案名稱或類別可讓您的函式更容易識別、尋找和探索。

  2. 在您的 XML 檔案中,您必須針對函式定義使用下列結構描述:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <xs:element name="customfunctions">
          <xs:complexType>
             <xs:sequence>
                <xs:element maxOccurs="unbounded" name="function">
                   <xs:complexType>
                      <xs:sequence>
                         <xs:element maxOccurs="unbounded" name="param">
                            <xs:complexType>
                                <xs:attribute name="name" type="xs:string" use="required" />
                                <xs:attribute name="as" type="xs:string" use="required" />
                            </xs:complexType>
                         </xs:element>
                         <xs:any minOccurs="0" />
                      </xs:sequence>
                      <xs:attribute name="name" type="xs:string" use="required" />
                      <xs:attribute name="as" type="xs:string" use="required" />
                      <xs:attribute name="description" type="xs:string" use="required" />
                   </xs:complexType>
                </xs:element>
             </xs:sequence>
          </xs:complexType>
       </xs:element>
    </xs:schema>
    

    每個名為 "function" 的 XML 元素都會實作 XSLT3.0 樣式函式,並具有幾個屬性。 資料對應程式函式清單包含函式名稱、描述、參數名稱和參數類型。

    下列範例顯示 SampleFunctions.xml 檔案的實作:

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <customfunctions>
       <function name="age" as="xs:float" description="Returns the current age.">
          <param name="inputDate" as="xs:date"/> 
          <value-of select="round(days-from-duration(current-date() - xs:date($inputDate)) div 365.25, 1)"/>
       </function> 
       <function name="custom-if-then-else" as="xs:string" description="Evaluates the condition and returns corresponding value.">
          <param name="condition" as="xs:boolean"/>
          <param name="thenResult" as="xs:anyAtomicType"/>
          <param name="elseResult" as="xs:anyAtomicType"/>
          <choose>
             <when test="$condition">
                <value-of select="$thenResult"></value-of>
             </when>
             <otherwise>
                <value-of select="$elseResult"></value-of>
             </otherwise>
          </choose>
       </function>
    </customfunctions>
    
  3. 在您的本機電腦上,開啟標準邏輯應用程式專案的資料夾。

  4. 開啟 Artifacts 資料夾,並建立下列資料夾結構 (如果不存在):DataMapper>Extensions>Functions

  5. Functions 資料夾中,儲存函式的 XML 檔案。

  6. 若要在資料對應程式工具的函式清單中尋找您的自訂函式,請搜尋該函式,或展開 [自訂函式] 集合。

下一步