使用 Azure Logic Apps 建立迴圈以在工作流程中重複動作
適用於:Azure Logic Apps (使用量 + 標準)
Azure Logic Apps 包含可在工作流程中使用的下列迴圈動作:
若要對陣列中的項目重複一或多個動作,請將 For each 動作新增至您的工作流程。
此外,如果您的觸發程序接收到陣列,並想要針對每個陣列項目執行反覆運算,您可以使用 SplitOn 觸發屬性將該陣列解除批次。
若要重複一或多個動作,直到條件符合或狀態變更為止,請將 Until 動作新增至您的工作流程。
工作流程會先執行迴圈內的所有動作,然後檢查條件或狀態。 如果符合條件,則迴圈會停止。 否則,迴圈會重複。 如需工作流程可擁有的 Until 迴圈數目的預設值和上限,請參閱並行、迴圈和解除批次處理限制。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。
邏輯應用程式工作流程的相關基本知識
For each
For each 動作僅適用陣列,並且會在陣列中的每個項目上重複一或多個動作。 下列清單包含當您想要使用 For each 動作時的一些考量:
For each 動作可以處理數目有限的陣列項目。 如需了解此限制,請參閱並行、迴圈和解除批次處理限制。
依預設,For each 動作中的迴圈或反覆運算會同時平行執行。
此行為不同於 Power Automate 的套用至每個迴圈,其中反覆項目一次執行一個,或依序執行。 不過,您可以設定 For each 反覆運算的順序。 例如,如果您想要使用 Delay 動作暫停 For each 動作中的下一個反覆運算,您必須設定每個反覆運算以循序執行。
作為預設行為的例外狀況,巢狀 For each 動作的反覆運算一律會循序執行,而不是平行執行。 若要針對巢狀迴圈中的項目平行執行作業,請建立和呼叫子系邏輯應用程式工作流程。
若要在每個反覆運算期間,從針對變數所執行的作業獲得可預測的結果,請循序執行這些反覆運算。 例如,當同時執行的反覆運算結束時,遞減變數、遞減變數和附加至變數作業會傳回可預測的結果。 不過,在並行執行迴圈中的每個反覆項目執行期間,這些作業可能會傳回無法預測的結果。
For each 迴圈中的動作會使用
item()
函式來參考和處理陣列中的每個項目。 如果您指定的資料不是在陣列中,則工作流程將會失敗。
下列範例工作流程會傳送網站 RSS 摘要的每日摘要。 工作流程會使用對為每個新項目傳送電子郵件的 For each 動作。
根據您是否有使用量或標準工作流程,遵循對應的步驟:
在 Azure 入口網站中,使用下列步驟以指定的順序建立範例使用量邏輯應用程式工作流程:
名為摘要項目發佈時的 RSS 觸發程序
如需詳細資訊,請遵循這些一般步驟來新增觸發程序。
名為傳送電子郵件的 Outlook.com 或 Office 365 Outlook 動作
如需詳細資訊,請遵循這些一般步驟來新增動作。
遵循相同的一般步驟,在您的工作流程中的 RSS 觸發程序與傳送電子郵件動作之間新增 For each 動作。
現在建置迴圈:
在 [選取先前步驟中的輸出] 方塊內部選取,讓動態內容清單開啟。
在 [新增動態內容] 清單中,從 [摘要項目發佈時] 區段選取 [摘要連結],這是 RSS 觸發程序的陣列輸出。
注意
如果 [摘要連結] 輸出未出現,請在觸發程序區段標籤旁,選取 [顯示較多]。 從動態內容清單中,您可以選取僅限先前步驟中的輸出。
完成時,選取的陣列輸出的顯示如下範例所示:
若要在每個陣列項目上執行現有的動作,請將 [傳送電子郵件] 動作拖曳至 For each 迴圈。
現在,您的工作流程看起來類似下列範例:
完成後,請儲存您的工作流程。
若要手動測試工作流程,請在設計工具的工具列上,選取 [執行觸發程序] > [執行]。
For each 動作定義 (JSON)
如果是在程式碼檢視中作業,可以在工作流程的 JSON 定義中定義 For_each
動作,例如:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{item()}",
"Subject": "New CNN post @{triggerBody()?['publishDate']}",
"To": "me@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach"
}
},
For each:循序執行
依預設,For each 迴圈中的反覆運算會同時平行執行。 不過,當您預期有可預測結果但在迴圈內有巢狀迴圈或變數時,您必須一次或循序執行這些迴圈。
在 For each 動作的右上角,選取省略符號 (...) > [設定]。
在 [並行控制] 下,將設定從 [關閉] 變更為 [開啟]。
將 [平行處理原則的程度] 滑桿移至 1,然後選取 [完成]。
For each 動作定義 (JSON):循序執行
如果是在程式碼檢視中處理工作流程 JSON 定義中的 For_each
動作,您可以藉由新增 operationOptions
參數來使用 Sequential
選項,例如:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
直到
Until 動作會執行並重複一或多個動作,直到符合所需的指定條件為止。 如果符合條件,則迴圈會停止。 否則,迴圈會重複。 如需工作流程可擁有的 Until 動作或反覆運算數目的預設值和上限,請參閱並行、迴圈和解除批次處理限制。
下列清單包含您可以在其中使用 Until 動作的一些常見案例:
呼叫端點,直到您獲得想要的回應。
在資料庫中建立記錄。 等到該記錄中的特定欄位獲得核准。 繼續處理。
在下列範例工作流程中,從每天上午 8:00 開始,Until 動作會遞增變數,直到變數的值等於 10 為止。 接著,工作流程會傳送用來確認目前值的電子郵件。
注意
此範例使用 Office 365 Outlook,但您可以使用 Azure Logic Apps 支援的任何電子郵件提供者。 如果您使用其他電子郵件帳戶,整體步驟將維持不變,但您的 UI 外觀可能會略有不同。
在 Azure 入口網站中,使用空白工作流程建立使用量邏輯應用程式資源。
在設計工具中,遵循這些一般步驟,將名為排程的定期內建觸發程序新增至您的工作流程。
在定期觸發程序中,指定要觸發程序引發的間隔、頻率和小時。
屬性 值 間隔 1 頻率 Day 在這幾小時內 8 若要新增[在這幾小時內] 參數,請開啟 [新增參數] 清單,並選取 [在這幾小時內],其只會在您將 [頻率] 設定為 [天] 之後出現。
當您完成時,定期觸發程序看起來類似下列範例:
在觸發程序底下,遵循這些一般步驟,將名為初始化變數的變數內建動作新增至您的工作流程。
在 [初始化變數] 動作中,提供下列值:
屬性 數值 描述 名稱 限制 變數的名稱 類型 整數 變數的資料類型 值 0 變數的起始值 在 [初始化變數] 動作底下,遵循這些一般步驟,將名為 Until 的控制內建動作新增至您的工作流程。
在 Until 動作中,提供下列值來設定迴圈的停止條件。
在名為 [選擇值] 的最左側方塊內選取,其會自動開啟動態內容清單。
從清單的 [變數] 底下,選取名為 Limit 的變數。
從中間的運算子清單中,選取 [等於] 運算子。
在名為 [選擇值] 的最右側方塊中,輸入 10 作為比較值。
在 Until 動作內,選取 [新增動作]。
在 [選擇作業] 搜尋方塊中,遵循這些一般步驟,將名為遞增變數的變數內建動作新增至 Until 動作。
在 [遞增變數] 動作中,提供下列值,以將 Limit 變數的值遞增 1:
屬性 值 名稱 選取 Limit 變數。 值 1 在 Until 動作外部和下方,遵循這些一般步驟,新增傳送電子郵件的動作。
此範例會繼續進行名為傳送電子郵件的 Office 365 Outlook 動作。
在電子郵件動作中,提供下列值:
屬性 數值 Description 目標 <email-address@domain> 收件者的電子郵件地址。 若要進行測試,請使用自己的電子郵件地址。 主體 "Limit" 變數的目前值為:Limit 電子郵件主旨。 針對此範例,請確定您包含 Limit 變數,以確認目前的值符合您的指定條件:
1.在 [主旨] 方塊內選取,讓動態內容清單顯示。
2.在動態內容清單中,於 [變數] 區段標頭旁,選取 [顯示較多]。
3.選取 Limit。本文 <email-content> 您想要傳送的電子郵件訊息內容。 針對此範例,輸入任何您要的文字。 完成時,您的電子郵件動作會類似下列範例:
儲存您的工作流程您
測試工作流程
若要手動測試邏輯應用程式工作流程,請根據您有使用量或標準邏輯應用程式,遵循相關步驟。
當您的工作流程開始執行之後,您會收到電子郵件及您指定的內容:
避免無止盡的迴圈
Until 動作會根據下列屬性停止執行,您可以在動作中選取 [變更限制] 來檢視。 請確定您已據以設定這些屬性值:
屬性 | 描述 |
---|---|
Count | 迴圈結束前可執行的反覆運算數目上限。 如需工作流程可擁有的 Until 動作數目的預設值和上限,請參閱並行、迴圈和解除批次處理限制。 |
逾時 | Until 動作,包括所有反覆運算,在迴圈結束之前執行的時間上限。 此值是以 ISO 8601 格式指定,而且會使用 For each 反覆運算進行評估。 如果迴圈中有任何動作所花費的時間超過逾時限制,目前的反覆運算並不會停止。 不過,下一個反覆運算不會開始,因為符合逾時限制條件。 如需逾時值的預設值和上限,請參閱並行、迴圈和解除批次處理限制. |
"Until" 定義 (JSON)
如果是在程式碼檢視中作業,可以在工作流程的 JSON 定義中定義 Until
動作,例如:
"actions": {
"Initialize_variable": {
// Definition for initialize variable action
},
"Send_an_email": {
// Definition for send email action
},
"Until": {
"type": "Until",
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Limit",
"value": 1
},
"runAfter": {}
}
},
"expression": "@equals(variables('Limit'), 10)",
// To prevent endless loops, an "Until" loop
// includes these default limits that stop the loop.
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
}
}
}
此範例 Until 迴圈會呼叫 HTTP 端點,其會建立資源。 當 HTTP 回應本文傳回且狀態為 Completed
時,迴圈就會停止。 若要避免無止盡迴圈,迴圈也會在達到下列任一條件時停止:
迴圈已依
count
屬性所指定的值執行了 10 次。 預設值為 60 次。迴圈已依
timeout
屬性所指定的值 (ISO 8601 格式) 執行了兩個小時。 預設為 1 小時。
"actions": {
"myUntilLoopName": {
"type": "Until",
"actions": {
"Create_new_resource": {
"type": "Http",
"inputs": {
"body": {
"resourceId": "@triggerBody()"
},
"url": "https://domain.com/provisionResource/create-resource",
"body": {
"resourceId": "@triggerBody()"
}
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(triggerBody(), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}