在 Azure Logic Apps 中建立變數,以儲存及傳遞值

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

要在工作流程中儲存和傳遞數值,請建立變數。 變數支援整數、浮點數、布林值、字串、陣列及物件值。

例如,變數可協助您追蹤迴圈的執行次數。 若要遍歷陣列或檢查特定項目,請使用變數參考每個陣列項目的索引號。

建立變數後,選擇一個任務:

必要條件

  • 一個 Azure 帳戶和訂用帳戶。 申請一個免費的 Azure 帳號。

  • Logic 應用程式的工作流程,你想建立變數,包含啟動工作流程的觸發器。

    在你加入建立和處理變數的動作之前,你的工作流程必須 先從觸發器作為 工作流程的第一步開始。

    本指南使用 Azure 入口網站,但你也可以使用 Visual Studio Code 及相應的 Azure Logic Apps 擴充功能來建立邏輯應用程式的工作流程:

處理變數的考量

  • 預設情況下, 每個 迴圈的迭代都是平行執行的。 為了確保迴圈中的變數產生可預測的結果,請依 序執行迴圈。

  • 變數存在且僅在建立變數的工作流程中是全域的。

  • 變數僅限於在該工作流程內於迴圈的各次迭代之間持續存在。

  • 請以變數名稱來參考變數,而不是用產生該變數的動作名稱,這才是通常參考動作輸出的方式。

將變數初始化

要建立變數,請將 初始化變數 動作加入你的工作流程。 你只能在工作流程全域層級宣告變數,不能在作用域、條件和迴圈中宣告。

  1. 在 Azure 入口網站中,在設計工具中開啟邏輯應用程式工作流程。

  2. 在設計器中,依照你的工作流程類型,依照一般步驟加入名為 Initialize 變數 的動作:

  3. 提供有關變數的下列資訊:

    屬性 必填 值 描述
    名稱 是 < 變數名稱> 變數的名稱。
    類型 是 < 變數類型> 變數的資料型態。
    值 無 < 起始值> 你的變數初始值。

    提示:雖然此值為選用,但最佳做法是設定該值,如此您便一律知道變數的起始值。

    若要一次建立多個變數,請選取 新增變數。

    例如,這個 初始化變數 動作包含變數的名稱、資料型態和初始值:

    截圖顯示 Azure 入口網站和一個邏輯應用程式的工作流程,裡面有一個叫 Initialize 變數的動作。

  4. 繼續為案例新增您想要的動作。 當完成設計師工具列時,請選取儲存。

如果你從設計器視圖切換到程式碼檢視,以下範例展示了 初始化變數 動作如何出現在您的工作流程定義中,該定義以 JavaScript 物件符號(JSON)格式呈現:

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ 
            {
               "name": "Count",
               "type": "Integer",
               "value": 0
            }
         ]
      },
      "runAfter": {}
   }
}

下列範例顯示其他變數類型:

布林值變數

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myBooleanVariable",
               "type": "boolean",
               "value": false
            }
         ]
      },
      "runAfter": {}
   }
},

浮點變數

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myFloatVariable",
               "type": "float",
               "value": 1.99999
            }
         ]
      },
      "runAfter": {}
   }
},

字串變數

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myStringVariable",
               "type": "string",
               "value": "lorem ipsum"
            }
         ]
      },
      "runAfter": {}
   }
},

物件變數

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "MyObjectVariable",
               "type": "object",
               "value": {
                  "ProductItem": {
                     "Name": "myProductName",
                     "ProductID": "000000"
                  }
               }
            }
         ]
      },
      "runAfter": {}
   }
},

整數陣列

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": [1, 2, 3]
            }
         ]
      },
      "runAfter": {}
   }
},

字串陣列

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": ["red", "orange", "yellow"]
            }
         ]
      },
      "runAfter": {}
   }
},

取得變數的值

若要檢索或參考變數內容,請使用variables()工作流程設計器與程式碼檢視編輯器中的函式。 當您參考變數,請使用變數的名稱作為標記,而非動作的名稱,這是參考動作輸出的常用方法。

例如,下列運算式會使用 variables() 函數,從 你在本指南中建立的陣列變數 取得項目。 該 string() 函數以字串格式返回變數的內容: "1, 2, 3, red"。

