使用 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. 遵循以下一般步驟以新增名為定期排程內建觸發程序。

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

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

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

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

    例如,如果 interval 是 6,而 frequency 是「月」,則週期為每隔 6 個月。
    頻率 frequency Yes String 重複的時間單位:分鐘小時

    重要:如果您選取 [日]、[週] 或 [月] 的頻率,並指定未來的開始日期和時間,請務必提前設定週期。 否則,工作流程可能錯過第一個週期。

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

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

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

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

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

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

      • 提供該循環週期的開始日期和時間,以及執行後續週期的特定時間。 您可以使用名為 [在這些小時] 和 [在這些分鐘] 的內容,這些內容僅適用於的頻率。

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

    • 如果您部署已停用的「使用量」工作流程,具有使用 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 整數或整數陣列 如果選取了 [日] 或 [週],您可以從 0 到 23 選取一或多個整數,來表示您想要在當天的哪幾個整點執行工作流程。 例如,如果您指定 "10"、"12" 及 "14",就會得出上午 10 點、下午 12 點及下午 2 點作為當天的小時。

    注意:根據預設,會根據定期開始時計算當天的分鐘數。 若要設定當天的特定分鐘數,例如上午 10:00、中午 12:00 和下午 2:00,請使用名為 [在這些分鐘] 的內容來指定這些值。
    在這幾分鐘內 minutes No 整數或整數陣列 如果您選取 [天] 或 [週],可以選取從 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 屬性代表運算式或參數參考中的評估值。 如果週期性準則未指定任何運算式或參數參考,則 evaluatedRecurrencerecurrence 屬性會相同。

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

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

觸發程序週期移位和漂移 (日光節約時間)

為了排程作業,Azure Logic Apps 會將需要處理的訊息放入佇列中,並根據上次作業執行的 UTC 時間,以及排定下一個作業執行的 UTC 時間,指定該訊息何時出現。 如果您指定週期的開始時間,「請務必選取時區」,讓邏輯應用程式工作流程在指定的開始時間執行。 如此,邏輯應用程式的 UTC 時間也會調整以抵消季節性時間變更。 週期性觸發程序會遵守您設定的排程,包括您指定的任何時區。

否則,如果您未選取時區,日光節約時間 (DST) 事件可能影響觸發程序何時執行。 例如,DST 開始時,開始時間會調快一小時,DST 結束時則調慢一小時。 不過,某些時間範圍可能會在時間移位時造成問題。 如需詳細資訊和範例,請參閱日光節約時間和標準時間的週期

下一步