タスク
Content Engine API は、クレーム処理やローン処理のアプリケーションなどにおいて、 複数のステップおよびユーザー・ロールで構成されたコンテンツ中心のワークフローの調整およびトラッキングを行う タスク関連クラスを提供します。タスクとは、プロセスの一部として実行される単一のワーク・アイテムであり、1 つのプロセスには複数の関連するワーク・アイテムまたは 独立したワーク・アイテムが含まれる場合があります。
1 つのタスクは、CmTask オブジェクトによって表されます。 CmTask オブジェクトは、Folder、Document、CustomObject など、タスクを あるプロセスのビジネス・オブジェクトに関連付けるコンテンツ・ベースのコーディネーターを保持します。 さらに CmTask オブジェクトでは、あるプロセスでのワーク・アイテムの状況を反映するように状態を変更することも 可能です (タスク状態マシン を参照してください)。 一般的に、CmTask オブジェクトはイベントおよびサブスクリプションを通じて状態変更を実行し、状態変更への応答を行います。
CmTask オブジェクトには後続タスクと先行タスクを指定することができます。これらのタスクは、 あるプロセスですべてのタスクが実行される順序をまとめて定義します。 先行と後続との関連付けは、CmTaskRelationship オブジェクトによって 指定されます。
タスク関係における先行タスクは、必須タスクまたは代替タスクのいずれかです。後続タスクには、必須先行タスクまたは代替先行タスク (あるいはその両方) が含まれる場合があります。後続タスクに進むには、その後続タスクのすべての必須先行タスクが完了し、さらに 1 つ以上の代替先行タスクが完了している必要があります。
例えば、タスク関係により、後続タスク X が必須の先行タスク A および B と関連付けられ、さらに代替先行タスク C および D と関連付けられている場合、タスク A と B の両方が完了し、タスク C または D のいずれかが完了していれば、タスク X に進むことができます。
CmTask クラスは基本クラスであり、インスタンスを許可しません。インスタンスの作成は、CmTask のサブクラスからのみ可能です。コードの例については、「タスク・オブジェクトの操作」を参照してください。
タスク状態マシン
以下の図で示すように、CmTask は、あるタスクが完了に向けてどのように進行しているかの内部状態を示します。
状態変更は、Content Engine によって自動的に行われるか、クライアントによって手動で行われます。CmTask オブジェクトは、 新規の状態に (図の左から右へ) 昇格されるか、前の状態に (右から左へ) 降格されます。これらの状態は、TaskState 定数クラスで定義されます。
事前条件と事後条件は CmTask オブジェクトに設定することができ、これらの条件は、手動による状態の昇格が試行される時にテストされます。 条件が false と評価された場合、昇格は失敗します。
手動による状態変更は、CmTask に対して changeState (LifecycleChangeFlags フラグ) メソッドを使用して開始されます。すべての状態変更は、手動か自動かにかかわらず、ChangeStateEvent を生成し、 これに対してユーザーは監査のためにサブスクライブおよび構成を行うことができます。 手動変更の場合は、ChangeStateEvent オブジェクトの LifecycleOperation プロパティーが changeState メソッド呼び出しで指定されたフラグ値を直接反映します。自動変更の場合、LifecycleOperation プロパティーは、状態変更の方向に 応じて PROMOTE または DEMOTE のいずれかになります。
それぞれの状態と、それらの状態の間の遷移について、以下のセクションで説明します。
待機 (事前条件)
このタスクは、事前条件をまだ満たしていないが、未完了の先行タスクによってブロックされていないことを示します。この状態は、事前条件が即時に満たされるかどうか、あるいはこのタスクに設定された事前条件があるかどうかに関係なく、新しく作成されたすべてのタスク・インスタンスの初期状態です。
この状態は、以下の状況の場合に再度この状態に戻ることができます。
- WAITING_ALL から
- 最後の未完了の先行タスクが COMPLETE 状態になったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果、このタスクの完了を抑制する唯一の先行制約がなくなったとき。
- 先行タスクが COMPLETE 状態になっている場合に、このタスクが後続タスクになっているタスク関係を作成したとき。
- READY から
- 降格操作によって。
以下の状況の場合、タスクはこの状態から移動できます。
- WAITING_ALL へ
- 先行タスクの状態が COMPLETE から WORKING に変わったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果 COMPLETE 状態の代替先行タスクが除去されたとき。
- 先行タスクが COMPLETE 状態ではない場合に、このタスクを後続タスクとして指定するタスク関係を作成したとき。
- READY へ
- 昇格操作によって。ただし、事前条件を満たしていることが前提となります (事前条件を満たしていない場合に昇格を試行すると、例外がスローされます)。
待機 (すべて)
未完了の先行タスクと満たされない事前条件によってタスクがブロックされていることを示します。
以下の状況の場合、この状態に入ることができます。
- WAITING_PRECONDITION から
- 先行タスクの状態が COMPLETE から WORKING に変わったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果 COMPLETE 状態の代替先行タスクが除去されたとき。
- 先行タスクが COMPLETE 状態ではない場合に、このタスクを後続タスクとして指定するタスク関係を作成したとき。
- WAITING_PREDECESSORS から
- 降格操作によって。
以下の状況の場合、タスクはこの状態から移動できます。
- WAITING_PRECONDITION へ
- 最後の未完了の先行タスクが COMPLETE 状態になったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果、このタスクを抑制する唯一の先行制約がなくなったとき。
- 先行タスクが COMPLETE 状態になっている場合に、このタスクが後続タスクになるタスク関係を追加したとき。
- WAITING_PREDECESSORS へ
- 昇格操作によって。ただし、事前条件を満たしていることが前提となります。
待機 (先行)
タスクは事前条件を満たしているが、このタスクが未完了の先行タスクによってブロックされている場合に適用されます。
以下の状況の場合、この状態に入ることができます。
- READY から
- 先行タスクの状態が COMPLETE から WORKING に変わったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果 COMPLETE 状態の代替先行タスクが除去されたとき。
- 先行タスクが COMPLETE 状態ではない場合に、このタスクを後続タスクとして指定するタスク関係を作成したとき。
- WAITING_ALL から
- 昇格操作によって。ただし、事前条件を満たしていることが前提となります (事前条件を満たしていない場合に昇格を試行すると、例外がスローされます)。
以下の状況の場合、タスクはこの状態から移動できます。
- READY へ
- 最後の未完了の先行タスクが COMPLETE 状態になったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果、このタスクを抑制する唯一の先行制約がなくなったとき。
- 先行タスクが COMPLETE 状態になっている場合に、このタスクが後続タスクになるタスク関係を追加したとき。
- WAITING_ALL へ
- 降格操作によって。
準備完了
タスクが、未完了の先行タスクと事前条件のいずれにもブロックされなくなったため、 作業が可能になったことを示します。
以下の状況の場合、この状態に入ることができます。
- WAITING_PREDECESSORS から
- 最後の未完了の先行タスクが COMPLETE 状態になったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果、このタスクを抑制する唯一の先行制約がなくなったとき。
- 先行タスクが COMPLETE 状態になっている場合に、このタスクが後続タスクになるタスク関係を追加したとき。
- WAITING_PRECONDITION から
- 昇格操作によって。ただし、事前条件を満たしていることが前提となります。
- WORKING から
- 降格操作によって。
以下の状況の場合、タスクはこの状態から移動できます。
- WAITING_PREDECESSORS へ
- 先行タスクが COMPLETE 状態から WORKING 状態に変わったとき。
- このタスクが後続タスクになっているタスク関係が削除され、その結果 COMPLETE 状態の代替先行タスクが除去されたとき。
- 先行タスクが COMPLETE 状態ではない場合に、このタスクを後続タスクとして指定するタスク関係を作成したとき。
- WAITING_PRECONDITION へ
- 降格操作によって。
- WORKING へ
- 昇格操作によって。
作業中
WORKING 状態への遷移の結果としてワークフローが開始される場合など、現時点でタスクの作業がアクティブに行われていることを示します。
この状態で、このタスクを後続タスクとして指定するタスク関係を作成しようとしても、そのタスク関係の先行タスクの状態が COMPLETE にならない限り、作成することはできません。(ブロックが伴う依存関係をタスクの開始後に導入することはできません。)
以下の状況の場合、この状態に入ることができます。
- READY から昇格操作によって。
- COMPLETE から降格操作によって。
- FAILED から例外クリア操作によって。
以下の状況の場合、タスクはこの状態から移動できます。
- 降格操作によって READY へ。
- 昇格操作によって COMPLETE へ。
- 例外設定操作によって FAILED へ。
完了
タスクが正常に完了したことを示します。これは、WORKING 状態からの昇格操作によってのみ到達可能であり、 事後条件の検証が前提となります。事後条件が満たされない場合、昇格操作は例外を受け取り、状態は変更されません。
正常に COMPLETE 状態へ遷移すると、後続の (依存) タスクは WAITING_ALL 状態または WAITING_PREDECESSORS 状態から解放されます。
COMPLETE 状態のタスクは、降格操作によって WORKING 状態に戻すことができます。ただし、READY より後の状態に遷移した後続タスクがこのタスクに存在する場合、この遷移は許可されません。この操作が許可される場合、これらの状態に遷移するための条件に従い、READY 状態の後続タスクは WAITING_PREDECESSORS 状態に、WAITING_PRECONDITION 状態の後続タスクは WAITING_ALL 状態にそれぞれ遷移させることができます。
この状態で、このタスクを後続タスクとして指定するタスク関係を作成しようとしても、そのタスク関係の先行タスクの状態が COMPLETE にならない限り、作成することはできません。
失敗
タスクの実行が何らかの理由により失敗したときに適用され、また WORKING 状態からの例外設定操作によってのみ到達します。 エラー条件が解決されると、例外クリア操作によってこのタスクを WORKING に戻すことができます。
この状態で、このタスクを後続タスクとして指定するタスク関係を作成しようとしても、そのタスク関係の先行タスクの状態が COMPLETE にならない限り、作成することはできません。