@{string(variables('myArrayVariable'))}

增量變數

若要以特定常數值將變數增加或遞增,請將 [遞增變數] 動作新增至工作流程。 此動作僅適用於整數和浮點數變數。

  1. 在設計器中,依照你的工作流程類型,依照一般步驟加入名為 Increment 變數 的動作:

  2. 針對此動作提供下列資訊:

    屬性 必填 值 描述
    名稱 是 < 變數名稱> 要遞增的變數名稱。
    值 無 < 增量值> 用來遞增變數的值。 預設值是 1。

    提示:雖然此值為選擇性,但最佳做法是設定此值,如此您便一律知道用來遞增變數的特定值。

    下列範例會顯示此動作的範例值:

    截圖顯示 Azure 入口網站和一個邏輯應用程式的工作流程,裡面有一個名為 Increment 變數的動作。

  3. 完成後,請儲存您的工作流程。 在設計師工具列上選取儲存。

如果是從設計工具切換到程式碼檢視,下列範例會顯示 [遞增變數] 動作如何在工作流程定義中顯示,其為 JSON 格式:

"actions": {
   "Increment_variable": {
      "type": "IncrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

範例:用迴圈計算電子郵件附件數量

在這個例子中,你將計數器初始化為零,對每個電子郵件附件增加一次計數器,然後回傳附件總數。

  1. 在 Azure 入口網站中,使用空白工作流程建立邏輯應用程式資源。 新增觸發程序,以檢查是否有新的電子郵件及其附件。

    這個範例使用名為「當新郵件到達時」的Office 365 Outlook觸發器。 設定這個觸發器只在郵件有附件時觸發。 但是,您可以使用任何連接器來檢查帶有附件的新電子郵件,例如 Outlook.com 連接器。

  2. 在觸發器中,針對下列屬性選取 是,以檢查是否有附件,並將這些附件傳遞至您的工作流程:

    • 僅限附有附件
    • 包含附件

    顯示 Azure 入口網站和 Logic Apps 工作流程的螢幕擷取畫面,其中已選取 Office 365 Outlook 觸發程序屬性,以供檢查及包含附件。

  3. 新增初始 化變數 動作 ,建立一個名為 Count 的整數變數,起始於 0。

  4. 在設計器中,依照你的工作流程類型,依照一般步驟加入名為 For each 的動作:

  5. 在流程中,請依照以下步驟操作:

    1. 在名為「 從前一步選擇輸出」 的框中選擇,以查看輸入選項。
    2. 選取閃電圖示以檢視動態內容清單。
    3. 從清單中,在收到新電子郵件時底下,選取 附件。

    顯示 Azure 入口網站和邏輯應用程式工作流程的螢幕擷取畫面,其中含有「For each」迴圈、已開啟的動態內容清單,以及選取的「Attachments」輸出。

    Attachments 屬性會將包含來自觸發程序輸出的電子郵件附件的陣列傳入迴圈,供您的工作流程逐一反覆處理。

  6. 在 針對每一個 迴圈中,選取 新增動作。

  7. 在設計器中,依照你的工作流程類型,依照一般步驟加入名為 Increment 變數 的動作:

    注意

    請確定 [遞增變數] 動作出現在迴圈內。 如果此動作出現在迴圈外,請將此動作拖曳到迴圈中。

  8. 在增量變數動作中,從名稱清單,選擇計數變數。 將 Value 屬性設定為 1。

    螢幕擷取 Azure 入口網站 和邏輯應用程式工作流程,其中包含名為 Count 的選取變數。

  9. 在迴圈下,新增任何向您發送附件數量的動作。 在您的動作中,包括計數變數中的值,例如:

    截圖顯示 Azure 入口網站和邏輯應用的工作流程,並有一個動作會傳送結果。

  10. 完成後,請儲存您的工作流程。 在設計師工具列上選取儲存。

測試工作流程

  1. 若要手動觸發工作流程,請在設計工具工具列上選取 [執行>執行 ] 以手動執行工作流程。

  2. 將一封含有一或多個附件的電子郵件傳送給您在此範例中使用的電子郵件帳戶。

    此步驟會引發工作流程觸發程序,其會建立和執行工作流程執行個體。 因此,工作流程會傳送訊息或電子郵件給您,當中顯示您所傳送電子郵件中的附件數目。

如果是從設計工具切換到程式碼檢視,下列範例會顯示 For each 迴圈如何隨著 [遞增變數] 動作在工作流程定義中顯示,其為 JSON 格式:

"actions": {
   "For_each": {
      "type": "Foreach",
      "actions": {
         "Increment_variable": {
           "type": "IncrementVariable",
            "inputs": {
               "name": "Count",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['Attachments']",
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

遞減變數

若要依特定常數值減少或遞減變數,請遵循遞增變數的步驟,不同之處在於您會改為將 [遞增變數] 動作新增至工作流程。 此動作僅適用於整數和浮點數變數。

下表描述遞減變數動作的資訊:

屬性 必填 值 描述
名稱 是 < 變數名稱> 要減量的變量名稱
值 無 < 遞減值> 用於減量變數的數值。 預設值為一。

提示:雖然可選,但最好將此值設定為最佳做法,以便您隨時知道減量變數的特定值。

如果是從設計工具切換到程式碼檢視,下列範例會顯示 [遞減變數] 動作如何在工作流程定義中顯示,其為 JSON 格式:

"actions": {
   "Decrement_variable": {
      "type": "DecrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

設定變數

若要將不同的值指派給現有的變數,請遵循遞增變數的步驟,但有下列例外:

  1. 找到並選擇設定變數動作。

  2. 針對此動作提供下列資訊:

    屬性 必填 值 描述
    名稱 是 < 變數名稱> 變數名稱的變更。
    值 是 < 新值> 您想指派給變數的值。 確保變數和新值的資料型別相同。 該值是必要的,因為此動作沒有預設值。

    注意

    除非您是要將變數增大或減小,否則變更迴圈內的變數「可能」會造成非預期的結果,因為迴圈預設會以平行方式或並行方式執行。 針對這些情況,請嘗試將迴圈設定成以循序方式執行。 例如,當您想要參考迴圈內的變數值,並預期該迴圈執行個體的開始值和結束值相同時,請依照下列步驟來變更迴圈的執行方式:

    1. 選取迴圈以檢視資訊窗格,然後選取 [設定]。

    2. 在 [ 一般 ] 區段的 [ 並行控制] 底下,將設定從 [關閉] 變更為 [開啟]。

    3. 將 平行度 滑桿拖曳至 1。

如果你從設計器視圖切換到程式碼檢視,以下範例展示了 Set 變數 動作如何在你的工作流程定義中出現,該定義為 JSON 格式,並將變數的當前值改 Count 為另一個值:

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
               "name": "Count",
               "type": "Integer",
               "value": 0
          } ]
      },
      "runAfter": {}
   },
   "Set_variable": {
      "type": "SetVariable",
      "inputs": {
         "name": "Count",
         "value": 100
      },
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

附加至變數

對於儲存字符串或數列的變數,您可以將變數的值插入或追加,作為這些字串或數列中的最後一項。 請依照下列步驟進行 變數遞增 ,但有以下例外:

  1. 視您的變數是字串還是陣列而定,尋找並選取下列其中一個動作:

    • 附加至字串變數
    • 追加數列變數
  2. 提供要附加為字串或陣列中最後一個項目的值。

    屬性 必填 值 描述
    名稱 是 < 變數名稱> 變數名稱的變更。
    值 是 < 追加值> 你想附加的值,可以是任何類型。

如果是從設計工具切換到程式碼檢視,下列範例會顯示 [附加至陣列變數] 動作如何在工作流程定義中顯示,其為 JSON 格式。

下列範例會建立一個陣列變數,然後將另一個值新增為陣列中的最後一個項目。 您的結果是包含下列陣列的更新變數: [1,2,3,"red"]。

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
            "name": "myArrayVariable",
            "type": "Array",
            "value": [1, 2, 3]
         } ]
      },
      "runAfter": {}
   },
   "Append_to_array_variable": {
      "type": "AppendToArrayVariable",
      "inputs": {
         "name": "myArrayVariable",
         "value": "red"
      },
      "runAfter": {
        "Initialize_variable": [ "Succeeded" ]
      }
   }
},