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

4.3.3.4. タスクリスナを利用して、ユーザタスクの期限日時を直前ユーザタスクの期限日時から3日後に設定する

このチュートリアルでは、タスクリスナにIM-LogicDesignerのロジックフローを設定して直前ユーザタスクの期限日時をもとに次ユーザタスクの期限日時を計算します。
../../../../_images/listener_0301.png
図 : 概要
IM-LogicDesigner の詳細については、「IM-LogicDesigner仕様書」を参照してください。

コラム

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

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

コラム

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

インポート手順は「IM-LogicDesigner ユーザ操作ガイド」-「インポート/エクスポート」を参照してください。

注意

本サンプルは英語版と日本語版にて設定されている期限日時とタイムゾーンが異なります。
日本語版の期限日時は「2023/03/11 0:00:00(GMT+09:00)」、タイムゾーンは「Asia/Tokyo」です。
英語版の期限日時は「2023/03/11 0:00:00(GMT-05:00)」、タイムゾーンは「America/New_York」です。

4.3.3.4.1. ロジックフローを作成する

直前タスクの期限日時に3日加算した日時を計算する ロジックフローを作成します。
  1. 「サイトマップ」→「IM-LogicDesigner」→「フロー定義一覧」→「ロジックフロー定義一覧」画面から
    「BPMチュートリアル」カテゴリを選択し、ヘッダ内の「ロジックフロー新規作成」をクリックし、以下を設定しロジックフローを保存します。
    • フロー定義ID : listener_set_next_duedate
    • フロー定義名 : 【チュートリアル】listener_set_next_duedate
    • フローカテゴリ : BPMチュートリアル

    コラム

  2. 3日加算を行うJavaScriptユーザ定義を作成します。
    javascriptユーザ定義を新規作成し以下のような入力値、返却値、スクリプトを記述します。
    javascriptユーザ定義の作成方法については「IM-LogicDesigner ユーザ操作ガイド」 - 「ユーザ定義を新規登録する」を参照してください。
    ../../../../_images/listener_0302.png
    図:「add3days」 - 「JavaScript定義編集」
    /**
    * run.
    *
    * @param input {Object} - task input data.
    * @return {Object} task result.
    */
    function run(input) {
        const datetime = new DateTime(input.duedate, input.timezone);
        const addDaysNum = 3;
        const newDuedate = datetime.plusDays(addDaysNum).data.getDate().data;
    
        return {
            newDuedate:newDuedate
        };
    }
    

    コラム

    スクリプト開発向けAPIであるDateTimeオブジェクトを利用することで、夏時間を考慮した日付の加算が可能です。
    具体的には、日付加算の前後で夏時間が発生する場合一日を24時間ではなく23時間または25時間として加算します。
    例 : 指定したタイムゾーンがAmerica/New_Yorkの場合→2023/03/11 0:00:00(GMT-05:00) + 3日 = 2023/03/14 0:00:00(GMT-04:00)
    ../../../../_images/listener_0303.png
    図:日付加算の例
    intra-mart Accel Platform のタイムゾーンや夏時間、日付と時刻の形式に関する考え方や仕様、制限事項については「intra-mart Accel Platform タイムゾーン仕様書」を参照してください。
    スクリプト開発向けAPIであるDateTimeオブジェクトについては「intra-mart Accel Platform スクリプト開発向けim-BizAPI」-「DateTimeオブジェクト」を参照してください。

    注意

    IM-BPMの夏時間への対応について

    IM-BPMの夏時間への対応は2024 Spring(Iris)以降のバージョンでのみサポートされています。
    2023 Autumn(Hollyhock)以前のバージョンでは、IM-BPMでの日時の表示や入力において夏時間の考慮が行われていません。
  3. 「開始タスク」、「タスク検索タスク」、「add3daysタスク(直前で作成したJavaScriptユーザ定義)」「終了タスク」を配置し、順に接続します。
    ../../../../_images/listener_0304.png
    図:ロジックフロー
  4. ツールバーの「入出力設定」をクリックします。
    ../../../../_images/listener_0305.png
    図:「ツールバー」 - 「入出力設定」
  5. 入力値を以下のように設定します。
    キー名
    task <object>
    id <string>
    ../../../../_images/listener_0306.png
    図:「入出力設定」 - 「入力」
  6. 出力値を以下のように設定します。
    キー名
    duedate <date>
    ../../../../_images/listener_0307.png
    図:「入出力設定」 - 「出力」
  7. タスクIDから、ユーザタスクの期限日時を取得します。
    「タスク検索タスク」のマッピング設定を開き以下をマッピングします。
    入力(始点) 出力(終点)
    入力<object> - task<object> - id<string> im_bpmQueryTasksForManagement1<object> - taskId<string>
    ../../../../_images/listener_0308.png
    図:「タスク検索タスク」 - 「マッピング設定」
  8. 期限日時の計算時に考慮したいタイムゾーンIDを定数に作成します。
    メニューバーの「定数設定」をクリックし「定数設定」を表示します。
    定数値を以下のように定義します。
    定数ID 定数値 説明
    Asia/Tokyo(英語版資材はAmerica/New_York) Asia/Tokyo(英語版資材はAmerica/New_York) 期限日時の計算時に使用するタイムゾーンID
    ../../../../_images/listener_0309.png
    図 : 「定数設定」
  9. 「タスク検索タスク」で取得した期限日時をもとに3日後の日時を計算します。
    「add3daysタスク」のマッピング設定を開き以下をマッピングします。
    入力(始点) 出力(終点)
    im_bpmQueryTasksForManagement1<object> - queryTasksResults<object> - duedate<date> add3days<object> - duedate<date>
    定数<object> - Asia/Tokyo(英語版資材はAmerica/New_York)<string> add3days<object> - timezone<timezone>
    ../../../../_images/listener_0310.png
    図 : 「add3daysタスク」 - 「マッピング設定」
  10. 「終了タスク」のマッピング設定を開き以下をマッピングします。

    入力(始点) 出力(終点)
    add3days<object> - newDuedate<date> 出力<object> - variablesMap<map>
    ../../../../_images/listener_0311.png
    図:「終了タスク」 - 「マッピング設定」
  11. 編集が完了したら、ヘッダ内の「上書き保存」をクリックして編集内容を保存します。
    ../../../../_images/listener_0317.png
    図:「上書き保存」

