最近のアクセス:
ワークフローエンジンの状態

はじめに

ワークフローエンジンの作業パフォーマンスにとって重要なコンポーネントは、ステートマシンです。ステートマシンでは、ワークフローエンジンによって内部的に行われる内部/外部イベントまたは特定のコントロールの決定に従って、プロセス、プロセスインスタンス、および作業項目が状態を変更します。

 

プロセス定義の状態

プロセス定義は、有効または無効にできます。これにより、この定義に基づく新しいプロセスインスタンスを作成できるかどうかが決まります。  
次の図に、プロセス定義の状態を示します: 
 
イメージ:17674.png
 
Enabled: プロセス定義が有効な場合、新しいプロセスインスタンスを作成できます。
 
Disabled: プロセス定義が無効な場合、新しいプロセスインスタンスを作成できません。 

 

プロセスインスタンスの状態

次の図に、プロセスインスタンスの状態を示します:  
イメージ:17676.png
open
プロセスインスタンスが作成されると、そのプロセスインスタンスは open 状態になります。これは、ワークフローエンジンによって実行されている間にプロセスインスタンスが取り得るすべての状態の親状態 (superstate) です。プロセスインスタンスの実行が停止すると、そのプロセスインスタンスは closed 状態になります。
 
open.notRunning
ワークフロープロセスの実行にアクティブに参加していない場合、プロセスインスタンスは open.notRunning 状態です。open.notRunning 状態の場合、open.running 状態や、closed.aborted または closed.terminated 状態に変更できます。
 
open.notRunning.notStarted
ワークフロープロセスの実行へのアクティブな参加を開始していない場合、プロセスインスタンスは notStarted 子状態 (substate) です。
例: &ProcessDefinition.CreateInstance() メソッドが実行されると、作成されるプロセスインスタンスは open.notRunning.notStarted 状態になります。
 
open.notRunning.suspended
プロセスインスタンスの実行が一時停止されると、そのプロセスインスタンスは suspended 子状態になります。  さらに、この状態 (suspended) は、一時停止されたプロセスインスタンスに属するすべてのアクティブなオブジェクト (作業項目、サブプロセス) に継承されます。つまり、プロセスインスタンスがこの状態のままの間は、そのインスタンスに含まれるほかのワークフローオブジェクトは、ワークフロープロセスの実行にアクティブに参加できません。
例: &ProcessInstance.Suspend() メソッドが実行されると、そのプロセスインスタンスは open.notRunning.suspended 状態になります。
 
open.running
ワークフロープロセスの実行へのアクティブな参加を開始すると、そのプロセスインスタンスは open.running 状態になります。open.running 状態の場合、suspended 状態や closed 状態に (したがって、その子状態、つまり、aborted、terminated、または completed に) 変更できます。
例: &ProcessInstance.Start() メソッドが実行されると、そのプロセスインスタンスは open.running 状態になります。
 
closed
ワークフロープロセスの実行に参加しなくなると、そのプロセスインスタンスは closed 状態になります。
 
closed.completed
プロセスインスタンスが実行を正常に停止すると、そのプロセスインスタンスは closed.completed 状態になります。  これにより、プロセスインスタンスに属するすべてのワークフローオブジェクトが停止したと見なされます。
closed.completed 状態になれる ProcessInstance オブジェクトには、メソッドはありません。この状態には、外部イベントやアクションによってではなく、インスタンスの通常の停止によってのみ移行します。  
 
closed.terminated
プロセスインスタンスの実行は、closed.terminated 状態にして、通常の実行を停止する前に停止することができます。  現在、この状態は、プロセスインスタンスの期限の発生 (*) を表すために使用されます。つまり、プロセスインスタンスの期限が発生すると、そのプロセスインスタンスは closed.terminated 状態になります。さらに、この状態は、中止されたプロセスインスタンスに属するすべてのアクティブなオブジェクト (作業項目、サブプロセス) に継承されます。
 
(*) 期限の発生をモデル化する際に、(作業項目のように) expired 状態を使用する代わりに terminated 状態を使用する理由は、プロセスインスタンスに対して WFMC が提案するステートマシンとの互換性を維持するためです。   
 
