ゲートウェイを使用した制御プロセス・フロー
ゲートウェイはビジネス・プロセスのフローを定義するフロー要素です。 ゲートウェイはビジネス・プロセスでトークンが通るパスを決定します。 パスを分割およびマージすることにより、ビジネス・プロセス内のコントロール・ポイントを定義します。 可能な場合、ゲートウェイは、ビジネス・プロセスのデフォルト・パスの例外、またはそこから外れたパスに使用されます。
排他的ゲートウェイ: 1つのパスのみを通過(データ条件)
排他的ゲートウェイにより、ビジネス・プロセスを2つ以上のパスに分割します。 しかし、ビジネス・プロセスは、複数の送信シーケンス・フローが存在したとしても、これらのパスのいずれか1つのみを進みます。 排他的ゲートウェイは条件付き送信シーケンス・フローを持つことができ、少なくとも1つのデフォルト送信シーケンス・フローを持つ必要があります。
プロセスが条件付きシーケンス・フローに続くかどうかを決定するのに使用される式を定義できます。 「式の使用」を参照してください。
排他的ゲートウェイのフローの評価
プロセス・トークンが排他的ゲートウェイに到達すると、送信シーケンス・フローは、いずれかがTrueになるまで評価されます。
ゲートウェイのプロパティを構成することで、フローの評価順序を定義できます。
-
1つの送信シーケンス・フローのみがTrueに評価された場合、プロセス・トークンはその送信シーケンス・フローの次のフロー要素に進みます。
-
複数の送信シーケンス・フローがTrueに評価された場合、プロセス・トークンは、ゲートウェイのプロパティで定義した順序に従って、最初のシーケンス・フローに進みます。
-
どの送信シーケンス・フローもTrueに評価されない場合、プロセス・トークンはデフォルトの送信シーケンス・フローに進みます。 そのため、排他的ゲートウェイ用のデフォルトの送信シーケンス・フローを定義する必要があります。
他のゲートウェイとは異なり、排他的ゲートウェイでは、プロセスの分割後に、対応するマージを明示的に定義する必要はありません。
ノート:
排他的ゲートウェイは受信シーケンス・フローをマージすることもできます。 しかし、プロセス・フロー内で他のパスから来た他のトークンとは同期されません。 他のトークンが排他的ゲートウェイのマージに到達すると、そのまま通り過ぎます。 トークンを同期する場合、または受信シーケンス・フローで評価を実行する場合、他のタイプのゲートウェイを使用する必要があります。排他的ゲートウェイの例
次の図に、ローン承認ビジネス・プロセス内で使用される排他的ゲートウェイの例を示します。 ここで、排他的ゲートウェイは、ローン申込みが承認されるかどうか、または追加情報が必要かどうかを評価するために使用されます。
この評価は送信条件付きシーケンス・フロー用に定義された式により決定されます。 式がtrueに評価された場合、プロセス・フローは「No」のパスへ進みます。 この評価がfalseの場合、プロセス・フローはデフォルトの送信シーケンス・フローのパスへ進みます。
包含的ゲートウェイ: 1つ以上のパスを通過
包含的ゲートウェイにより、ビジネス・プロセスを2つ以上のパスに分割します。 しかし、排他的ゲートウェイとは異なり、送信条件付きシーケンス・フローの評価方法によっては、トークンがこれらの1つ以上のパスを進む可能性があります。
包含的ゲートウェイでは分割-マージ・ペアが必要です。 ビジネス・プロセスに包含的ゲートウェイを追加すると、分割およびマージ・フロー・オブジェクトが自動的に作成されます。

