

ワークフローアプリを作成するとき、タスクの発生日時や処理締切日時を設定できます。例えば出張申請・報告アプリを考えると、出張申請が承認された後、すぐに「出張の内容を報告してください」というタスクが届いても少し困りますね。
それに、出張報告に提出締切がほしいという場合もあるでしょう。チャットやメール、あるいは口頭で「◯月×日までに提出!」と出張者に伝えることもできますが、あまりスマートではありません。タスク自体に締切を設定すれば、Questetra BPM Suite が自動で締切の管理をしてくれます。このチュートリアルでは、タイマー中間イベントと ヒューマンタスクの締切設定 を活用して、出張にまつわる一連の業務フローを扱うアプリを作成します。これらの機能を効果的に使ってアプリを設計することで、スケジュールに合わせたタスクの作成・締切の制御を実現できます。
ただし、今回は「トークンの停止・進行を日時によって制御する方法」に焦点を絞って説明するため、出張申請・報告アプリとしては最低限の構成で作成します。実際に業務で使用する場合にはワークフロー図上での条件分岐や、スイムレーン・処理担当者設定を工夫する必要があるでしょう。
事前準備
アプリを作成するには「はじめての Questetra BPM Suite」の出張申請アプリを参考にしてください。Chpt.2 から Chpt.3 の「入力値に関する設定」までの内容に沿って新規にアプリを作成してください。Chpt.1 と Chpt.2 は内容的にほぼ独立していますが、Chpt.1 で準備したユーザ・組織の登録情報が Chpt.2 以降でも使用されています。ユーザ・組織については環境に合わせて適宜読み替えるか、Chpt.1 を読んで新しく用意してください。
ワークフロー図
作成したアプリをさらに編集して下図の状態まで設定してください。「出張開始」と書かれた円形のアイコンがタイマー中間イベントです。

タイマー中間イベントは、中間イベントタスクのパレットに入っています。

目標のワークフロー図にするには一部でヒューマンタスクの設定が必要なので、ひとまずこの状態まで設定してください。「内容確認」タスクの分岐については後で触れます。
データ項目
次の 7 つになるように設定してください。既に設定されているデータ項目を流用しましょう。
| データ項目名 | データ型 | フィールド名 | 備考 |
| 件名 | 文字型・単一行 | ||
| 出張開始日 | 日付型・年月日 | q_trip_start | 「はじめての〜」での「開始日」 |
| 出張終了日 | 日付型・年月日 | q_trip_end | 「はじめての〜」での「終了日」 |
| 申請者 | ユーザ型・検索セレクトボックス | q_trip_user | |
| 申請内容 | 文字型・複数行 | q_purpose | 「はじめての〜」での「内容」 |
| 金額 | 数値型 | q_budget | |
| 報告内容 | 文字型・複数行 | q_report |
データ編集許可
次のように設定してください。
| 出張申請 | 申請確認 | 内容報告 | 内容確認 | |
| 件名 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 出張開始日 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 出張終了日 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 申請者 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 申請内容 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 金額 | 編集可 | 表示のみ | 表示のみ | 表示のみ |
| 報告内容 | 表示なし | 表示なし | 編集可 | 表示のみ |
「出張開始」設定
タイマー中間イベントは流れてきたトークンを指定された日時まで留めるオブジェクトです。ワークフロー図の途中に挟むことで、ケース の進行を一時止めることができます。
今回は「タイマー中間イベント」を使って、出張が始まるまで「内容報告」タスクが発生しないようにします。設定ダイアログでタイマーをデータ項目「出張開始日」に設定すると、「出張申請」タスクで入力された出張開始日まで、トークンは「出張開始」に留まることになります。

「出張開始日」を過ぎると、トークンは「出張開始」の次の「内容報告」タスクに進みます。これで出張が始まる前から出張者のマイタスクに「内容報告」タスクが入ることを防ぐことができます。
タイマーをデータ項目で指定する場合、日時型・日付型が使用できます。今回のように日付型を使用した場合、タイマーが作動する時刻は 00:00 になります。
「内容報告」締切設定
ヒューマンタスクの設定ダイアログで締切の設定を行うと、指定の日時を過ぎたときにタスクを異常終了させたり、処理担当者に通知を送ったりすることができます。今回は「出張終了日」から 7 日後を締切として設定し、締切を過ぎたら通知を送ることにしましょう。
「締め切り」の設定で [(日付型)の 00:00]から を選び、基準に「出張終了日」を指定して [7 日後] としてください。これで「出張終了日」を起点に 7 日後がタスクの締切になります。(締切の時刻は 7 日後の 00:00 になります。「7 日中の提出は OK」としたい場合は、[8 日後]を指定してください。)

基準に使えるデータ項目は日時型・日付型(月日タイプを除く)です。日付型を指定した場合は「その日の 00:00」が起点 になります([日後]のドロップダウンを空白にすると、指定日付の 00:00 がそのまま締切になります)。
さらに細かく指定したい場合は [式]をオンにすると、設定内容が SpEL 式で表示され、編集できます。 日付型・日時型データ項目の計算に使用できる関数については、「R2271: EL式による日付日時としての出力(データ設定式)」を参照してください。
締め切り時の処理を「何もしない」にすると、締切を過ぎたときに「締め切りを過ぎています」という通知が届きますが、タスクの処理は締切を過ぎても行うことができます。(締切超過の通知とともに「マイタスク」の当該タスクの締切欄が赤字で表示されるようになりますが、タスクは削除されません。)

ここまでの設定で、出張申請から報告まで一通りの業務をワークフローアプリに実装することができました。
「内容確認」の通知を 3 日で消すには?
ところで、業務の種類によっては「絶対に内容を確認しなければいけない、という程でもない」という報告になる場合もあるでしょう。そういったタスクを放置すると、アプリの方で対処していない限り、「マイタスク」がどんどん溜まっていってしまいます。
このような 場合 に対応するために、ヒューマンタスクの締切設定を用いて [トークンが到達した時] から 3 日でタスクが終了するようにしましょう。「内容確認」の締切設定を次のように設定してください。

締め切り時の処理を「タスクを異常終了させる(トークンはタイマー境界イベントに移動)」にすると、ヒューマンタスクアイコンにタイマー境界イベントが追加されます。期限切れの場合はこちらにトークンが進みます。

このように設定することで、上司がタスクを完了した場合/3 日間放置して異常終了した場合のいずれでも、トークンは「結合ゲートウェイ」に進んで終了イベントにたどり着きます。タスクが異常終了した場合は当該タスクの通知は消えるので、「内容確認」タスクは作成から 3 日で上司の「マイタスク」から消えるというわけです。
この記事では「タイマー中間イベント」や締切設定の使い方のアイデアをわかりやすく紹介するために、サンプルアプリ自体は簡潔なものとしました。トークンの流れる日時を制御したいとき、この記事の内容を応用してみてください。