closed.aborted
プロセスインスタンスは、closed.aborted 状態にして、通常の実行が終了する前に (または実行を開始する前に) 中止することができます。さらに、この状態は、中止されたプロセスインスタンスに属するすべてのアクティブなオブジェクト (作業項目、サブプロセス) に継承されます。
例: &ProcessInstance.Abort() メソッドが実行されると、そのプロセスインスタンスは closed.aborted 状態になります。 
 

状態のトランジション

 
プロセスインスタンスが作成されると、初期状態、つまり、open.notRunning.notStarted になります。この場合 (元は notStarted 状態)、ほとんどの一般的なトランジションは、プロセスインスタンスを開始すると発生する、open.running 状態へのトランジションです。
その他のトランジション (suspended 状態にも共通) は、closed.terminated または closed.aborted 状態へのトランジションです。running 状態から notRunning 状態へのトランジションは、suspended 子状態のみ可能です。プロセスインスタンスの実行が停止すると、そのプロセスインスタンスは closed 親状態になります。停止の仕方によって、その子状態は、completed、terminated、または aborted になります。completed 状態は、プロセスインスタンスの通常の停止を表すので、running 状態からのみ移行できます。terminated 状態には、プロセスインスタンスの期限が発生した場合になります。最後に、aborted 状態は、プロセスインスタンスの実行が中止された場合に発生します。
closed 状態が最終です。つまり、closed 状態から open 状態へのトランジションはありません。

 

作業項目の状態

次の図に、作業項目の状態を示します:
イメージ:17675.png
 
open
作業項目が作成されると、その作業項目は open 状態になります。これは、処理されていない間に作業項目が取り得るすべての状態の親状態 (superstate) です。
 
open.active
作業項目が open.active 状態になると、この作業項目を処理する権利を持つすべてのユーザーのワークリストに作業項目が追加されます (このために、ワークフローエンジンはユーザーのロールおよび制限に基づいています)。さらに、作業項目がこの状態にある間、ユーザーは、作業項目の子状態に応じて、作業項目に対して特定のアクション (取得、解放、実行、次へ) を実行できます。
 
open.active (または任意の子状態: ready、assigned、in_process) から、open.suspended 状態へのトランジションがあります。このトランジションは、作業項目が属するプロセスインスタンスが一時停止された場合に発生します。  
 
open.active.ready
作業項目が作成されて、まだどのユーザーにも割り当てられていない場合、作業項目は open.active.ready 状態です。この状態からのほとんどの一般的なトランジションは、ユーザーが作業項目を取得する (取得アクション) と発生する、open.active.assigned 状態へのトランジションです。
 
open.active.assigned
ユーザーが作業項目に自分自身を割り当てると (取得アクション、作業項目が open.active.ready 状態の場合にのみ可能)、その作業項目は open.active.assigned 状態になります。この瞬間、ワークフローエンジンは、作業項目を共有するほかのユーザーのワークリストから作業項目を削除します。  この状態から、open.active.ready 状態 (解放アクション)、open.active.in_process 状態 (実行アクション)、および closed.abnormal 状態 (イベントまたはワークフローエンジンの内部アクションによる) へのトランジションがあります。
 
open.active.in_process
作業項目を割り当てられたユーザーが作業項目の処理を開始する (関連するアプリケーションを実行する) と、その作業項目は open.active.in_process 状態になります。  ユーザーが作業項目を完了する (次へアクション) まで、(ユーザーがアプリケーションを実行する数と回数に関係なく) 作業項目はこの状態のままです。そして、closed.completed 状態へのトランジションを引き起こします。別の可能性は、closed.abnormal 状態へのトランジションです。作業項目が属するプロセスインスタンスが中止された (closed.abnormal.aborted 状態へのトランジション) か、または、イベントまたはワークフローエンジンが取る内部アクションが原因 (closed.abnormal.expired、closed.abnormal.left_aside、または closed.abnormal.terminated 状態へのトランジション) です。
 