4.3.3.4.2. プロセス定義を作成する

  1. 開始イベント、ユーザタスク、ユーザタスク、終了イベントを配置して、順にシーケンスフローで接続します。

    ../../../../_images/listener_0312.png
    図:完成イメージ
  2. 「プロセス」に、プロセス定義キーとプロセス名、処理対象ユーザを設定します。
    余白を選択し、「プロセス」タブの「プロセス定義キー」、「名前」、「処理対象ユーザ」に以下の値を設定します。
    • プロセス定義キー : listener_set_next_duedate
    • 名前 : 期限日時を動的に設定するプロセス
    • 処理対象ユーザ : aoyagi
      ../../../../_images/listener_0313.png
      図 : 「プロパティ」 - 「プロセス」
  3. 「ユーザタスク1」の「タスクリスナ」に作成したロジックフローを設定します。
    「ユーザタスク1」を選択し、「リスナ」タブから「タスクリスナ」の「追加」をクリックします。
    以下のとおりに項目の値を設定してください。
    • イベント : complete

    • タイプ : IM-LogicDesigner

    • フローID : listener_set_next_duedate

    • 最新バージョン : 最新バージョンを利用

    • 入力データ : 結果変数を格納する

    • 結果変数名 : (空欄)

      ../../../../_images/listener_0314.png
      図 : 「ユーザタスク1」 - 「プロパティ」 - 「リスナ」 - 「タスクリスナ」

    コラム

    本来ロジックフローと変数を連携するには、「IM-LogicDesigner」リスナのプロパティ「入力データ」を設定する必要があります。
    今回は、ロジックフローの「入出力設定」で、入力データに対し「暗黙オブジェクト」を設定してあるため、必要ありません。

    「暗黙オブジェクト」についての詳細は「IM-BPM 仕様書」-「IM-LogicDesignerリスナ」を参照してください。
    また結果変数名を空欄にした場合、ロジックフローの出力値の変数がそのままプロセスインスタンス変数として登録されます。
  4. 「ユーザタスク1」に担当者と期限日時を設定します。
    「ユーザタスク1」を選択し、「メインコンフィグ」タブの「担当者」と「期限」に以下の値を設定します。
    • 担当者 : aoyagi
    • 期限 : 2023-03-11T00:00:00+09:00(英語版資材は2023-03-11T00:00:00-05:00)
      ../../../../_images/listener_0315.png
      図 : 「ユーザタスク1」 - 「プロパティ」 - 「メインコンフィグ」

  5. 「ユーザタスク2」に担当者と期限日時を設定します。
    期限日時にはEL式を使用して、ロジックフロー【チュートリアル】listener_set_next_duedate``の出力値``duedate を指定します。
    「ユーザタスク2」を選択し、「メインコンフィグ」タブの「担当者」と「期限」に以下の値を設定します。
    • 担当者 : aoyagi
    • 期限 : ${duedate}
      ../../../../_images/listener_0316.png
      図 : 「ユーザタスク2」 - 「プロパティ」 - 「メインコンフィグ」

  6. メニューバー左上、「ファイル」 から「名前を付けて保存」を選択し、保存します。

4.3.3.4.3. 実行結果を確認する

このチュートリアルで作成したプロセス定義を実行環境にデプロイし実行します。また、実行した結果の確認を行います。
  1. 「プロセス開始一覧」画面にて、プロセス定義名 期限日時を動的に設定するプロセス を開始します。

  2. 「タスク一覧」 画面の個人タスクを確認します。
    タスク名「ユーザタスク1」の期限日時が「2023/03/11 0:00:00」であることを確認します。
    タスク名「ユーザタスク1」の「処理」をクリックし、タスクを処理します。
  3. 「タスク一覧」 画面の個人タスクを確認します。
    タスク名「ユーザタスク2」の期限日時が「2023/03/14 0:00:00」であることを確認します。

注意

英語版と日本語版で期限日時とタイムゾーンの設定が異なります。以下の条件で確認を行うと上記のような結果を確認できます。
日本語版 : aoyagiユーザのタイムゾーン設定は「Asia/Tokyo」
英語版 : aoyagiユーザのタイムゾーン設定は「America/New_York」