イベントとは、プロセスの実行中に起こる何らかの事象のことで、プロセスフローに影響を及ぼします。イベントはプロセス内のアクティビティの順序やタイミングを変更します。いくつかのイベントは、タイマー、メッセージ、シグナル、エラー、手動のトリガーやAPI コールを持っています。
イベントには、開始、終了、中間の3つの種類があります。開始イベントは、プロセスフローの開始点にあります。終了イベントは、フローの終了点にあります。中間イベントは、プロセス図内の1つの要素になるか、あるいは、タスクまたはコールアクティビティの境界線にアタッチされます。
下表はプロセス図内で使用できるイベントを示します。境界イベントとして設定できるイベントは、(B) のマークで示します。タイマー非中断は、境界イベント (B のみ) としてのみ設定できます。
トリガー | 開始イベント | 中間イベント | 終了イベント |
---|---|---|---|
なし | 開始(手動) | キャッチ リンク、スロー リンク | 終了、停止 |
メッセージ | メッセージ開始 | メッセージ キャッチ (B) 、メッセージ スロー | メッセージ終了 |
タイマー | タイマー開始 | タイマー (B) 、タイマー非中断 (B のみ) | |
シグナル | シグナル開始 | シグナル キャッチ (B) 、シグナル スロー | シグナル終了 |
エラー | エラー開始 | エラー キャッチ (B) | エラー終了 |
タイマー イベント
メッセージ イベント
シグナル イベント
エラー イベント
トリガーなしイベント
イベントとマルチインスタンスのコールアクティビティ
タイマー イベント
タイマーイベントは、次の用途で使用されます:
- 固定の日時、または一定時間間隔(タイマー開始イベント)で定期的にプロセスの開始を繰り返す
- ある特定の日時まで、あるは時間の間、プロセスの進行を遅らせる(タイマー中間イベント)
- あるタスクがある締め切り日時に到達するまでカウントダウンする(タイマー境界イベントまたはタイマー非中断境界イベント)
タイマー条件には次の3種類があります:
- サイクル: 繰り返し予定でイベントを発生させる(タイマー開始イベントのみ使用可能)
- 固定日付: ある特定の日時でイベントを発生させる
- Duration: ある特定の滞留時間後にイベントを発生させる
タイマーイベントは、コネクタを使用したトリガーのアクション条件を含めることもできます。
タイマー開始イベント
ある特定の日時、またはある特定の滞留時間(duration)後のスケジュールでプロセスをで繰り返し起動するには、タイマー開始イベントを使用します。
スケジュールをセットするには、タイマー開始イベントを選択して、[詳細] パネル -> [全般] タブに進み、[編集…] をクリックし、タイマー条件をセットします。時間間隔(duration)ベースの条件を定義した場合は、指定した時間間隔をカウントダウンし、ゼロになった時点でプロセスを起動します。
タイマー中間イベント
タイマー中間イベントは、指定時間が経過するまで、または、指定日時になるまで、プロセスフローの実行を中断する遅延メカニズムとして使用します。
時間間隔、または遅延最終日時を定義するには、タイマー中間イベントを選択して、[詳細] パネル -> [全般] タブに進み、[編集…] をクリックし、タイマー条件をセットします。
タイマー境界イベント
タイマー境界イベントは、アクティビティが終了しなければならない締め切りをセットするために使用します。ヒューマンタスク、またはコールアクティビティに、このタイマー境界イベントをセットできます。アクティビティがその締め切り前に開始しない場合は、そのタイマーイベントがトリガーされ、通常のプロセスフローを例外フローに迂回させます。たとえば、着手が遅くなったタスクを通知するために、タイマー境界イベントを使用できます。締め切りには、時間間隔(たとえば、48時間)あるいは特定日時をセットできます。
締め切りをセットするためには、タイマー境界イベントを選択して、[詳細] パネル -> [全般] タブに進み、[編集…] をクリックし、タイマー条件をセットします。
タイマー非中断境界イベント
タイマー非中断境界イベントは、通常のプロセスフローと並行して例外フローを開始するために使用します。ヒューマンタスク、またはコールアクティビティに、このタイマー非中断境界イベントをセットできます。遅延時間、または固定日時でその締め切りを定義できます。アクティビティがその締め切り前に開始しない場合は、そのタイマーイベントがトリガーされ、例外フローに開始します。このとき、通常のプロセスフローも続行します。たとえば、タイマー非中断境界イベントを使用して、あるタスクが遂行待ちの状態にあることを利用者に通知するイベントトリガーを発生させることができます。
締め切りをセットするためには、タイマー非中断境界イベントを選択して、[詳細] パネル -> [全般] タブに進み、[編集…] をクリックし、タイマー条件をセットします。
例: cron を使用しタイマーサイクルを指定する
例: スクリプトを使用し日付または時刻を指定する
メッセージ イベント
メッセージは、あるプロセスから別のプロセスの同期処理または非同期処理ポイントに情報を送信するために使用します。メッセージはデータを含むことができます。メッセージは、ポイントツーポイントのコミュニケーションで、メッセージはメッセージを受信するために構成設定された受け手側の特定プール内の特定のタスクに送られます。また、プロセス間のコミュニケーションに「シグナル」を使用することもできます。シグナルは、ブロードキャストであるため、多くの受け手を持てますがデータは持っていません。一方、メッセージは常に、1つの受け手にしか送られません。メッセージが正しいプロセス インスタンスに確実に送られるよう、メッセージの妥当性を検証するためには、相互関係(correlation)キーを使用できます。
留意事項: 2つのプロセス間で非同期のメッセージ交換を必要としない場合(つまり、メッセージ送信後、送信先のプロセスの完了を待機する必要がある同期処理)は、メッセージの代わりに、プロセスの同期処理ポイントにゲートウェイを使用できます。メッセージとコールされるプロセスの代わりにゲートウェイを使用すると、パフォーマンス上のメリットがあります。ただし、メッセージをゲートウェイで置き換えるには、プロセス図を組み立て直す必要があります。
メッセージに関係するイベンは5つあり、次のセクションで説明します。
メッセージ スロー イベント
メッセージ スロー イベントは、別のプロセスのある要素にメッセージを送ります。メッセージは、メッセージ キャッチ中間イベント、タスクの境界線上にあるメッセージ キャッチ境界イベント、あるいはメッセージ開始イベントでキャッチすることができます。
メッセージ スロー イベントを設定するには、プロセス図内のそれを選択して、[詳細] パネル -> [全般] タブ -> [メッセージ] ペインに進み、スローされるメッセージを定義します。各メッセージは、次の手順で指定します:
- メッセージの名前: この名前はメッセージをキャッチする要素を設定するとき、そのメッセージの特定するために使用されます。したがって、ユニークで説明的な名前を付けるようにします。
- ターゲットのプール: これはターゲットのプロセスを特定します。最初にターゲットのプール名を入力するとき、Bonita BPM Studioは、あなたが現在開いているプロセス図内のプール一覧を提供します。その一覧からターゲットの名前を選択し、ダブルクリックします。現在開いていない、または別のワークスペースにあるダイアグラムに定義したプロセス名も直接指定できます。
- ターゲットの要素: これはメッセージの到着を待機しているタスク、またはイベントの名前です。
- インスタンス間の相互関係: 相互関係キーを使用したい場合は、そのキーと値を指定します。相互関係キーの値は、式エディタを使用して定義します。
- メッセージのコンテンツ: メッセージのコンテンツは、項目名 と値のペアで構成されるコレクション(配列)です。簡便な方法は、それに関連するプロセス変数を使用することですが、Groovy 式を使用して、他のフォーマットでメッセージのコンテンツを作成することもできます。「コンテンツの項目」は、ユニークな 文字列でなければなりません。「コンテンツの値」は、シリアライズされる必要があるため、JVM が再起動した後でもデータベースに保持され永続化されます。 したがって、コンテンツは、スクリプトまたは変数を使用して構築できます。また、すべての属性をシリアライズ可能にするのであれば、複合データ型を使用することもできます。
メッセージのソースとターゲットは同じプロセス図内にあり、それらは点線で結ばれます。
メッセージ キャッチ イベント
メッセージ キャッチ イ ベントは、別のプロセスからメッセージを受信するために使用します。メッセージ キャッチ イベントは、メッセージが到着するまでプロセスフローを停止する中間イベント、あるいはメッセージが到着した場合にプロセスの通常フローを例外フローに迂回するタスク上の境界イベントにすることができます。メッセージは、メッセージ スロー イベントまたはメッセージ終了イベントによって送信できます。
メッセージ キャッチ イベントを設定するには、プロセス図内のそれを選択して、[詳細] パネル -> [全般] タブ に進み、次の手順で指定します:
- [全般] ペインで:
- イベントの名前を指定します。この名前はメッセージ スロー イベントを設定するときに、そのメッセージのターゲットを特定するために使用されます。
- メッセージ キャッチ イベントの名前を指定します。.これはメッセージ スロー イベント内に設定されたメッセージの名前です。
- [メッセージ コンテンツ] ペインで: メッセージのコンテンツの設定方法を指定します。メッセージのコンテンツが送信元のプロセス内で変数をベースに設定され、受信先のプロセス内に同名の変数がある場合は、メッセージ内の値を同名の受信先プロセス内の変数値にセットされることを示す「自動入力」をクリックします。同名の変数がない場合は、一連のマッピング ルールを定義します。
- 必要な相互関連キーを指定します。相互関連キーが既に定義されている場合は、「自動入力」をクリックし、それらをテーブル内に追加します。これらの相互関連キーを変更したり、別のキーを定義できます。
メッセージ開始イベント
特定のメッセージが受信されたとき、プロセスを起動するためにメッセージ開始イベントを使用します。
メッセージ開始イベントを設定するには、プロセス図内のそれを選択して、[詳細] パネル -> [全般] タブ に進み、次の手順で指定します:
- [全般] ペインで:
- イベントの名前を指定します。この名前はメッセージ スロー イベントを設定するときに、そのメッセージのターゲットを特定するために使用されます。
- メッセージ キャッチ イベントの名前を指定します。これはメッセージ スロー イベント内に設定されたメッセージの名前です。
- [メッセージ コンテンツ] ペインで: メッセージのコンテンツの設定方法を指定します。メッセージのコンテンツが送信元のプロセス内で変数をベースに設定され、受信先のプロセス内に同名の変数がある場合は、メッセージ内の値を同名の受信先プロセス内の変数値にセットされることを示す「自動入力」をクリックします。同名の変数がない場合は、一連のマッピング ルールを定義します。
- イベントサブプロセス内にメッセージ開始イベントを設定している場合は、必要な相互関連キーのチェックを指定します。そのメッセージに対し相互関連キーが既に定義済みの場合、「自動入力」をクリックし、それらをテーブル内に追加します。これらの相互関連キーを変更したり、別のキーを定義できます。
ターゲットのプール バージョンは、メッセージの定義内には指定されません。あるプロセスの2つのバージョンをデプロイし、両バージョンとの稼働有効状態にあり、それそれが同じメッセージ開始イベントを使用して開始されている場合、メッセージは開始済みのプロセスの一方だけにスローされ、他方にはスローされません。この問題を避けるには、有効状態にあるプロセスのパージョンは1つだけに限定する必要があります。
メッセージ終了イベント
プロセスの終了時点で別のプロセス内の要素にメッセージを送信するためには、メッセージ終了イベントを使用します。メッセージはメッセージ キャッチ中間イベント、タスク上のメッセージ キャッチ境界イベント、またはメッセージ開始イベントによってキャッチされます。
メッセージ終了イベントを設定するには、プロセス図内のそれを選択して、[詳細] パネル -> [全般] タブ -> [メッセージ] ペインに進み、スローされるメッセージを定義します。各メッセージは、次の手順で指定します:
- メッセージの名前: この名前はメッセージをキャッチする要素を設定するとき、そのメッセージの特定するために使用されます。したがって、ユニークで説明的な名前を付けるようにします。
- ターゲットのプール: これはターゲットのプロセスを特定します。最初にターゲットのプール名を入力するとき、Bonita BPM Studioは、あなたが現在開いているプロセス図内のプール一覧を提供します。その一覧からターゲットの名前を選択し、ダブルクリックします。現在開いていない、または別のワークスペースにあるダイアグラムに定義したプロセス名も直接指定できます。
- ターゲットの要素: これはメッセージの到着を待機しているタスク、またはイベントの名前です。
- インスタンス間の相互関係: 相互関係キーを使用したい場合は、そのキーと値を指定します。相互関係キーの値は、式エディタを使用して定義します。
- メッセージのコンテンツ: メッセージのコンテンツは、コンテンツの項目名 と値のペアで構成されるコレクション(配列)です。簡便な方法は、それに関連するプロセス変数を使用することですが、Groovy 式を使用して、他のフォーマットでメッセージのコンテンツを作成することもできます。
シグナル イベント
シグナルは、あるプロセスから別のプロセスに通知を送信するために使用されます。シグナルはデータを持ちません。シグナルは、ブロードキャストであるため、複数の受け手を持つことができます。
シグナルに関係するイベントは4つあります:
- シグナル スロー イベント: シグナルを発信する。
- シグナル キャッチ イベント: シグナルをキャッチする。 中間イベントまたは境界イベントにできます。シグナル キャッチ中間イベントは、シグナルを受信するまでそのプロセスを待機状態にします。シグナル キャッチ境界イベントは、シグナルを受信したときに、そのイベントをアタッチしたタスクを中断(abort)させます。
- シグナル終了イベント: プロセスの終了時にシグナルを発信します。シグナル スロー イベントと同じ方法で構成設定されます。
- シグナル開始イベント: シグナルをキャッチしてプロセスを起動します。シグナル キャッチ イベントと同じ方法で構成設定されます。
シグナル イベントの構成設定
シグナル イベントを構成設定するには、プロセス図内のそれを選択して、[詳細] パネル -> [全般] タブ -> [全般] ペインに進み、シグナル フィールドでシグナルのコンテンツを定義します。各シグナルのコンテンツは、文字列です。そのフィールド内に直接文字列を入力するか、既に定義済みのシグナル一覧から所望のシグナルを選択します。
シグナル キャッチ中間イベントでは、定義済みの変数も定義できます。
エラー イベント
エラーイベントは、通常のプロセスフローを例外フローに迂回させる例外の通知機能です。エラーイベントには次の3つがあります:
- エラー キャッチ イベント: エラーがタスク、またはコールアクティビティ上で発生する場合は、エラーをスローする境界イベントになり、通常のプロセスフローを停止し、プロセスを例外フローに迂回させます。
- エラー 終了イベント: 例外処理に対応するプロセスフローの分岐終了点を示します。エラーコードがイベントサブプロセスの例外ハンドラーに送信されます。エラーが生じない場合は、その分岐のもう一方のフローに進み、後続のアクティビティを処理します。
- エラー 開始イベント: エラー イベント サブプロセスの開始を示します。
エラー キャッチ イベント
エラー キャッチ イベントは、タスク、またはコールアクティビティ上の境界イベントとして使用し、エラーが発生した場合に例外フローのイベントをトリガーします。キャッチすべき特定のエラー、またはすべてのエラーのいずれかを指定できます。
サービスタスク上のエラー境界イベントは、サービスが技術的な問題に起因して終了できない内部エラーを示します。たとえば、不成功に終わったコネクタ、通信ラインの遮断、無効なデータなどがあります。これは技術的な例外事象です。ヒューマンタスク上のエラー境界イベントは、ユーザーが申告した例外を示します。たとえば、チェックボックスのチェックのようなヒューマン アクションで問題があることを示すことができます。
エラー キャッチ イベントを設定するには、ダイアグラム内のその要素を選択し、関連するエラーの名前を指定します。エラーが指定されていない場合、そのイベントはタスク、またはコールアクティビティによってコールされるプロセスから返されるあらゆるエラーをキャチし、境界エラーの例外フローにコントロールを移します。
エラー開始イベント
エラー開始イベントは、イベント サブプロセスの起動にしか使用できません。エラー開始イベントはエラー終了イベントからエラーをキャッチし、イベント サブプロセスを起動します。
エラー開始イベントを設定するには、プロセス図内のその要素を選択して、[詳細] パネル -> [全般] タブ -> [全般] ペインに進み、エラーを定義します。エラーを指定しない場合は、親プロセス内のあらゆるエラーに対してイベント サブプロセスが起動されます。
エラー終了イベント
エラー終了イベントは、エラーが発生した場合にイベント サブプロセスを起動するために使用します。エラー終了イベントは、プロセスフローの分岐を終わらせますが、プロセス内の他のフローは続行します。
エラー終了イベントを設定するには、プロセス図内のその要素を選択して、[詳細] パネル -> [全般] タブ -> [全般] ペインに進み、エラーを指定します。この特定のエラー、またはプロセスからのあらゆるエラーによって起動するように設定されたエラーに付随するイベント サブプロセスが存在しなければなりません。。
トリガーなしイベント
開始イベント
これは、通常のプロセス開始イベントです。プロセスインスタンスの開始がユーザーによって手動で開始される、またはプログラムによって自動で開始(一般的にBonita BPM ポータルを使用)されることを示します。
終了イベント
これは、プロセス内のフローの終了を示します。プロセスフローの終端にある終了イベントに到達しても、残る他のフローがある場合は、それらのフローの実行は続行します。一般的に、終了イベントは、プロセス インスタンスが終了する前に、いくつかの未遂行の分岐フローを完遂する必要がある高度なケースでのみ使用されます。プロセスが1つの終了点で終了する場合は、終了イベントの代わりに停止イベントを使用します。
停止イベント
これは、プロセス内のすべてのフローの終了を示します。プロセスフローの終端にある停止イベントに到達すると、残る他のフロー上の未遂行アクティビティもすべて停止し、プロセスは終了します。このイベントに到達したとき、プロセス インスタンスを確実に終了させるため、プロセス内に常時1つの停止イベントを持つことがベストプラクティスです。
スロー リンクとキャッチ リンク
リンクは、プロセスフローをジャンプします。リンクには、スロー リンク イベントであるソース(元)とキャッチ リンク イベントであるターゲット(先)があります。複数のソースが同じターゲットを持つことができます。ソースとターゲットは同じプロセス内にある必要があります。リンクは、ループバックフローや長いシーケンスフローを分断し “go to ” で指し示すことによって、プロセス図の可読性を改善するために使用されます。
リンクを設定するには、スロー リンク イベントとキャッチ リンク イベントの要素を追加して、[詳細] パネル -> [全般] タブ -> [全般] ペインに進み、各スロー リンク イベントにターゲットとなるキャッチ リンク イベントを指定します。スロー リンク イベントには、ターゲット候補になるキャッチ リンク イベントの一覧が表示されるので、その一覧を確認ことによって、リンクの設定が正しいかチェックできます。
イベントとマルチインスタンスのコールアクティビティ
通常、コールされるプロセスがイベント(特にエラー終了イベント)をスローする場合、親のコールアクティビティに通知されます。ただし、そのコールアクティビティがマルチインスタンスである場合は、コールされるプロセスからのエラーを受信できません。言い換えれば、マルチインスタンスのコールアクティビティに対しては、BPMN 標準仕様の”all” 動作属性にセットされます。