IM-BPM for Accel Platform IM-BPM チュートリアルガイド 第18版 2021-04-01

4.3.17.3. タイマイベントを使用する

このチュートリアルでは、タイマイベントを使用して、時間をトリガにし、プロセスの開始やプロセスを進める方法を解説します。
タイマをトリガとするイベントは、以下のとおりです。
  • タイマ開始イベント
  • タイマ境界イベント
  • タイマキャッチイベント

コラム

各イベントの詳細については、以下を参照してください。

コラム

このチュートリアルで作成する「プロセス定義」のサンプルを、以下のリンクからダウンロードできます。

このサンプルは「プロセス定義アップロード」機能でプロジェクトにアップロードできます。
アップロード手順は「IM-BPM プロセスデザイナ 操作ガイド」-「プロセス定義のアップロード」を参照してください。

4.3.17.3.1. 指定した時間間隔で複数回プロセスを開始するプロセス定義を作成する

指定した時間間隔で複数回プロセスを開始するプロセス定義を作成します。

../../../../_images/event_0201.png

図:完成イメージ

  1. キャンパスの空白部分、または、プールをクリックし、「プロパティ」をプロセス全体切り替えます。
    「プロパティ」 の 「プロセス」タブから、項目を以下のように設定してください。
    • プロセス定義キー : event_timer_usage_start_process

      ../../../../_images/event_0202.png
    図:「タイマで開始するプロセス」 - 「プロパティ」 - 「プロセス」
  2. 「タイマ開始イベント」の「メインコンフィグ」タブから、以下のように項目を設定します。
    • 時間指定の種別 : 周期
    • 周期 : R3/PT3M
    ../../../../_images/event_0203.png
    図:「タイマ開始イベント 」 - 「プロパティ」 - 「メインコンフィグ」

    コラム

    R3/PT3Mは「3分間隔の繰り返しを3回行う」ことを、ISO 8601の形式に則って記述したものです。

    例:10時間毎に5回開始→R5/PT10H
    1日毎に10回開始→R10/P1D

    コラム

    cron式で周期を指定する
    「タイマイベント」の「周期」は、cronでも記述できます。
    cronは、左から[秒][分][時間][日][月][曜日][年]で設定します。

    例:5分毎→0 0/5 * * * ?
    毎年4月3日2時1分→0 1 2 3 4 ? *
    2019年、毎日1時2分 →0 2 1 * * ? 2019

    cron式の各フィールドと詳細

    フィールド名 設定可能範囲 使用可能な特殊記号
    0~59 , - * /
    0~59 , - * /
    時間 0~23 , - * /
    1~31 , - * ? / L W
    1~12 , - * /
    曜日 1~7、SUN~SAT , - * ? / L #
    空, 1970~2199 , - * /

    注意

    タイマイベントは、一定間隔毎に指定された時間を経過しているか判定して実行されます。
    そのため、特に[秒]フィールドを使用する時間指定は、数秒遅れる場合があります。
    • 「 , (カンマ) 」
      「 , 」は、複数の数字を設定する際に使用します。
      例 : 毎日10時と18時 → 0 0 10,18 * * ?
    • 「 - (ダッシュ) 」
      「 - 」は連続した範囲を指定できます。
      [日]フィールドを「1-4」に設定すると、指定した月の1日から4日が設定されます。
      例 : 毎月1日から4日の、3時2分→0 2 3 1-4 * ? *
      毎日1時2分に開始し、1時5分までの1分毎→0 2-5 1 * * ?
    • 「 * (アスタリスク) 」
      「 * 」はフィールドに設定できるすべての値を対象にできます。
      例 : 2019年毎月毎日毎時5分→0 5 * * * ? 2019
    • 「 ? (クエスチョン マーク) 」
      「 ? 」は他の条件による設定を許容できます。
      曜日を問わず「1日」を指定したい場合、[日]のフィールドを「1」、[曜日]フィールドは 「 ? 」にします。
      [日]フィールドと[曜日]フィールドを同時に設定できないため、いずれかを「?」で指定する必要があります。
      例 : 2019年毎月1日の10時→0 0 10 1 * ? 2019
      毎年毎月金曜日の18時→0 0 18 ? * 6 *
    • 「 / (スラッシュ) 」
      「 / 」で繰り返し期間を指定できます。
      左側の数字から開始し、右側の数字毎に繰り返します。
      例 : [分]の部分に「0/15」を設定→0分から15分毎に繰り返す
      [日]の部分に「1/6」を設定→1日から6日毎に繰り返す

      注意

      「 / 」による繰り返しは、各フィールドの範囲内でのみ行われます。
      [月]のフィールドに対して「7/6(7月から開始して6ヶ月毎に繰り返す)」を指定しても、来年の1月には及ばず、当年の7月だけが設定されます。
      [秒]のフィールドに対して「5/30(5秒から開始して30秒毎に繰り返す)」を指定しても、同じ分の5秒と35秒のみ設定されます。
    • 曜日の英語表記
      [曜日]フィールドに対しては英語の省略形を使用できます。
      例 : 毎週水曜日の18時30分→ 0 30 18 ? * WED
    • 「L」
      [曜日]フィールドに対する「L」は、月の最終週を指定できます。
      例 : 毎月最終金曜日の2時1分→0 1 2 ? * 6L

      [日]フィールドに対する「L」は、月の最終日を指定できます。
      例 : 2019年4月30日の2時1分0秒→0 1 2 L 4 2019
    • 「W」
      [日]フィールドに対する「W」は、指定した日付に最も近い平日を設定できます。
      例 : 設定されたのが「15W」だった場合
      「15日が土曜日」である月の場合、イベントが開始するのは「14日の金曜日」です。
      「15日が日曜日」である月の場合、イベントが開始するのは「16日の月曜日」です。

      注意

      「W」による選定は、[月]フィールドの範囲内で行われます。
      月を跨ぐ日にちが設定されることはありません。

      例1. 0 0 0 1W 6 ? 2019 [月]のフィールドが「6」,[日]フィールドが[W1]で設定されている場合
      2019年の6月1日は土曜日であり、最も近い平日は金曜日の5月31日です。
      しかし、[月]フィールドに設定した[6]が優先されるのため、6月3日(月曜日)に指定されます。

      例2. 0 0 0 30W 6 ? 2019 [月]のフィールドが「6」,[日]フィールドが[W30]で設定されている場合
      2019年の6月30日は日曜日であり、最も近い平日は月曜日の7月1日です。
      しかし、[月]フィールドに設定した[6]が優先されるのため、6月28日(金曜日)に指定されます。
    • 「LW(LastWeekday)」
      [日]フィールドに対して「LW」と設定することで、月の最後の平日を指定できます。
      例 : 0 0 10 ? * LW * → 毎月最後の平日の10時
    • 「#(シャープ)」
      「 # 」は[曜日]フィールドに使用することで、週と曜日を設定できます。
      左側の数字が曜日を表し、右側の数字が第何週目かを表します。
      例 : 「4#2」→月の第2水曜日
  3. 「タイマ開始イベント」が指定した時間の後「プロセス」を開始したことを確認するため、「ユーザタスク」を配置します。

  4. 「タイマ開始イベント」が指定した時間の後「プロセス」を開始したことを確認するため、「ユーザタスク」を配置します。

    ../../../../_images/event_0204.png

