在 Azure Logic Apps 中使用週期性觸發程式排程和執行循環性工作流程

適用于: Azure Logic Apps(取用 + 標準)

若要依排程啟動和執行工作流程,您可以使用一般週期觸發程式作為第一個步驟。 您可以設定開始工作流程的日期、時間和時區,以及重複該工作流程的週期。 下列清單包含此觸發程式支援的一些模式,以及更進階的週期和複雜的排程:

  • 在特定日期和時間執行,然後每隔 n 秒、分鐘、小時、天、周或月重複一次

  • 立即執行,並每隔 n 秒、分鐘、小時、天、周或月重複一次

  • 立即執行,每天重複一或多個特定時間,例如上午 8:00 和下午 5:00。

  • 立即執行,並在特定日重複每週,例如星期六和星期日。

  • 在特定天數和時間立即執行並重複每週,例如星期一到星期五上午 8:00 和下午 5:00。

注意

若要在未來只啟動並執行工作流程一次,請使用名為 Scheduler:Run Once Jobs 的工作流程範本。 此範本會使用要求觸發程式和 HTTP 動作,而不是不支援此週期模式的迴圈觸發程式。 如需詳細資訊,請參閱 執行作業一次。

週期觸發程式未與任何特定服務相關聯,因此您可以搭配幾乎任何工作流程使用觸發程式,例如 取用邏輯應用程式工作流程和標準邏輯應用程式 狀態工作流程 。 標準邏輯應用程式無狀態工作流程目前無法使用 此觸發程式

週期觸發程式是內建排程連接器的一部分,並在 Azure Logic Apps 執行時間原生執行。 如需內建排程觸發程式和動作的詳細資訊,請參閱 使用 Azure Logic Apps 排程和執行循環性自動化、工作和工作流程。

必要條件

新增週期觸發程式

根據您的工作流程是 取用或標準 ,請遵循對應的步驟:

  1. Azure 入口網站 中,開啟邏輯應用程式資源和空白工作流程。

  2. 請遵循下列一般步驟來新增名為 Recurrence 排程 內建觸發程式。

  3. 設定週期的間隔和頻率。 在此範例中,將這些屬性設定為每週執行您的工作流程,例如:

    Screenshot for Consumption workflow designer with Recurrence trigger interval and frequency.

    屬性 JSON 名稱 必要 類型​​ 描述
    間隔 interval Yes 整數 正整數,描述工作流程根據頻率執行的頻率。 以下是最小和最大間隔:

    - 月:1-16 個月
    - 周:1-71 周
    - 天:1-500 天
    - 小時:1-12,000 小時
    - 分鐘:1-72,000 分鐘
    - 秒:1-9,999,999 秒

    例如,如果間隔為 6,且頻率為 「Month」,則週期是每 6 個月一次。
    頻率 frequency Yes String 週期的時間單位:Second、Minute、Hour Day Week Month

    重要 事項:如果您選取 [日 ]、 [周 ] 或 [月 ] 頻率,並指定未來的開始日期和時間,請確定您事先設定週期。 否則,工作流程可能會略過第一個週期。

    - Day :提前至少設定每日週期 24 小時。

    - :設定每週週期,至少提前 7 天。

    - 月份 :設定每月週期至少提前一個月。
  4. 當您使用 週期 觸發程式時,請檢閱下列考慮:

    • 如果您未指定特定的 開始日期和時間 ,即使您的觸發程式週期設定,第一個週期會在儲存工作流程或部署邏輯應用程式資源時立即執行。 若要避免此行為,請提供您希望第一次迴圈執行時的開始日期和時間。

    • 如果您未指定任何其他進階排程選項,例如執行未來週期的特定時間,這些週期會以上次執行時間為基礎。 因此,這些週期的開始時間可能會因為儲存體呼叫期間的延遲等因素而漂移。

    • 若要確定您的工作流程不會錯過週期,特別是當頻率為數天或更長的時間時,請嘗試下列選項:

      • 提供週期的開始日期和時間,以及執行後續週期的特定時間。 您可以使用名為 At 這些小時 At 這些分鐘 的屬性,這些屬性僅適用于 Day Week 頻率。

      • 針對取用邏輯應用程式工作流程,請使用 滑動視窗觸發程式 ,而不是週期觸發程式。

    • 如果您使用 ARM 範本部署已停用的 取用工作流程,除非您在部署前設定開始時間 參數,否則觸發程式會在啟用工作流程時立即引發。

  5. 若要設定進階排程選項,請開啟 [ 新增參數 ] 清單。 選取之後,您選取的任何選項都會出現在觸發程式上。

    屬性 JSON 名稱 必要 類型​​ 描述
    時區 timeZone No String 只有在您指定開始時間時才適用,因為此觸發程式不接受 UTC 位移 。 選取您要套用的時區。
    開始時間 startTime No String 提供開始日期與時間,其未來最多 49 年,且必須遵循 UTC 日期時間格式 的 ISO 8601 日期時間規格 ,但不含 UTC 位移

    如果您選取時區,YYYY-MM-DDThh:mm:ss

    -或-

    如果您未選取時區,YYYY-MM-DDThh:mm:ssZ

    例如,如果您想要 2020 年 9 月 18 日下午 2:00,請指定 「2020-09-18T14:00:00」,然後選取時區,例如太平洋標準時間。 或者,指定 「2020-09-18T14:00:00Z」,而沒有時區。

    重要事項: 如果您未選取時區,則必須在結尾新增字母 「Z」,且沒有任何空格。 這個 「Z」 是指對等 的海時間 。 如果您選取時區值,則不需要將 「Z」 新增至開始 時間 值的結尾。 如果您這樣做,Logic Apps 會忽略時區值,因為 「Z」 表示 UTC 時間格式。

    對於簡單的排程,開始時間是第一次發生,而對於複雜的排程,觸發程式不會比開始時間快點引發。 我可以使用開始日期和時間的方式為何?
    在這幾天 weekDays No 字串或字串陣列 如果您選取 [周],您可以選取一或多個您想要執行工作流程的天數: 星期一、星期二 星期三 星期四 星期五 星期六 星期日
    這些小時 hours No 整數或整數陣列 如果您選取 「Day」 或 「Week」,則可以選取一或多個整數,從 0 到 23 做為您想要執行工作流程的一天小時。 例如,如果您指定 「10」、「12」 和 「14」,則會在一天中的小時取得上午 10 點、下午 12 點和下午 2 點。

    注意 :根據預設,會根據週期開始時計算當天的分鐘數。 若要設定當天的特定分鐘數,例如上午 10:00、下午 12:00 和下午 2:00,請使用名為 的 屬性來 指定這些值。
    在這幾分鐘 minutes No 整數或整數陣列 如果您選取 「Day」 或 「Week」,則可以選取一或多個整數,從 0 到 59 做為您想要執行工作流程的小時分鐘數。

    例如,您可以將 「30」 指定為分鐘標記,並使用前一個範例的一天中數小時,您會收到上午 10:30、下午 12:30 和下午 2:30。

    注意 :有時候,所觸發執行的時間戳記可能會與排程時間最多 1 分鐘不同。 如果您需要將時間戳記完全按照排程傳遞至後續動作,您可以使用範本運算式來據以變更時間戳記。 如需詳細資訊,請參閱 運算式的日期和時間函 式。

    Screenshot for Consumption workflow designer and Recurrence trigger with advanced scheduling options.

    例如,假設今天是 2020 年 9 月 4 日星期五。 下列週期觸發程式不會比指定的開始日期和時間更 早引發 ,也就是 2020 年 9 月 18 日上午 8:00 太平洋時間星期五。 不過,週期排程設定為上午 10:30、下午 12:30 和星期一下午 2:30。 觸發程式第一次引發並建立工作流程實例是在星期一上午 10:30。 若要深入瞭解開始時間的運作方式,請參閱這些 開始時間範例

    未來的運行發生在下午12:30和下午2:30在同一天。 每個週期都會建立自己的工作流程實例。 之後,整個排程下週一會重複一遍。 還有哪些其他範例出現?

    Screenshot showing Consumption workflow and Recurrence trigger with advanced scheduling example.

    注意

    只有在您選取 [日 ] 或 [周 ] 作為頻率時,觸發程式才會顯示指定週期的預覽。

  6. 現在,請繼續使用其他動作來建置您的工作流程。

