16 プロセス・フローの制御
プロセスのフローを制御するために使用できる異なるフロー・オブジェクトを学習し、サブプロセスに定義できるマーカーも学習します。
16.1 プロセス・フローの制御の概要
Oracle BPMでは、プロセスのフローを制御するための様々な構造が提供されています。これらの構造によって、様々な状況に基づいてプロセス・インスタンスが使用するパスを決定できます。
プロセスのフローを制御できる構造は、次のとおりです。
-
ゲートウェイ
-
タイマー・イベント
-
エラー
-
メッセージ・イベント
-
送信タスクおよび受信タスク
-
ループ・マーカー
-
マルチインスタンス・マーカー
16.1.1 ゲートウェイ
ゲートウェイは、プロセスのフローをブランチ化させることができるフロー・オブジェクトです。ゲートウェイのタイプに応じて、インスタンスはゲートウェイからの1つ以上の送信シーケンス・フローに従うか、複数のコピーが作成されてこれらのブランチをパラレルに実行します。
ゲートウェイの詳細は、Oracle Business Process Composerでのビジネス・プロセスの開発のBPMNフロー・オブジェクト・リファレンスを参照してください。
16.1.2 タイマー・イベント
タイマー・イベントを使用すると、時間の条件に基づいてプロセス・インスタンスが使用するパスを定義できます。タイマー・イベントの詳細は、「プロセスへの遅延、期限および時間ベースのサイクルの追加」を参照してください。
16.1.3 エラー
エラー・イベントでは、プロセスが異常な状態を処理する方法を定義できます。エラー・イベントを使用すると、ビジネス・プロセスで発生する場合がある各エラーに対して異なるプロセス・フローを定義できます。エラー・イベントの詳細は、「エラーの処理」を参照してください。
16.1.4 メッセージ・イベント
メッセージ・イベントでは、特定のイベントの発生に基づいてプロセス・フローを定義できます。一般的に、メッセージ・イベントは、BPMNプロセス(非同期プロセス間通信)またはBPELプロセスなどの外部サービスを非同期に呼び出すために使用します。メッセージ・イベントの詳細は、「他のBPMNプロセスおよびサービスとの通信」を参照してください。
16.1.5 送信タスクおよび受信タスク
メッセージ・イベントでは、特定のイベントの発生に基づいてプロセス・フローを定義できます。通常、メッセージ・イベントは、非同期で外部サービスまたは別のBPMNプロセスを起動する場合に使用します。メッセージ・イベントの詳細は、「他のBPMNプロセスおよびサービスとの通信」を参照してください。
16.1.6 ループ・マーカー
ループ・マーカーでは、特定の状態に基づいてサブプロセスを複数回実行できます。ループ・マーカーの詳細は、「サブプロセスのループ・マーカーおよびマルチインスタンス・マーカーの概要」を参照してください。
16.1.7 マルチインスタンス・ループ・マーカー
マルチインスタンス・ループ・マーカーでは、一連のデータの各要素に対してサブプロセスを実行できます。ループ・マーカーの詳細は、「サブプロセスのループ・マーカーおよびマルチインスタンス・マーカーの概要」を参照してください
16.1.8 現在のプロセス・フローの一時停止
フロー・オブジェクト、サブプロセスまたはプロセスを一時停止できます。現在のプロセス・フローの一時停止の詳細は、「代替プロセス・フローを実行するための現在のプロセス・フローの一時停止」を参照してください。
16.2 サブプロセスのループ・マーカーおよびマルチインスタンス・マーカーの概要
ループ・マーカーおよびマルチインスタンス・マーカーを使用して複数回実行するサブプロセスを構成できます。ループ・マーカーおよびマルチインスタンス・マーカーを構成するには、サブプロセスを繰り返す方法を指定する式および条件を定義する必要があります。
ループ・マーカー
ループ・マーカーによって、条件に基づいてサブプロセスを複数回実行できます。サブプロセスの実行前または実行後に条件を評価するように、ループ・マーカーを構成できます。特定の反復回数後に停止するように、ループ・マーカーを構成することもできます。
ループ・マーカーを構成するには、BPMNサービス・エンジンがサブプロセスの繰返しを続行する必要があるかどうかを決定するループ条件を記述する必要があります。
マルチインスタンス・マーカー
マルチインスタンス・マーカーによって、データのセット上の各要素のサブプロセスを実行できます。BPMNサービス・エンジンがマルチインスタンス・ループ・マーカーを使用してサブプロセスを実行すると、インスタンスのセット、データのセット上の各要素のインスタンスが作成されます。パラレルまたは順番にこれらのインスタンスを処理するように、マルチインスタンス・マーカーを構成できます。
マルチインスタンス・ループ・マーカーの次のフィールドには、式を記述する必要があります。
-
ループ・カーディナリティ
この式は、サブプロセス内に作成するトークンの数を定義します。
-
完了条件
この式は、サブプロセスの繰返しを停止する時期を決定します。BPMサービス・エンジンは、トークンがサブプロセスを完了するたびにこの条件を評価します。条件がtrueと評価されると、サブプロセスが完了したとみなされ、インスタンスはプロセス内の次のフロー・オブジェクトに移動します。
16.2.1 ループ・マーカーの構成方法
ループ・マーカーを構成して、サブプロセスを複数回実行できます。
ループ・マーカーを構成するには:
-
サブプロセスを右クリックします。
-
「プロパティ」を選択します。
-
「ループ特性」タブをクリックします。
-
「ループ」を選択します。
-
次のように、ループ条件を指定します。
-
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
-
下のテキスト領域に、ループを駆動する条件を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
-
-
オプションで、次のように、実行するループの最大回数を指定できます。
-
「ループ最大」を選択します。
-
数字を指定します。
-
-
「次より前」を選択してフロー・オブジェクトの実行前に条件を評価するか、選択解除してフロー・オブジェクトの実行後に条件を評価します。
-
「OK」をクリックします。
16.2.2 マルチインスタンス・マーカーの構成方法
マルチインスタンス・マーカーを構成して、データのセットに基づいてサブプロセスを複数回実行できます。
マルチインスタンス・マーカーを構成するには:
-
サブプロセスを右クリックします。
-
「プロパティ」を選択します。
-
「ループ特性」タブをクリックします。
-
「MultiInstance」を選択します。
-
次のモードを選択します。
-
順次: 次のトークンがサブプロセスの実行を開始する前に各トークンがサブプロセスを完了する必要があることを指定します。
-
パラレル: トークンがパラレルで実行されることを指定します。
ノート:
パラレル・モードを使用するときは、サブプロセスの実行によって生成される情報の保存にプロセス・データ・オブジェクトを使用すると、インスタンスが情報を上書きする可能性があることを考慮してください。これを避けるには、サブプロセス・データ・オブジェクトを使用してください。
-
-
次のように、ループ・カーディナリティを指定します。
-
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
-
下のテキスト領域に、ループ・カーディナリティの指定を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
-
-
オプションで、次のように、完了条件を指定できます。
-
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
-
下のテキスト領域に、ループが完了したかどうかを決定する条件を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
-
-
データ出力を指定するには、「ループ・データ出力」フィールドの横にある「参照」ボタンをクリックします。
データ・オブジェクトまたはサブプロセスに渡す複合データ・オブジェクトの属性を選択できます。通常、選択したデータ・オブジェクトはアイテムのコレクションです。
-
データ入力を指定するには、「ループ・データ入力」フィールドの横にある「参照」ボタンをクリックします。
データ・オブジェクトまたはサブプロセスの結果を割り当てる複合データ・オブジェクトの属性を選択します。
-
「OK」をクリックします。
16.3 代替プロセス・フローを実行するための現在のプロセス・フローの一時停止
プロセスを一時停止するには、サブプロセスの既存の開始イベントを構成するか、新しいものを追加する必要があります。プロセス・インスタンスが、イベント・サブプロセスの開始イベントに到達すると、メイン・プロセス・フローが一時停止され、BPMランタイムによってイベント・サブプロセスのプロセス・フローが実行されます。
フロー・オブジェクトまたはサブプロセスを一時停止するには、既存の境界イベントを構成するか、新しいものを追加する必要があります。境界イベントは、メッセージ・イベント、タイマー・イベント、またはシグナル・イベントです。プロセス・インスタンスが、境界イベントが指定されているフロー・オブジェクトに到達すると、メイン・プロセス・フローが一時停止され、BPMランタイムによってイベント・ハンドラ・シーケンス・フローである代替シーケンス・フローが実行されます。
16.3.1 現在のプロセス・フローを一時停止するためのフロー・オブジェクトの構成方法
境界イベントおよびイベント・サブプロセスを構成して、現在のプロセス・フローを一時停止できます。
フロー・オブジェクトを構成して現在のプロセス・フローを一時停止するには:
- BPMNプロセスを開きます。
- プロセス・フローの一時停止に使用する境界イベントまたはサブプロセスを右クリックします。
- 「プロパティ」を選択します。
- 「実装」タブを選択します。
- 「一時停止イベント」オプションを選択します。
16.3.2 一時停止したプロセス・フローの再開方法
プロセス・フローを再開するには、事前定義済変数アクションの値を、次の値のうちの1つに設定する必要があります。
-
RESUME
一時停止したプロセス・フローを再開します。
-
SEND
一時停止をキャッチしたプロセス・フロー内の次のフロー・オブジェクトにプロセス・インスタンスを移動します。一時停止されたスコープは取り消されます。
事前定義済変数アクションの値は、次の方法で設定できます。
-
データ・アソシエーションの使用
詳細は、「データ・アソシエーションの概要」を参照してください。
-
BPMスクリプトの使用
詳細は、「BPMスクリプトの記述」を参照してください。
代替シーケンス・フロー内のタスクを実行した後、BPMランタイムによって事前定義済変数アクションの値が確認されます。事前定義済変数アクションの値がRESUMEまたはSENDである場合、メイン・プロセス・フローが再開され、イベント・ハンドラ・シーケンス・フローが取り消されます。