4.3.17.3.2. 指定した時間経過によりユーザタスクを中断するプロセス定義を作成する

指定した時間経過により、ユーザタスクを中断するプロセス定義を作成します。
../../../../_images/event_0205.png
図:完成イメージ
  1. 「開始イベント」を配置します。

  2. キャンパスの空白部分、または、プールをクリックし、「プロパティ」をプロセス全体切り替えます。
    「プロパティ」 の 「プロセス」タブから、項目を以下のように設定してください。
    • プロセス定義キー : event_timer_usage_boundary_process
    • 処理対象ユーザ : aoyagi
    ../../../../_images/event_0206.png
    図:「タイマ境界イベントのプロセス」 - 「プロパティ」 - 「プロセス」
  3. 指定した時間経過により、中断される「ユーザタスク」を配置します。

    • 処理対象ユーザ : aoyagi
    ../../../../_images/event_0207.png
    図:「ユーザタスク」 - 「プロパティ」 - 「メインコンフィグ」
  4. 5分経過することで、ユーザタスクを中断する「タイマ境界イベント」を配置します。
    タイマ境界イベントの「プロパティ」で以下の項目を設定します。
    • 時間指定の種別 : 期間
    • 期間 : PT5M
    ../../../../_images/event_0208.png
    図:「メッセージ境界イベント」

    コラム

    PT5Mは「5分」を、ISO 8601の形式に則って記述したものです。

    例:10分→PT10M
    2日→P2D
  5. 指定した時間経過により中断されたことを確認するため、別のユーザタスクを配置します。

    • 処理対象ユーザ : aoyagi
    ../../../../_images/event_0209.png
    図:「ユーザタスク」

