ワークフローへのカスタム機能の組み込み
この章では、ワークフローにカスタム機能を組み込む方法を説明します。
タスク分配方式のカスタマイズ
タスク分配方式は、タスク応答クラスで指定されます。カスタム・タスク分配方式を実装するには、以下の操作を行います。
カスタム・タスク応答クラスの作成
EnsLib.Workflow.TaskResponseOpens in a new tab のサブクラスを作成する際には、その OnNewTask() コールバック・メソッド (および場合によっては他のメソッド) をオーバーライドします。以下では、オーバーライドできるコールバック・メソッドを列挙しています。
-
OnAction() — ワークリスト・フォームからユーザがアクションを選択したときに呼び出されます。通常、これはタスク終了のマーキングとなります。
-
OnAssign() — ユーザがタスクに関連付けられている所有権を要求したときに呼び出されます。通常、このメソッドでは割り当てが実行されます。
-
OnCancel() — タスクが取り消されたとき、例えばタイム・アウトしたときなどに呼び出されます。
-
OnFormSubmit() — このタスクに関連付けられているタスク・フォームが送信されたときに呼び出されます。
-
OnNewTask() — ワークフロー・エンジンで新しいタスクを受信したときに呼び出されます。通常、このメソッドでは、タスクが現在の役割のメンバに関連付けられます。
-
OnRelinquish() — ユーザがタスクに関連付けられている所有権の放棄を要求したときに呼び出されます。通常、このメソッドでは、タスクの割り当てが解除され、役割に含まれる他のユーザにタスクが戻されます。
-
OnRoleChange() — このタスクに関連付けられているユーザまたはロールの定義が変更されたとき、例えばロールに含まれるユーザのリストが変更されたときなどに呼び出されます。
EnsLib.Workflow.TaskResponseOpens in a new tab コールバック・メソッドでは、ワークフロー・エンジン (EnsLib.Workflow.EngineOpens in a new tab) で定義されている API メソッドの数を呼び出すことにより、タスクの分配が制御されます。
以下では、上記のコールバックをオーバーライドする際に使用できる EnsLib.Workflow.EngineOpens in a new tab 内のクラス・メソッドを列挙しています。
-
AssignTask() — 特定のユーザにタスクを割り当てます。
-
CompleteTask() — タスクを [Completed] としてマーキングし、呼び出し側に応答を返します。
-
FindLeastBusyUser() — “最もビジーでない” ユーザの名前を返します。これは、システム内で割り当てられているタスクが最も少ないユーザです。
-
SendTask() — 特定のユーザにタスクを送信します。
-
SendTaskToAll() — 現在のロールに含まれる全ユーザにタスクを送信します。
-
SendTaskToTitle() — 現在のロールの中で、指定したタイトルを持つ 1 人または複数のユーザにタスクを送信します。
-
SendTaskToTop() — 現在のロールに含まれる上位 n ユーザに、ロールの中での各ユーザのランキングに従ってタスクを送信します。
-
UnassignTask() — タスクの割り当てを削除します。
これらのメソッドの詳細は、"Intersystems クラス・リファレンス" を参照してください。
カスタム・タスク応答クラスの呼び出し
タスク要求メッセージには、使用する応答クラスを指定するクラス・パラメータ (RESPONSECLASSNAME) があります。このクラス・パラメータをオーバーライドするには、要求クラスの %TaskHandler プロパティを設定します。
すなわち、タスク要求で目的のタスク応答が使用されるようにするには、次の 2 つの方法があります。
-
必要に応じて、EnsLib.Workflow.TaskRequestOpens in a new tab のサブクラスを作成して、その RESPONSECLASSNAME パラメータをオーバーライドし、その値をカスタム・タスク応答クラスの名前に一致させます。以下に例を示します。
Class MyApp.MyWorkflowRequest Extends EnsLib.Workflow.TaskRequest
{
Parameter RESPONSECLASSNAME = "MyApp.MyWorkflowResponse";
}
次に、ワークフロー・プロセスの適切な部分でこのメッセージ・クラスを使用します。
-
ワークフロー・プロセス内で、ワークフロー・オペレーションを呼び出す際に、要求インスタンスの %TaskHandler プロパティの値を目的のタスク応答クラス名に設定します。以下に例を示します。
set callrequest.%TaskHandler="MyApp.MyWorkflowResponse"