10.2.5. タスクのエスカレーションと通知

タスクのエスカレーションが場合によっては必要になります。例えば、タスクに割り当てられたユーザーが一定の時間以内にそのタスクを完了できない場合などです。このような場合、タスクは別のアクターかグループに再割当てされます。以下のステータスにあるタスクに対して、エスカレーションを定義することができます。
  • 開始されていない (READY または RESERVED)
  • 完了されていない (IN_PROGRESS)
エスカレーションが発生するたびに、タスクは、以前に割り当てられていたユーザーから、エスカレーション定義のあるユーザーやグループに potential owners として割り当て直されます。Actual Owner がタスクに割り当てられると、エスカレーションがリセットされタスクが READY のステータスに入ります。
エスカレーション ID の単純な再割当て例
以下は、エスカレーションプロセスの際に指定した属性一覧です。
  • Users。この属性は、エスカレーション時にタスクを割り当てるべき、コンマ区切りのユーザー一覧です。この属性の許容値は、文字列の値と #{user-id} 式です。
  • Groups。この属性は、エスカレーション時にタスクを割り当てるべき、コンマ区切りのユーザー一覧です。この属性の許容値は、文字列の値と #{group-id} 式です。
  • Expires At。この属性は、エスカレーションを行うべき時間を定義します。タイマーと同様に時間の規格 (2m, 4h, 6d, など) で定義する必要があります。この属性の許容値は、文字列の値と #{expiresAt} 式です。
  • Type。この属性は、エスカレーションを行うべきタスクのステータスのタイプを特定します (not-started | not-completed)。
E-メール通知は「Notification」タブから送信されます。定義としてはエスカレーションと非常に似ています。E-メール通知は、以下のステータスのタスクに対して送信可能です。
  • 開始されていない (READY または RESERVED)
  • 完了されていない (IN_PROGRESS)
E-メールメッセージの使用方法を示す Notification タブ
E-メール通知には以下のプロパティがあります。
  • Type。この属性は、エスカレーションを行うべきタスクのステータスのタイプを特定します (not-started | not-completed)。
  • Expires At。この時間定義のプロパティは、エスカレーションを行うべき時間を特定します。タイマーと同様に時間の規格 (2m, 4h, 6d, など) で定義する必要があります。このプロパティの許容値は、文字列の値と #{expiresAt} 式です。
  • From。E-メールメッセージの From フィールドで使用する、任意のユーザーまたはグループ ID、許容値は文字列と式です。
  • To Users。通知の受信者となるユーザーの ID (コンマ区切りのリスト)。
  • To Groups。通知の受信者となるグループの ID (コンマ区切りのリスト)。
  • Reply To、通知の返信を受け取るべき任意のユーザーまたはグループ ID。
  • Subject。通知の件名。許容値は文字列と式となっています。
  • Body。通知の内容。許容値は文字列と式となっています。
通知は #{processVariable} でプロセス変数を、${taskVariable} でタスク変数を参照します。このように、プロセス変数はタスクの作成時に、タスク変数は通知時間に解決されます。以下のリストには、通知を行う際に使用するタスク変数が複数含まれています。
  • taskId: タスクインスタンスの内部 ID
  • processInstanceId: タスクが所属するプロセスインスタンスの内部 ID
  • workItemId: このタスクを作成する作業アイテムの内部 ID
  • processSessionId: ランタイムエンジンのセッション内部 ID
  • owners: タスクの Potential Owner となるユーザー/グループの一覧
  • doc: 定期的なタスクの変数を含むマップ
以下はメッセージの通知例で、様々な変数がどのようにアクセスされるか例示しています。
<html><body><b>${owners[0].id} you have been assigned to a task (task-id ${taskId})</b><br>
		You can access it in your task 
		<a href="http://localhost:8080/jbpm-console/app.html#errai_ToolSet_Tasks;Group_Tasks.3">inbox</a><br/>
		Important technical information that can be of use when working on it<br/>
		- process instance id - ${processInstanceId}<br/>
		- work item id - ${workItemId}<br/><hr/>
		
		Here are some task variables available:
		<ul><li>ActorId = ${doc['ActorId']}</li><li>GroupId = ${doc['GroupId']}</li><li>Comment = ${doc['Comment']}</li></ul><hr/>
		Here are all potential owners for this task:
		<ul>
		$foreach{orgEntity : owners}
			<li>Potential owner = ${orgEntity.id}</li>
		$end{}
		</ul><i>Regards</i></body></html>