3.4. イベント

プロセスには、開始イベント、中間イベント、終了イベントが含まれています。イベントにはすべて、ノードを識別する ID と名前 (ノードの表示名) が含まれています。追加のプロパティは以下の表に表示されています。

表3.1 イベント

イベントタイプ 追加のプロパティ 使用法
開始イベント
イベントの開始を示す緑のボタン
プロセスには開始ノード 1 つと外向きの接続が 1 つが含まれています。プロセスの実行は常に開始ノードから始まります。
終了イベント
イベントの終了を示す赤/ピンクのボタン
  • Terminate:
    終了イベントは、全プロセスを終了するか、現在の実行パスだけを終了します。
プロセスには 1 つ以上の終了イベントが含まれます。各終了イベントには、内向き接続 1 つがあり、外向きの接続はありません。
プロセスが終了すると、(実行の並行パスにある) アクティブなノードはすべてキャンセルされます。終端処理のない終了イベントは、現在実行中のパスを終了しますが、他のパスが継続できるようにします。終端処理のある終了イベントは、イベントノードの中に完全な丸があり視覚的に区別できます。反対に終端処理のない終了イベントはイベントノードの中に何も入っていません。サブプロセス内で終端イベントノードを使用する場合、サブプロセスだけでなく最上位のプロセスインスタンスを終了する点に注意してください。
エラー送出イベント
中央に赤いジグザグのアイコンがついたピンクのボタン
  • FaultName:
    問題の名前を提示します。この名前を用いて、この種類の問題を処理できる適切な例外ハンドラーを検索します。
  • FaultVariable:
    この問題に関連するデータが保存されている変数名を渡します。このデータも、例外ハンドラーに渡されます (もしあれば)。
エラーイベントは、プロセス内の例外的な状態を通知するために使用します。このイベントには内向き接続が 1 つあり、外向き接続はありません。プロセス内でエラーイベントに到達すると、指定の名前を持ったエラーを送出します。プロセスでは、この種の問題を処理できる適切なエラーハンドラーを検索します。エラーハンドラーが見つからない場合は、プロセスインスタンスが中断されます。
エラーハンドラーは、XML で作業している場合、境界イベントを使用して指定することができます。
タイマーキャッチイベント
時計の形に似た金色のボタン
  • Timer period:
    後続の 2 つのトリガーでどれくらいの時間が開いているか。期間が 0 の場合、タイマーは 1 度だけトリガーされます。
タイマーキャッチイベントは、指定の時間が経過した後、1 回または複数回トリガー可能なタイマーを表します。タイマーイベントには、内向き接続が 1 つと外向き接続が 1 つあります。プロセス内でタイマーイベントに到達すると、関連付けられているタイマーが開始します。
式の構文や詳細については、「タイマー」 を参照してください。
シグナルキャッチイベント
中央に三角印がついた金色のアイコン
  • EventType:
    予期されるイベントのタイプ
  • VariableName:
    このイベントに関連付けられたデータが保存されている変数の名前
シグナルイベントは、プロセス実行時に内部または外部のイベントに対応するために使用することができます。シグナルイベントには、内向き接続なく、外向き接続 1 つ含まれています。このイベントは、予期されるイベントの種類を指定します。イベントの種類が検出されると、このイベントノードに接続されたノードがトリガーされます。
プロセスインスタンスは、以下を使用して、指定のイベントの発生についてシグナルを受けることができます。
ksession.signalEvent(eventType, data, processInstanceId)
これは、イベントの種類に関して待機中のプロセスインスタンスにある (アクティブな) シグナルイベントノードをすべてトリガーします。このイベントに関連するデータは、データパラメーターを使用して渡すことができます。イベントノードが変数名を指定している場合、イベント発生時にこのデータはその変数にコピーされます。
イベントはサブプロセス内で利用できますが、これらのイベントノードはサブプロセスがアクティブな場合のみアクティブになります。
シグナルは、スクリプトを用いてプロセスインスタンス内から生成できます。例えば、
kcontext.getKnowledgeRuntime().signalEvent(eventType, data, kcontext.getProcessInstance().getId());
プロセスタスクすべてが正しい順序で実行されるようにすること以外に、プロセス外で起こるイベントに対応するように、プロセスエンジンに指示をすることも可能です。プロセス外で発生するイベントを明示的に表現することで、プロセスの作成者はプロセスがそのイベントに対してどのように反応すべきか指定できます。
イベントにはタイプがあり、データを関連付けることもできます。ユーザーはイベントタイプと関連データを定義することができます。
プロセスは、メッセージイベントを使用することでどのようにイベントに対応するか指定できます。イベントノードは、ノードが関連するイベントの種類を指定する必要があります。また、そのイベントに関連付けられたデータを受け取る変数の名前も定義できます。こうすることで、プロセス内で後続するノードがイベントデータにアクセスでき、このデータを元に適切なアクションを起こすことができるのです。
プロセスの実行中のインスタンスに対して、イベントのシグナルを様々な方法で送ることができます。
  • 内部イベント: プロセス内のアクション (例: アクションノードのアクション、または一部のノードの on-entry または on-exit アクション) は周りにあるプロセスインスタンスに対して、内部イベントの発生についてシグナルを送ることができます。内部イベントのサンプルコードは以下のとおりです。
    kcontext.getProcessInstance().signalEvent(type, eventData);
  • 外部イベント: プロセスインスタンスに対して、以下のようなコードを使うことで外部からイベントを通知できます。
    processInstance.signalEvent(type, eventData);
  • イベント相関を使った外部イベント: プロセスインスタンスを直接通知するのではなく、イベントタイプをベースとするイベント相関を使うことでイベントに関連しているプロセスインスタンスがどれであるか、自動的にエンジン側で判断できます。一部のタイプの外部イベントをリッスンするイベントノードを含むプロセスインスタンスは、イベントが発生するたびに通知されます。プロセスエンジンに対してこのようなイベントに関してシグナルを送るには、以下のコードを使います。
    ksession.signalEvent(type, eventData);