図inclusive-gateway-pair.pngの説明
ゲートウェイのマージ部分は必須です。 ただし、分割からのすべてのパスがマージに戻るようにする必要はありません。
ゲートウェイ経由でマージせずに、プロセス・パスをゲートウェイで分割することは可能ですが、この方法を使用することはお薦めしません。
ノート:
ビジネス・プロセスからマージ・ゲートウェイを削除する場合、対応する分割ゲートウェイも削除されます。包含的ゲートウェイの分割およびマージ
包含的ゲートウェイは排他的ゲートウェイと同様にビジネス・プロセスを分割しますが、トークンは1つ以上の送信シーケンス・フローを進むことができます。 1つの包含的ゲートウェイの分割に対して、任意の数の送信条件付きシーケンス・フローを定義できます。 少なくとも1つのデフォルト・シーケンス・フローを定義する必要があります。
トークンが包含的ゲートウェイに到達すると、その条件付きシーケンス・フローの式が評価されます。
次に、Trueに評価される条件付きシーケンス・フローそれぞれに対してトークンが生成されます。 どの条件付きシーケンス・フローもTrueに評価されない場合にのみ、デフォルトのシーケンス・フローに対してトークンが生成されます。
これらのトークンは包含的ゲートウェイのマージで結合されます。 トークンがマージ・ゲートウェイに到達すると、分割により生成されたすべてのトークンがマージに到達するまで待機します。 すべてのトークンが包含的ゲートウェイのマージに到達した後、マージが完了し、トークンはゲートウェイの後の次のシーケンス・フローへと進みます。
並列ゲートウェイ: すべてのパスを同時に通過
プロセス・フローがすべてのパスを同時に進むようにしたい場合、並列ゲートウェイにより、ビジネス・プロセスを2つ以上のパスに分割します。 並列ゲートウェイは、ビジネス・プロセスが複数のタスクを並列に実行する必要がある場合に有用です。
並列ゲートウェイでは分割-マージ・ペアが必要です。 ビジネス・プロセスに並列ゲートウェイを追加すると、分割およびマージ・フロー・オブジェクトが自動的に作成されます。
ゲートウェイのマージ部分は必須です。 ただし、分割からのすべてのパスがマージに戻るようにする必要はありません。
ゲートウェイ経由でマージせずに、プロセス・パスをゲートウェイで分割することは可能ですが、この方法を使用することはお薦めしません。
ノート:
ビジネス・プロセスからマージ・ゲートウェイを削除する場合、対応する分割ゲートウェイも削除されます。並列ゲートウェイの分割およびマージ
トークンが並列ゲートウェイに到達すると、並列ゲートウェイは各送信シーケンス・フローに対してトークンを作成します。 並列ゲートウェイの分割はいずれの送信シーケンス・フローも評価しません。
並列ゲートウェイを使用して、並列ゲートウェイにより分割されたプロセス・パスをマージすることもできます。 並列ゲートウェイのマージでは、トークンが各受信シーケンス・フローから到達するのを待ちます。 すべてのトークンが到達した後、1つのトークンだけが送信シーケンス・フローに渡されます。
ノート:
トークンが並列ゲートウェイのマージ用の各受信シーケンス・フローに到達するように、ビジネス・プロセスを設計する必要があります。 そうしないと、到達しないトークンをマージが必要とする場合に、ビジネス・プロセスがフリーズする可能性があります。並列ゲートウェイの例
この例に示す販売見積プロセスでは、承認ステージで並列ゲートウェイを使用しています。 次の図に、並列ゲートウェイを使用してすべてのプロセス・パスを同時に実行する方法を示します。
イベントベース・ゲートウェイ: 1つのパスのみを通過(イベント発生時)
イベントベース・ゲートウェイでは、イベントが発生する可能性に基づいて、プロセス・フローを分岐できます。 コンテキストに応じて、イベントは複数あるタイプのうちのいずれかになります。
イベントベース・ゲートウェイを使用すると、プロセス内の特定のポイントでいくつかのタイプのイベントが発生する可能性を想定できます。 イベントベース・ゲートウェイは排他的ゲートウェイと似ていますが、データ固有の条件(式)に基づいてパスを選択するのではなく、プロセス内でのイベントの発生に基づいてパスを選択します。
たとえば、注文処理プロセスでは、現在利用できる在庫がないときに、プロセス内のあるポイントに到達する可能性があります。 プロセスでは、在庫が補充されるまで待機する必要がありますが、無期限に待機することはできません。 イベントベース・ゲートウェイを使用すると、プロセスは、新しい在庫を受け入れたことを示すメッセージを待機したり(メッセージ捕捉イベントを使用)、一定の時間が経過してもメッセージを受信しない場合にプロセスを続行することができます(タイマー・イベントを使用)。
イベントベース・ゲートウェイのターゲット・イベント
イベントベース・ゲートウェイは、プロセス・フローに関する決定が、データ固有の条件ではなく、イベントに基づいていることが、他のゲートウェイとは異なります。 イベントベース・ゲートウェイの場合、次のターゲット・イベントを2つ以上定義します。
-
メッセージ捕捉イベント: メッセージ捕捉イベントを使用してプロセスを開始する場合、メッセージ・スロー・イベントを使用してプロセスを起動する必要があります。
-
タイマー捕捉イベント: 通常、イベントベース・ゲートウェイに続いて1つのみのタイマー・イベントが使用されます。
-
受信タスク: イベントベース・ゲートウェイの後に受信タスクを使用してプロセス・インスタンスを開始できます。 ただし、プロセスは呼出し元のプロセス内の送信タスクから起動する必要があります。
ノート:
同じイベントベース・ゲートウェイ内でメッセージ・イベントと受信タスクを組み合せて使用することはできません。ターゲット要素では、イベントベース・ゲートウェイからの受信シーケンス・フローのみを処理できます。 プロセスの他の部分からのシーケンス・フローは処理できません。 イベントベース・ゲートウェイを使用すると、プロセス内で複数のイベントが発生するように計画できますが、プロセス・インスタンス内でトリガーされるイベントは1つのみです。 イベントベース・ゲートウェイの最初のイベントがトリガーされると、そのイベントの後のパスに進みます。
イベントベース・ゲートウェイをプロセスに追加した場合、関連するターゲット・イベントは作成されません。 イベントベース・ゲートウェイを削除した場合、送信シーケンス・フローも削除されます。 関連付けられているイベントは削除されません。
イベントベース・ゲートウェイを使用したプロセスの開始
プロセスの先頭でイベントベース・ゲートウェイを使用して、新しいプロセス・インスタンスを作成することもできます。 このことは、1つのプロセス内で複数の開始イベントを使用する場合と似ています。
イベントベース・ゲートウェイで新しいプロセス・インスタンスを作成できるようにするには:
-
イベントベース・ゲートウェイのインスタンス化プロパティを有効にする必要があります。
-
受信シーケンス・フローがイベントベース・ゲートウェイに進むことはできません。
-
プロセスには、イベントベース・ゲートウェイに加えて、メッセージ開始イベントなどの他の開始イベントが少なくとも1つ必要です。
イベントベース・ゲートウェイを使用して新しいプロセス・インスタンスを作成することは可能ですが、別のプロセスからのデータ入力は受け入れられません。 プロセス・インスタンスに渡すデータは、ターゲット・イベントを使用して構成する必要があります。



