4.3.7.1. タイマ境界イベント¶
タイマ境界イベントは、設定した時間情報を元にイベントを受信する境界イベントです。
指定時間が経過する、または、特定の日時になった場合に、タイマ境界イベントから引かれたシーケンスフローへとフローを進行させます。
設定可能な項目は以下のとおりです。
4.3.7.1.1. タイマ境界イベントの配置¶
タイマ境界イベントを配置するためには、事前にタイマ境界イベントが接続可能なアクティビティを配置しておく必要があります。
接続可能なアクティビティは以下の通りです。
アクティビティ名 | パレット |
---|---|
アブストラクトタスク | タスク |
ユーザタスク | タスク |
スクリプトタスク | タスク |
サービスタスク | タスク |
メールタスク | タスク |
マニュアルタスク | タスク |
受信タスク | タスク |
ビジネスルールタスク | タスク |
コールアクティビティ | タスク |
サブプロセス | コンテナ |
IM-LogicDesignerタスク | intra-mart |
申請タスク | intra-mart |
起票タスク | intra-mart |
4.3.7.1.2. 基本情報の設定¶
基本情報の設定について解説します。
エディタ上で設定を行いたいフローエレメントをクリックします。
プロパティエリアから「基本情報」タブを選択します。
プロパティの詳細は以下のとおりです。
項目名 | 必須/任意 | 入力形式 | 説明 |
---|---|---|---|
ID | 必須 | 任意の文字列を設定します。
英数字と一部の記号のみ使用できます。
|
フローエレメントを一意に特定するためのIDを設定します。 |
名前 | 任意 | 任意の文字列を設定します。
|
フローエレメントの名前を設定します。
プロセス定義で表示されます。
|
4.3.7.1.3. メインコンフィグの設定¶
タイマ境界イベントのメインコンフィグの設定について解説します。
入力方式は、日付と時刻の表記に関する国際規格であるISO 8601の形式に則って記述する必要があります。
具体的な記述方法については、以下の説明欄を参照してください。
項目名 | 必須/任意 | 入力形式 | 説明 |
---|---|---|---|
アクティビティの取消 | チェックを入れた場合、タイマ境界イベントが開始したときに、接続しているアクティビティを終了します。 | ||
時間指定の種別 | 時間を指定する種別を選択します。 | ||
日付 | 必須 | 日付形式の文字列を設定します。
EL式による設定が可能です。
|
「時間指定の種別」で「日付」を選択した場合に設定します。
開始する日付を設定します。
例:2016年1月1日12時開始 → 2016-01-01T12:00:00
指定日付に1回のみ受信されます。
|
周期 | 必須 | 周期形式の文字列を設定します。
EL式による設定が可能です。
|
「時間指定の種別」で「周期」を選択した場合に設定します。
開始する周期を設定します。
例:10時間毎に3回開始 → R3/PT10H
「アクティビティの取消」にチェックが入っていない場合に複数回受信されます。
「アクティビティの取消」にチェックが入っていない場合は、アクティビティがイベントを受信しても終了しないため、次の周期のイベントを受信できます。
|
期間 | 必須 | 期間形式の文字列を設定します。
EL式による設定が可能です。
|
「時間指定の種別」で「期間」を選択した場合に設定します。
開始するまでの期間を設定します。
例:10日後開始 → P10D
タイマ境界イベントに到達したときから指定した期間が経過したとき1回のみ開始されます。
|
日付計算方法 |
|
||
タイムゾーン | タイマイベントのスケジュールを行う際のタイムゾーンを指定します。
|
||
タイムゾーン(EL式) | 必須 | タイムゾーンで「式でタイムゾーンを設定する」を選択した場合に入力します。
EL式による設定が可能です。
|
|
カレンダーID | 業務日付でタイマイベントのスケジュールを行う際に、休日の定義を参照するカレンダーを指定します。
|
||
カレンダーID(EL式) | 必須 | カレンダーIDで「式でカレンダーIDを設定する」を選択した場合に入力します。
EL式による設定が可能です。
|
|
カスタムカレンダーロジックを使用する | ユーザコードまたはLogicDesignerを使用して、システムが計算したスケジュールの編集を行います。
繰り返し指定などにより、複数回スケジュールの計算を行う必要がある場合、二回目以降のスケジュールの計算時に、一回目のスケジュール日時を再計算するため、ユーザコードの振る舞はべき等であるこ必要があります。
これは、リトライなどが発生した場合などに前回のスケジュールの正確な実行時間が取得できない場合があるためです。
|
||
カスタムカレンダーロジック | 必須 | 呼び出すクラスを設定します。 | スケジュールの編集を行うロジックの種類を選択します。
「Javaクラス」、「スクリプトファイル」、「IM-LogicDesigner」より選択できます。
|
Javaクラス | 必須 | Javaクラスを設定します。
|
システムにデプロイされているJavaクラスを呼び出し、スケジュールの編集を行います。
カスタムロジックタイプで「Javaクラス」を選択した場合に入力します。
|
スクリプトファイル | 必須 | 実行するスクリプトファイルを { IM-Juggling プロジェクト}/classes からの相対パス形式で指定します。
例:{ IM-Juggling プロジェクト}/classes/sample/foo.js を実行する場合→sample/foo.js
|
システムにデプロイされているim-javascriptのスクリプトファイルを呼び出し、スケジュールの編集を行います。
カスタムロジックタイプで「スクリプトファイル」を選択した場合に入力します。
|
フローID | 必須 | フロー定義IDを設定します。
IM-LogicDesignerのフロー定義IDを指定します。
|
カスタムロジックタイプで「IM-LogicDesigner」を選択した場合に入力します。
「フロー定義検索」ボタンでフロー定義の検索ができます。
|
利用するバージョン | タイプで「IM-LogicDesigner」を選択した場合に選択します。
|
||
バージョン番号 | 必須 | ロジックフローのバージョン番号を設定します。
|
カスタムロジックタイプで「IM-LogicDesigner」を選択し、「利用するバージョン」で「入力したバージョンを利用」を選択した場合に入力します。
ロジックフローのバージョン番号を指定します。
|
コラム
Javaクラスについて
「Javaクラス」で指定するクラスは、下記のInterfaceを実装する必要があります。
- jp.co.intra_mart.activiti.engine.impl.calendar.custom.logic.execute.CustomBusinessCalendarLogicJavaClass
コラム
スクリプトファイルについて
スクリプトファイルは以下の形式で記述されている必要があります。
関数名:run(input)
戻り値:rescheduledDate ※編集後のスケジュール日時
スクリプトファイルのinputには下記の情報が設定されます。
{
"processDefinitionId" : "PROCESS_TIMER_START_EVENT_019:1:8guoz28v37c25xa",
"processInstanceId" : null,
"executionId" : null,
"activityId" : "timer-start-event_1",
"calendarId" : "JPN_CAL",
"calcStartDate" : new Date(1687945754602),
"dueDate" : new Date(1687946354602),
"businessKey" : null,
"description" : "R3/PT10M",
"timeZone" : "Asia/Tokyo",
"processDefinitionKey" : "PROCESS_TIMER_START_EVENT_019"
}
processDefinitionId : プロセス定義ID
processInstanceId : プロセスインスタンスID、タイマ開始イベントの場合は、null が設定されます。
executionId : エグゼキューションID、タイマ開始イベントの場合は、null が設定されます。
activityId : タイマイベントのアクティビティID
calendarId : カレンダーID
calcStartDate : 計算の基準となる日時。アクティビティへの到達日時が設定されます。
dueDate : システムがあらかじめ計算したスケジュール日時
businessKey : 業務キー
description : 周期または期間に設定されたスケジュール指定文字列
timeZone : タイムゾーン
processDefinitionKey : プロセス定義キー
以下はシステムが計算したスケジュール時刻が18時以降であった場合、次の営業日の9時に再スケジュールするスクリプトのサンプルです。
function run(input) {
var calendarService = new bpm.BusinessCalendarService();
var rescheduledDate = input.dueDate;
if (calendarService.isAfter(input.dueDate,18,input.timeZone).data) {
var nextBusinessDay = calendarService.getNextBusinessDay(input.dueDate,input.timeZone,input.calendarId).data;
rescheduledDate = calendarService.editClock(nextBusinessDay,9,input.timeZone).data;
}
return {
rescheduledDate : rescheduledDate
};
}
コラム
IM-LogicDesignerの入力値/出力値のjson定義
IM-LogicDesignerの入力値
calcStartDate、dueDateは読み込んだのち、IM-LogicDesignerの「入出力設定」にてDate型へ変更してください。
{
"processDefinitionKey": "",
"processDefinitionId": "",
"businessKey": "",
"processInstanceId": "",
"executionId": "",
"activityId": "",
"timeZone": "",
"calendarId": "",
"description": "",
"calcStartDate": null,
"dueDate": null
}
IM-LogicDesignerの出力値
読み込んだのち、IM-LogicDesignerの「入出力設定」にてDate型へ変更してください。
{
"rescheduledDate": null
}
注意
「日付計算方法」、および「カスタムカレンダーロジック」は、2023 Autumn(Hollyhock)以降のバージョンから設定できます。