4.3.5. ゲートウェイ¶
ゲートウェイはプロセスフローの分岐・結合に利用します。ゲートウェイを使用することで複数のタスクを同時並行で処理することや、特定の条件を評価することによってプロセスフローを変更することを可能にします。ゲートウェイは分岐・結合の条件によって、4つに分類されます。
4.3.5.1. ParallelGateway(パラレルゲートウェイ)¶
パラレルゲートウェイは、無条件で同時並行に分岐し、シーケンスフローが次の処理に進む事を表します。結合の際には、全てのシーケンスフローの到着を待ってプロセス定義の実行が継続されます。
- パラレルゲートウェイで分岐を行うためには、パラレルゲートウェイから複数のアクティビティにシーケンスフローを接続する必要があります。
- パラレルゲートウェイで結合を行うためには、複数のアクティビティからパラレルゲートウェイにシーケンスフローを接続する必要があります。
4.3.5.1.1. パラレルゲートウェイの配置¶
- IM-BPM Designerの画面右側PaletteのGatewayにあるParallelGatewayをクリックします。
![]()
- エディタ上のパラレルゲートウェイを定義したい場所をクリックします。
![]()
- これでパラレルゲートウェイが定義されました。
![]()
4.3.5.1.2. パラレルゲートウェイによる分岐と結合¶
次のようにパラレルゲートウェイで分岐を行った場合、Task1、Task2両方にシーケンスフローが進みます。
パラレルゲートウェイで結合を行った場合、Task1、Task2両方のシーケンスフローの到着を待って次のシーケンスフローに進みます。
4.3.5.2. ExclusiveGateway(排他ゲートウェイ)¶
条件式を評価する事で分岐先を決定することができます。条件式を評価するためには接続されている「Sequence Flow」に条件式の設定が必要です。最初に評価が真となる1つのシーケンスフローだけが継続し次の処理に進む事を表します。
- 排他ゲートウェイで分岐を行うためには、排他ゲートウェイから複数のアクティビティにシーケンスフローを接続する必要があります。
- 排他ゲートウェイで結合を行うためには、複数のアクティビティから排他ゲートウェイにシーケンスフローを接続する必要があります。
4.3.5.2.1. 排他ゲートウェイの配置¶
- IM-BPM Designerの画面右側PaletteのGatewayにあるExclusiveGatewayをクリックします。
![]()
- エディタ上の排他ゲートウェイを定義したい場所をクリックします。
![]()
- これで排他ゲートウェイが定義されました。
![]()
4.3.5.2.2. 排他ゲートウェイによる分岐と結合¶
- 次のように排他ゲートウェイから分岐するシーケンスフローそれぞれに条件が定義されているものとします。
変数「input」の値を評価する条件です。
シーケンスフロー | 条件 |
---|---|
Task1へのシーケンスフロー | ${input == 1} |
Task2へのシーケンスフロー | ${input == 2} |
Task3へのシーケンスフロー | ${input == 3} |
排他ゲートウェイでは接続されているシーケンスフローに定義されている条件を評価し、真となる1つのシーケンスフローに進みます。複数の条件が真となる場合、最初に真となったシーケンスフローに進みます。変数「input」の値が1の場合は、次のように進みます。![]()
4.3.5.3. InclusiveGateway(包括ゲートウェイ)¶
条件式を評価する事で分岐先を決定することができます。条件式を評価するためには接続されている「Sequence Flow」に条件式の設定が必要です。排他ゲートウェイと異なる点は、評価が真となるシーケンスフローに対して1つの分岐先に決定せず、同時並行で次の処理に進むことができます。
- 包括ゲートウェイで分岐を行うためには、包括ゲートウェイから複数のアクティビティにシーケンスフローを接続する必要があります。
- 包括ゲートウェイで結合を行うためには、複数のアクティビティから包括ゲートウェイにシーケンスフローを接続する必要があります。
4.3.5.3.1. 包括ゲートウェイの配置¶
- IM-BPM Designerの画面右側PaletteのGatewayにあるInclusiveGatewayをクリックします。
![]()
- エディタ上の包括ゲートウェイを定義したい場所をクリックします。
![]()
- これで包括ゲートウェイが定義されました。
![]()
4.3.5.3.2. 包括ゲートウェイによる分岐と結合¶
- 次のように包括ゲートウェイから分岐するシーケンスフローそれぞれに条件が定義されているものとします。
変数「input」の値を評価する条件です。
シーケンスフロー | 条件 |
---|---|
Task1へのシーケンスフロー | ${input == 1} |
Task2へのシーケンスフロー | ${input == 1} |
Task3へのシーケンスフロー | ${input == 5} |
包括ゲートウェイでは接続されているシーケンスフローに定義されている条件を評価し、真となるシーケンスフローが並行に進みます。
変数「input」の値が1の場合は、次のように進みます。
4.3.5.4. EventGateway(イベントゲートウェイ)¶
イベントに対して条件を評価する事で分岐先を決定することができます。中間イベントのキャッチイベントに接続されている必要があります(キャッチイベントの詳細については「中間イベント」を参照してください)。イベントゲートウェイは他のゲートウェイと分岐の仕方が異なり、シーケンスフローで接続したキャッチイベントの状態で真偽を評価します。接続先のキャッチイベントが実行状態になった時に、真であると判断します。複数の評価が真となる場合、最初に評価が真となる1つのシーケンスフローだけを継続して次の処理に進む事を表します。イベントゲートウェイで分岐を行うためには、イベントゲートウェイから複数のキャッチイベントにシーケンスフローを接続する必要があります。
4.3.5.4.1. EventGatewayの配置¶
- IM-BPM Designerの画面右側PaletteのGatewayにあるEventGatewayをクリックします。
![]()
- エディタ上のイベントゲートウェイを定義したい場所をクリックします。
![]()
- これでイベントゲートウェイが定義されました。
![]()
4.3.5.4.2. イベントゲートウェイによる分岐¶
次のようにイベントゲートウェイで分岐を行う場合には、キャッチイベントを配置しシーケンスフローで接続している必要があります。
ここではTimerCatchingEventとSignalCatchingEventに接続しています。
EventGatewayにシーケンスフローが到達するとTimerCatchingEventとSignalCatchingEventがそれぞれ待機状態となります。
TimerCatchingEventに設定された期間が経過するとSignalCatchingEventの処理は中断されTimerCatchingEventからのシーケンスフローだけが次に進みます。
TimerCatchingEventに設定された期間が経過するより早くSignalCatchingEventがシグナルを受信した場合は、TimerCatchingEventの処理が中断されSignalCatchingEventからのシーケンスフローだけが次に進みます。
4.3.5.5. Default flow(デフォルトフロー)¶
4.3.5.5.1. デフォルトフローによる分岐¶
ゲートウェイの分岐に接続された全てのシーケンスフローの条件が偽になるとプロセスはそれ以上進む事ができなくなります。
- ここではExclusiveGatewayによる分岐を行っています。
デフォルトフローが設定されているとそのシーケンスフローの条件が偽であっても次の処理に進む事ができます。