open.suspended
作業項目が属するプロセスインスタンスが一時停止された場合、その作業項目は open.suspended 状態になります。プロセスインスタンスの実行が再開されると、作業項目は元の状態に戻ります (open.active 状態へのトランジション)。また、open.suspended 状態 (closed.abnormal 状態へのトランジション) である間の作業項目の異常停止の原因になる、内部/外部イベントが発生する可能性もあります。
 
closed
作業項目の処理を “停止” すると、その作業項目は closed 状態になります。この停止は、ワークフローエンジンが取る外部イベントまたは内部アクションによる作業項目の処理の通常の停止によって生じることがあります。closed 状態が最終状態です。つまり、この状態からほかの状態へのトランジションはありません。
 
closed.completed 
作業項目の処理が正常に停止する (ユーザーが作業項目を処理し、完了する (次へアクション)) と、その作業項目は closed.completed 状態になります。
 
closed.abnormal
作業項目が異常停止すると、その作業項目は closed.abnormal 状態になります。この異常は、ワークフローエンジンが取るイベントまたは内部アクションによって生じることがあります。
 
closed.abnormal.terminated
作業項目が属するプロセスインスタンスに割り当てられた期限が切れると、その作業項目は closed.abnormal.terminated 状態になります。expired および terminated 状態の存在によって、作業項目の期限の発生を、その作業項目が属するプロセスインスタンスの期限の発生と区別することができます。
 
closed.abnormal.aborted
作業項目が属するプロセスインスタンスの実行が中止されると、その作業項目は closed.abnormal.aborted 状態になります。
 
closed.abnormal.expired
作業項目に割り当てられた期限が切れると、その作業項目は closed.abnormal.expired 状態になります。 
 
closed.abnormal.delegated
作業項目がほかのユーザーに割り当てられると、その作業項目は closed.abnormal.delegated 状態になります。
 
closed.abnormal.skipped
ワークフローエンジンが作業項目を除外している場合 (ある状況下で、ワークフローエンジンが作業項目を破棄して、実行する必要がなくなった場合)、その作業項目は closed.abnormal.skipped 状態になります。
 
closed.abnormal.undone
作業項目が再実行されていない場合、その作業項目は closed.abnormal.undone 状態になります。
 
closed.abnormal.interrupted
添付されたイベントによって作業項目が中断された場合、その作業項目は closed.abnormal.interrupted 状態になります。
 

状態のトランジション

 
新しい作業項目が作成されると、その作業項目は open.ready 初期状態になります。これは、その処理を開始する状態になったことを示しています。open.ready 状態になると、作業項目をユーザーに割り当てることができ、そうして open.assigned 状態になります。このトランジションは、反対方向に行うこともでき (解放アクション)、したがって作業項目を open.ready 状態に戻すことができます。
ユーザーが作業項目の処理を開始すると (実行アクション)、その作業項目は open.in_process 状態になります。
 
open.active 親状態から open.suspended 状態に、およびその逆に変更できます。これらのトランジションは、作業項目が属するプロセスインスタンスの実行が一時停止または再開された場合に発生します。
作業項目の処理が停止した場合 (次へアクション)、その作業項目は closed 状態になります。作業項目の停止の仕方によって、トランジションは closed.completed 状態または closed.abnormal 親状態になります。
 
closed.completed 状態には、作業項目の通常の停止を表すので、open.active.in_process 状態からのみ移行できます。一方、closed.abnormal 状態には、異常停止が発生した場合に、任意の open 子状態から移行できます。aborted および terminated 子状態には、作業項目が属するプロセスインスタンスがそれぞれ中止または停止された場合になります。さらに、expired 子状態には、作業項目に割り当てられた期限が切れた場合になります。最後に、ワークフローエンジンが計画スキームに基づき、実行を不要と見なして作業項目を除外することを決定すると、skipped 子状態になります。
 
closed 状態は、最終の状態です。つまり、closed 状態から open 状態へのトランジションはありません。 
 








サブページ
Created: 14/09/18 03:11 by Admin Last update: 21/05/21 04:31 by Admin
カテゴリ
Powered by GXwiki 3.0