4.3.17.3.3. 指定した時間にユーザタスクを開始するプロセス定義を作成する

指定した時間にユーザタスクを開始するプロセス定義を作成します。

../../../../_images/event_0210.png

図:完成イメージ

  1. 「開始イベント」を設置します。

  2. キャンパスの空白部分、または、プールをクリックし、「プロパティ」をプロセス全体切り替えます。
    「プロパティ」 の 「プロセス」タブから、項目を以下のように設定してください。
    • プロセス定義キー : event_timer_usage_intermediate_process
    • 処理対象ユーザ : aoyagi
    ../../../../_images/event_0211.png
    図:「タイマキャッチイベントのプロセス」 - 「プロパティ」 - 「プロセス」
  3. 「スクリプトタスク」を作成します。
    「スクリプトタスク」の「メインコンフィグ」タブから、「スクリプト」の「編集」リンクをクリックします。
    ../../../../_images/event_0212.png

    図:「スクリプトタスク」 - 「プロパティ」 - 「メインコンフィグ」

  4. 「当日の15時」という情報を変数「 dateTime 」に設定するため、以下のスクリプトを設定します。

    function run(variables, execution, entity) {
      var cal = java.util.Calendar.getInstance();
    
      cal.set(java.util.Calendar.HOUR_OF_DAY, 15);
      cal.set(java.util.Calendar.MINUTE, 0);
      cal.set(java.util.Calendar.SECOND, 0);
    
      entity.setVariable('dateTime', cal.getTime());
    }
    
    ../../../../_images/event_0213.png
    図:スクリプト編集のポップアップ
  5. 「タイマキャッチイベント」の「メインコンフィグ」で、「時間指定の種別」と「日付」を設定します。

    • 時間指定の種別 : 日付
    • 日付 : ${dateTime}
    ../../../../_images/event_0214.png
    図:「タイマキャッチイベント」 - 「プロパティ」 - 「メインコンフィグ」
  6. タイマキャッチイベントから次に進んだことを確認するために「ユーザタスク」を配置します。

    • 担当者 : aoyagi
    ../../../../_images/event_0215.png
    図:「ユーザタスク」

4.3.17.3.4. 実行結果を確認する

このチュートリアルで作成した「プロセス定義」を実行環境にデプロイし、実行した結果の確認を行います。

  1. 「タイマで開始するプロセス」はデプロイ完了後にタイマ開始イベントが始動します。

    設定した周期 R3/PT3M どおり、3分おきにタスクが起動し、合計3つ揃うのを確認します。

    ../../../../_images/event_0216.png

    図:「タスク一覧」

  2. 「プロセス開始一覧」から、「プロセス定義名」 タイマキャッチイベントのプロセスタイマ境界イベントのプロセス を実行します。
    ../../../../_images/event_0217.png

    図:「プロセス開始一覧」

  3. 「タスク一覧」の「個人タスク」で、 タイマ境界イベントのプロセス のタスクが開始されていることを確認します。
    ../../../../_images/event_0218.png

    図:「タスク一覧」

  4. PT5M の設定どおり5分後にタスクが中止され、「タイマ境界イベントの次のユーザタスク」に移っていることを確認します。

    ../../../../_images/event_0220.png
    図:「プロセス一覧」 - 「プロセス詳細」
  5. 「プロセス一覧」 タイマキャッチイベントのプロセス が「15時」に起動することを確認します。

    ../../../../_images/event_0221.png
    図:「タスク一覧」

    コラム

    タスクを開始した時間が15時以降の場合、即時実行されます。