中間イベントとは、BPMN記法において、ある事柄が1つのプロセスの開始と終了の間で発生する時点を表すモデリング要素である。Intermediate Event。
目次 |
中間イベントの概要
| イベント(Event)とは |
|---|
一連のビジネスプロセスの中で生じる事柄。アクティビティの順序または時期に影響を与える。イベントは、生じる時期によって以下の3種類に分けられる。
|
BPMNにおいて、中間イベントは、個々のプロセスが開始してから終了するまでの間、つまり進行中のプロセスの中で、ある事柄が生じる時点を示す。そのため、中間イベント自体は、あるプロセスを開始させたり終了させたりすることはない。中間イベントはトリガー(イベントの起因となる条件・状況)に反応(catch)したり、そのようなトリガーを設定(throw)したりする。つまり、中間イベントはキャッチイベントとスローイベントの両方の性質を併せ持つ。ただ、すべての中間イベントがその両方の性質を持つわけではない。中間イベントは、プロセスの途中のどのような場合に用いられ、どのような事柄を引き起こしたり設定したりするのかという観点に基づいて、10種類に分類されている。
中間イベントの主な役割
- プロセス内で、メッセージを受け取ったり送ったりする時点を示す。
- プロセス内で、遅延(delay)が予定される時点を示す。
- 例外処理により通常フローを中断し、例外フローへ変更する。
- 補償処理に必要な臨時作業があることを示す。
中間イベントに関する詳細
- 通常フローで用いられた場合、キャッチイベントかスローイベントのどちらかの性質をもつ。
- アクティビティの境界で用いられた場合、キャッチイベントの性質しかもたない。
- キャッチイベントとして用いられた場合、起因(トリガー)となる時間やメッセージなどが来るまで、トークンはイベントのところに留まる。
- スローイベントとして用いられた場合、トークンが到達してすぐにメッセージの送信などのイベントを発生させ、プロセスは次の段階に進む。
中間イベントの表記
中間イベントは、開始イベントや終了イベントとの区別のため、一般に2本の細い線で描かれた円形で表される。中間イベントには10個のタイプ(以下を参照)があり、プロセスが進行している途中で発生するイベント(結果)のタイプによって表記方法が異なる。他のタイプの中間イベントと区別するために、2重円の内部には異なる形状のマーカーが置かれる。
中間イベントは、開始イベントや終了イベントとは異なり、ある場面ではキャッチイベントに分類され、またある場面ではスローイベントにも分類される性質を持ちうる。BPMNでは、キャッチイベントに分類される中間イベントはマーカーの内部が白く塗られており、他方、スローイベントに分類される中間イベントはマーカーの内部が黒く塗られている。
例外処理や補償処理の表記
一般に1つの中間イベントを使って右の図1のように表記する。図1-1と図1-2はともに、アクテイビティAにおいてエラーが発生した時の「例外処理」としてアクティビティBを実行することを示すプロセス図である。 プロセス図が水平方向にある場合は図1-1のように、垂直方向にある場合は図1-2のように表記するのが一般的である。
アクティビティの境界およびフローとの接続
- アクティビティの境界との接続
- 「なし」、「リンク」タイプ以外の中間イベントは、アクティビティの境界に直接置くことができる。複数置くことも可能。
- ※「キャンセル」タイプの中間イベントは、サブプロセスの境界に置くことが可能である。
- 「なし」、「リンク」タイプ以外の中間イベントは、アクティビティの境界に直接置くことができる。複数置くことも可能。
- シーケンスフローとの接続
- (a) 「なし」、「リンク」タイプ以外の中間イベントが、アクティビティの境界に置かれているとき
- シーケンスフローの対象とはならない。つまり、入力シーケンスフローは中間イベントと接続しない。
- シーケンスフローのただ1つの起点となる。つまり、出力シーケンスフローは中間イベントと1つだけ接続する。
- ※「補償」タイプの中間イベントは出力シーケンスフローとも接続しない。
- (b) 「キャンセル」、「エラー」、「複合」タイプ以外の中間イベントが、通常フローで用いられているとき
- 「なし」、「補償」タイプは、ただ1つのシーケンスフローの対象とならなければならない。つまり、これらの中間イベントはただ1つの入力シーケンスフローと接続しなければならない。
- 「メッセージ」、「タイマー」、「条件」、「リンク」、「シグナル」タイプは、ただ1つのシーケンスフローの対象となることができる。つまり、これらの中間イベントはただ1つの入力シーケンスフローと接続することができる。
- シーケンスフローのただ1つの起点となる。つまり、出力シーケンスフローは中間イベントと1つだけ接続する。
- ※「リンク元」タイプの中間イベントは、出力シーケンスフローが不要。
- (c) 「リンク」タイプの中間イベントが、「Off-Pageコネクタ」や「Go To」オブジェクトとして用いられたとき
- シーケンスフローの起点と対象に同時になることはできない。つまり、同時に「リンク元」と「リンク先」の中間イベントとなることはできない。
- 1つの「リンク元」中間イベントがあれば、それに対応する(同じ名称をもつ)「リンク先」中間イベントが存在する。
- 1つの「リンク先」中間イベントに対する「リンク元」中間イベントが、複数存在する場合がある。
- 1つの「リンク元」中間イベントに対する「リンク先」中間イベントが、複数存在してはならない。
- (a) 「なし」、「リンク」タイプ以外の中間イベントが、アクティビティの境界に置かれているとき
- メッセージフローとの接続
- 「メッセージ」タイプの中間イベントは、メッセージフローの起点となることも対象となることも可能。つまり、入力メッセージフローを接続することも出力メッセージフローを接続することも可能。しかし、同時に2つを接続することはできない。
各種の中間イベント
| イベントの起因/トリガー(Triggers) | 説明 | マーカー |
|---|---|---|
| なし(None) | イベントの種類を示さない場合に使用される。プロセスのメインフローに存在する中間イベントに対してのみ有効となる。つまり、この中間イベントは例外フローを導くことはない。プロセスの途中でなんらかの出来事が生じ、状態や状況が変化することを示す。 |
|
| メッセージ(Message) | 関係者からのメッセージを受け取る場合、または関係者へのメッセージを送信する場合に使用される。メッセージの受信または送信を起因(トリガー)としてプロセスに影響を与える。メッセージを待っている場合はプロセスを継続させる。例外処理においては通常フローから例外フローへと切り替える役割を果たす。
|
|
| ||
| タイマー(Timer) | 特定日時または特定サイクル(例えば、「毎週月曜の9 時」など)を、イベントの起因(トリガー)として設定できる場合に使用される。メインフローで使用する場合は、その特定の日時・サイクルが実際に到達するまでプロセスが一時停止する「遅延メカニズム」として作用する。例外処理として使用する場合は、特定の日時・サイクルが実際に到達すると通常フローを例外フローへと切り替える役割を果たす。 |
|
| エラー(Error) | エラー処理を行う場合に使用される。設定された条件を満たすエラー、またはそのような条件が設定されておらず任意の条件で発生するエラーを受け取り(catch)、例外フローへと切り替える役割を果たす(例えばトランザクションがハザードを引き起こした場合)。通常フローの一部となることはなく、常にアクティビティの境界に置かれる。 |
|
| キャンセル(Cancel) | トランザクションのキャンセル処理を行う場合に使用される。トランザクションのサブプロセス内で「キャンセル(失敗終了)」を受け取り、トランザクションの実行をやめ、例外フローヘ切り替える役割を果たす。常にサブプロセスの境界に置かれる。このキャンセル中間イベントが作動するのは、以下の2つの場合である。
|
|
| 補償(Compensation) | 補償処理を行う場合に使用される。補償(アクティビティ実行前の状態に回復すること)を設定したり実行したりする。常にアクティビティの境界に置かれる必要がある。
通常フロー内のアクティビティには、補償が必要であることを示す「スローイベント」型が境界に置かれる。このイベントと関連(Association)で結ばれた「補償アクティビティ」が実行され、元のアクティビティは補償を受ける。それ以外の、最高次のプロセスからサブプロセスまでのすべてを含めたプロセスインスタンスの内部で終了したアクティビティは、終了順序とは逆の順序で広く補償が行われる。 |
|
| ||
| 条件(Conditional) | 特定の条件式を設定する場合に使用される。設定された条件式が「真(true)」となることが起因(トリガー)となってプロセスに影響を与える。 |
|
| リンク(Link) | プロセス内でループ環境を作り出す場合、またはシーケンスフローの列の長大化を避ける場合に使用される。同じプロセスレベルの中でのみ用いられる。
リンクは、プロセス内の2つの部分をつなぐメカニズムであるが、親プロセスとサブプロセスをつなぐことはない。リンク中間イベントは、リンク元(Source)とリンク先(Target)に1つずつ設けられて、互いに対応する。対となる中間イベントは、複数のページにまたがるプロセスの接続関係を示すため、Off-Pageコネクタとしても用いられる。逆に、同じプロセス内で詳細なプロセス図を展開するための「Go To」オブジェクトとして、用いられる。リンク元は複数あってもよいが、リンク先はただ1つでなければならない。 |
|
| ||
| シグナル(Signal) | プロセス進行中にシグナルを送ったり受け取ったりする場合に使用される。この中間イベントが通常フローの中で使用されるとき、このイベントはシグナルを受け取る(catch)こともを送る(throw)ことも可能。ただし、アクティビティの境界上に置かれた場合、シグナルを受け取る役割しか持たない。
シグナルとは、なんらかの内容を持つ合図である。発信源は特定されるが特定の相手はいない。これが特定の発信源と相手がいる「メッセージ」と異なる点である。BPMNでは、シグナルは同じプロセスレベルの中で伝わったり、異なるプロセスレベルの間で伝わったり、プールを横切って伝わったり、業務フロー図同士で伝わったりする。 |
|
| ||
| 複合(Multiple) | プロセス進行中に起こるイベントに対する起因(トリガー)が複数ある場合に使用される。通常フローの中で使用されるとき、このイベントはトリガーに反応することもトリガーを設定することも可能。ただし、アクティビティの境界上に置かれた場合、トリガーに反応する役割しか持たない。
|
|
|
BPMN1.0仕様からの変更点
BPMN1.0仕様からBPMN1.1仕様への移行によって、表記および名称の点で変更が見られた。
- 「メッセージ」タイプにおいて、新たに「スローイベント」型が追加
- 「エラー」タイプのマーカーデザインがより極太に
- 「キャンセル」タイプにおいて、「スローイベント」型から「キャッチイベント」型へ変更
- 「補償」タイプにおいて、新たに「キャッチイベント」型が追加
- 「条件」タイプにおいて、トリガーの名称変更(「ルール」→「条件」)
- 「リンク」タイプにおいて、新たに「キャッチイベント」型が追加
- 「シグナル」というトリガーがBPMN1.1仕様で新たに追加
- 「複合」タイプのマーカーデザインが「六芒星(ろくぼうせい)」から「五角形」へ変更、新たに「キャッチイベント」型が追加
関連記事
参考文献
- BPMN1.1仕様(2008-01-17)
- BPMN超入門 第4話:BPMN図だけで業務システムが構築できるか?(07/03/2009)





















