Robotic Crowd

Robotic Crowd

月末日にワークフローを自動実行する

Author: Asao Nakamura 43 views

この記事では、月末日にワークフローを自動実行させる方法を紹介します。

【できるようになること】

  • 月末日に任意のワークフローを自動実行する(うるう年含む)

月末日のスケジュール登録について

月末日のみに実行したい場合、スケジュールとCronだけでは対応ができません。
そのため、ワークフローに条件分岐を組み込み、月末を判断する必要があります。

 ワークフローの設定例

下記手順にてワークフローを設定します。
うるう年もこの方法で対応可能です。

まず、スケジュールの「日」についての設定を、毎月28〜31日の間に毎日実行されるようにします。
  • スケジュール登録画面を開きます。
  • “何日?”もしくは“Cron入力欄の日付部位”に、28-31と入力します
  • 登録するワークフローに、この展開メニュー下部の2-Aもしくは2-Bのいずれかの方法で設定されたワークフローを指定します。

以下画像のようなワークフローを新規作成し、スケジュールに登録します。

月末のみ、「ワークフローを実行する(AddToQueue)」に指定したワークフローが実行されます。

  • ワークフローを新規作成します。
  • 条件分岐(IF)を設置します。
  • 以下の条件文を入力します。(方法2-Bとは1文字違います)
    ${moment().utcOffset('540').endOf('month').format("DD") == moment().utcOffset('540').format('DD')}
  • 追加した条件分岐の範囲内に、AddToQueueを追加し、実行したいワークフローを指定します。
  • 作成したワークフローを保存し、「1.月末のスケジュールを登録する」にて、このワークフローを指定・登録します。

強制終了を挟む方法です。

月末に実行させたいワークフローをスケジュールに登録した後、そのワークフローの最上部に、以下のようなアクションを設置します。

 

  • 月末に実行したい既成のワークフローを開きます。
  • ワークフローの最上部に、条件分岐(IF)を追加します。
  • 以下の条件文を入力します。(方法2-Aとは1文字違います)
    ${moment().utcOffset('540').endOf('month').format("DD") != moment().utcOffset('540').format('DD')}
  • 追加した条件分岐の範囲内に、KillAttemptを設置します。
  • 作成したワークフローを保存し、「1.月末のスケジュールを登録する」にて、このワークフローを指定・登録します。

今回の条件式は、以下のようなアクションを組むことによって作成することも可能です。
条件式の内容,結果は方法2ーA,2-Bと同じようにできますが、スクリプト構文を使用しません。ただしアクション数が3つ増加します。

参考:Compareアクションを使った条件式の作成方法

  • GetTime(日時を取得)を2つ設置します。
  • 2つのGetTimeの「フォーマット」を「DD」とします。
  • 片方のGetTimeのstartEndOptionに、「月末」を設定します。
  • Compare(比較する)を設置します。
  • 比較基準、比較対象にGetTimeのアウトプットをそれぞれ指定します。
  • 比較方法を「と等しい」にします。
  • ではない。(not)のパラメータを確認/設定します(後述)
  • IF(条件分岐)を設置し、インプットにCompareのアウトプットを指定します。
※ではない。(not)について

Compare(比較する)アクションのうち、パラメータ「ではない。(not)」のON/OFFを切り替えることによって、方法2-A,2-Bの切り替えが可能です。(ONにすると2ーB、OFFにすると2-Aになります。デフォルトではOFFです。)

# 真のとき 方法2-A 月末だったらワークフローを実行
+if_1:
  if>: ${moment().utcOffset('540').endOf('month').format("DD") == moment().utcOffset('540').format('DD')}
  _do:

    # テキストを作成
    +text_1:
      action>: Text
      text: '今日は月末日です'

    # ワークフローを実行する 方法2-A
    +add_to_queue_1:
      action>: AddToQueue
      workflow_id: ''
# 真のとき 方法2-B 月末日ではなかったらワークフローを強制終了
+if_2:
  if>: ${moment().utcOffset('540').endOf('month').format("DD") != moment().utcOffset('540').format('DD')}
  _do:

    # テキストを作成
    +text_2:
      action>: Text
      text: '今日は月末日ではありません'

    # 強制終了 方法2-B
    +kill_attempt_1:
      action>: KillAttempt
      message: '月末日ではないため、強制終了します'
# 日時を取得 今日
+get_time_1:
  action>: GetTime
  format: DD
  timezone: 'Asia/Tokyo'

# 日時を取得 今月末
+get_time_2:
  action>: GetTime
  format: DD
  timezone: 'Asia/Tokyo'
  relativeTime:
    number: ''
    unit: ''
    preposition: ''
    startEndOption: endOfMonth

# 比較する 方法2-A 今日は月末日か
+compare_1:
  action>: Compare
  subject: +get_time_1
  compare_with: +get_time_2
  method: EQUALS
  not: false

# 真のとき 方法2-A
+if_1:
  if>: +compare_1
  _do:

    # ワークフローを実行する 方法2-A
    +add_to_queue_1:
      action>: AddToQueue
      workflow_id: ''
<スケジュール>月末

このページは役に立ちましたか?