工作流程定義 - 週期

您可以在取用邏輯應用程式和標準邏輯應用程式中檢閱工作流程的基礎 JSON 定義,以檢視迴圈觸發程式定義 與所選選項的顯示方式 (僅限具狀態)。

根據您的邏輯應用程式是取用或標準,請選擇下列其中一個選項:

  • 用:在設計工具工具列上,選取 [ 程式碼檢視 ]。 若要返回設計工具,請在程式碼檢視編輯器工具列上,選取 [ 設計工具 ]。

  • 標準 :在工作流程功能表上,選取 [ 程式碼檢視 ]。 若要返回設計工具,請在工作流程功能表上選取 [ 設計工具 ]。

下列範例顯示迴圈觸發程式定義如何出現在工作流程的基礎 JSON 定義中:

"triggers": {
   "Recurrence": {
      "type": "Recurrence",
      "recurrence": {
         "frequency": "Week",
         "interval": 1,
         "schedule": {
            "hours": [
               10,
               12,
               14
            ],
            "minutes": [
               30
            ],
            "weekDays": [
               "Monday"
            ]
         },
         "startTime": "2020-09-07T14:00:00Z",
         "timeZone": "Pacific Standard Time"
      }
   }
}

注意

在 [週期觸發程式定義] 中,當迴圈準則中出現任何運算式或參數參考時, evaluatedRecurrence 屬性就會與 屬性一起 recurrence 顯示。 這個 evaluatedRecurrence 屬性代表來自運算式或參數參考的評估值。 如果迴圈準則未指定任何運算式或參數參考, evaluatedRecurrence 則 和 recurrence 屬性都相同。

下列範例示範如何更新觸發程式定義,讓觸發程式在每個月的最後一天只執行一次:

"triggers": {
    "Recurrence": {
        "recurrence": {
            "frequency": "Month",
            "interval": 1,
            "schedule": {
                "monthDays": [-1]
            }
        },
        "type": "Recurrence"
    }
}

觸發週期轉移和漂移 (日光節約時間)

為了排程作業,Azure Logic Apps 會將訊息放入佇列中,並根據上次作業執行的 UTC 時間,以及排定下一個作業執行的 UTC 時間,指定該訊息何時可供使用。 如果您指定週期的開始時間, 請確定您選取時區 ,讓邏輯應用程式工作流程在指定的開始時間執行。 如此一來,邏輯應用程式的 UTC 時間也會轉移以對抗季節性時間變更。 週期性觸發程式會接受您設定的排程,包括您指定的任何時區。

否則,如果您未選取時區,日光節約時間 (DST) 事件可能會影響觸發程式執行的時間。 例如,當 DST 啟動時,開始時間會向前移動一小時,而 DST 結束時則往後移動一小時。 不過,某些時間範圍可能會在時間班次時造成問題。 如需詳細資訊和範例,請參閱 日光節約時間和標準時間的 週期。

下一步