Oracle Business Process Management Suite 11g:
デザイン・パターンおよびベストプラクティス
目次
1. シナリオ ... 1 1.1. 目的 ... 1 1.2. BPMNイベントの概要... 1 1.2.1. 開始イベント ... 2 1.2.2. 終了イベント ... 2 1.2.3. 中間イベント ... 2 1.3. Sales Processes BPMプロジェクトの理解 ... 3 1.3.1. Sales Processes BPMプロジェクトのオープン ... 4 2. QuoteProcessの拡張 ... 9 2.1. 概要 ... 9 2.1.1. QuoteProcessのメッセージ開始イベントの設定 ... 9 2.1.2. QuoteProcessのメッセージ終了イベントの設定 ... 12 2.2. QuoteProcessとCustomerProcessのプロセス対話 ... 13 2.2.1. 顧客への見積もりの送信 ... 14 2.2.2. 顧客からの応答の受信 ... 15 3. 例外処理 ... 19 3.1. システム例外のキャッチ ... 19 3.2. 例外の伝播 ... 22 3.3. ビジネス例外のキャッチ ... 26 4. Sales Processes BPMプロジェクトのデプロイ ... 32 5. QuoteProcessの実行 ... 35 5.1. QuoteProcessの起動 ... 35 5.2. BPM Workspaceを使用したプロセスの実行 ... 36 5.3. システム例外のテスト ... 39 5.4. サブプロセスの境界を越えたエラー伝播のテスト ... 40 5.5. ビジネス例外のテスト ... 401. シナリオ
本ハンズオンでは、Oracle Business Process Management 11g プラットフォームのベストプラクティスとデザイン・パターン について説明します。この演習では、ビジネス・プロセス「Sales Quote」を使用します。このプロセスでは、販売見積もりが提 出され、組織内の様々なグループや個人にレビューされ、処理されます。
1.1. 目的
BPMN 2.0はビジネスフレンドリーなモデル駆動の実行言語として有名です。このセクションでは、主なデザイン機能に基づ いて、イベント処理、例外処理、プロセスのコラボレーション、様々な実装シナリオなど一般的なBPMNプロセスのパターン をカバーします。BPMNの特徴の1つは、イベントを豊富にサポートしていることです。BPMNはプロセス間の通信と例外処 理を扱うためのイベント・トリガーの動作をダイアグラムで記述することができます。他のモデリング表記法とは異なり、ビジネ スフレンドリーなモデリング実行言語となっています。BPMNイベントは、プロセスのトリガー、プロセスのブロック、待機プロ セスの再開、プロセス・アクティビティの中止、例外の伝播、フローの変更などを実行できます。BPMN仕様には多くのイベ ント・タイプがありますが、少しの共通パターンを学習するだけで、ほとんどのイベント処理や例外シナリオの処理を行うこと ができるようになります。 このハンズオンでは、以下の事項について説明します。 BPMNイベント 例外処理 プロセスの対話 BPM Studioは、BPMN2.0プロセスとBPELプロセスを持つ様々なBPMプロジェクトのアセットを一つのプロジェクト・フォル ダに集約できる、統合されたIDEです。この2つのビジネス・プロセス標準技術(BPMランタイム上で、それぞれをネイティブ 実行できることを含む)のサポートに加えて、単一のモデリング技術(BPM Studio)から、ユーザー・タスク、ビジネス・ルー ル、Oracle Adapterフレームワークを使用したバックエンド・コンポーネントとの統合を開発することができます。BPM Studioを使用すると、BPMプロジェクトの開発が簡単になるだけでなく、BPMのライフサイクルを促進し、プロジェクトの開発 を加速することができます。1.2. BPMNイベントの概要
BPMNイベントはビジネス上で発生するノートのようなものです。BPMNイベントは、メッセージの到着やある時間条件が満 たされたとき、エラーがキャッチされたこと、などの外部のトリガーによって発生します。イベントは、結果を発生させ、メッセサポートしていることです。イベントは、プロセスの開始(開始イベント)、終了(終了イベント)または途中(中間)で発生する 可能性があります。すべてのイベントは円記号で表示されます。 1.2.1. 開始イベント 開始イベントは、プロセスまたはサブプロセスの開始を表し、プロセスをインスタンス化する外部トリガーをリスニングするため に使用されます。開始イベントは、常に受信し、トリガーをキャッチしますが、スローすることはしません。プロセス・インスタン スをインスタンス化するトリガー・メカニズムである、様々な種類の開始イベントがあります。これらはマーカーと呼ばれる記号 で区別されます。開始イベントは、細い円で表わされます。 1.2.2. 終了イベント 終了イベントは、すべてまたは一部のプロセスやサブプロセスの終了を通知し、完了時にプロセスによって生成される結果 を定義します。終了イベントは常に送信し、トリガーをスローしますが、キャッチすることはしません。終了イベントは、太い円 で表わされます。開始イベントと類似し、様々な種類の終了イベントがあります。これらの終了イベントはマーカーと呼ばれる 記号で区別されます。 1.2.3. 中間イベント 中間イベントは、開始イベントと終了イベントの間のプロセスのシーケンス・フロー上で発生します。中間イベントは、トリガー をキャッチし、スローします。キャッチ・タイプとスロー・タイプの中間イベントを区別するために、スロー・タイプの中間イベント は影付きのマーカーで表示され、キャッチ・タイプの中間イベントのマーカーは陰なしになります。開始イベントと終了イベン トと同様に、中間イベントも複数のタイプがあります。
1.3. Sales Processes BPMプロジェクトの理解
まず、提供している「Quote」ビジネス・プロセス・テンプレートについて理解します。「Quote」ビジネス・プロセスは、営業担 当が注文を作成し、承認を行い、履行するソリューションを実装します。テンプレートで実装されているステップは以下になり ます。 1. Create Quote:これは対話型タスク(ユーザー・タスク)です。営業担当が販売見積もりを作成します。 2. Insert Quote:これはサービス・タスクです。データベース・アダプタを使用して、見積もりが販売見積もりテーブルに挿 入されます。 3. Approvals:これは埋め込まれたサブプロセスです。見積もりは、承認者(「Approve Deal」)と契約担当(「Approve Terms」)によって並列に承認されます。これは、パラレル・ゲートウェイによって実装されます。4. Fulfill Order:これはサービス・タスクです。ここでは「FulfillOrder」BPMNプロセスを呼び出します。注文が履行さ れ、プロセスが完了します。
別の2つのプロセス「CustomerProcess」と「FulfillOrderProcess」があります。
5. 「CustomerProcess」は「QuoteProcess」から見積もりを受け取り、承認または却下します。
6. 「FulfillOrderProcess」は「QuoteProcess」から注文履行の要求を受信し、注文の履行メッセージを返信するか、ま たは在庫不足のために注文が履行できないことを示すフォルトをスローします。
1.3.1. Sales Processes BPMプロジェクトのオープン BPM Studioは、ビジネス・ユーザーにフレンドリーなプロセスのモデリングとシミュレーション環境を提供します。BPM Studioを使用して、ビジネス・アナリストまたはプロセス・デザイナーはプロセス内のアクティビティ、各アクティビティ間の遷 移および各アクティビティに関連付けられたロールを含むビジネス・プロセスをモデル化することができます。BPM Studioを 使用して、ビジネス・アナリストはビジネス・プロセスのコンテキストでビジネス・ルールを定義することができます。 1. BPM Studioで、「View」→「Application Navigator」を選択します。
2. 「File」→「Open」をクリックして、「Application Wizard」を開きます。「BPMN Pattern OOW 2010.jws」を選択して、 アプリケーションを開きます。
3. 「View」→「BPM Project Navigator」を選択して、「BPM Project Navigator」を開きます。
4. BPMプロジェクト「SalesProcesses」に移動します。「Processes」ノードを展開し、「QuoteProcess」ノードを選択します。 これはBPMNプロセス・モデルになります。他の2つのBPMNプロセス・モデル「CustomerProcess」と 「FulfillOrderProcess」も表示されています。BPMプロジェクトは、複数のプロセス・モデルを持つことができます。 注:ここで使用するモデリング表記はBPMN2.0です。 5. ビジネス・プロセスには4つのスイムレーンがあります。これらは、「SalesRep」、「FullfilmentClerk」、「Approvers」と 「Contracts」です。スイムレーンは、プロセス・ステップを実行するプロセスの参加者またはロールを表しています。プ ロセス・ステップとロールの間の関連付けを、以下の表に示します。 ロール 対話型プロセス・ステップ
FullfilmentClerk --N/A-- Approvers Approve Quote Contracts Approve Terms
6. いろいろな記号やアイコンが、様々なプロセス・ステップを表すために使用されていることに注意してください。人間ア イコンのついた緑色の長方形のボックスは対話型ステップやヒューマン・ステップを表しています。
7. 「View」→「Component Palette」を選択して、「BPMN Component Palette」を開きます。BPMNコンポーネントは4 つの主要なコンポーネントのタイプから構成されています。 プロセス・ステップを表すアクティビティ パスのスプリットとマージを表すゲートウェイ ビジネス・イベントを生成および消費するためのイベント データとプロセス・メトリックを表すアーティファクト 注:対話型タスクは、ワークフロー・エンジンによって管理されるステップを表しています。実行者は対話型タス クを実行するビジネス・ユーザーを表します。対話型タスクがトリガーされると、関連するタスク(実行すべき作 業)が実行者の受信ボックスに表示されます。実行者がタスクを実行することによって、実際の作業が実行さ れます。タスクは、ブラウザ・ペースのワークリスト・アプリケーションによって実行者に提示されます。BPM Studioでは、対話型タスクがドロップされたスイムレーンに関連付けられたロールが、自動的に実行者に割り 当てられます。
8. 「BPM Project Navigator」下の「Organization」ノードに移動します。「Organization」を右クリックし、「Open」を選択 して、「Organization」エディタを開きます。 9. BPM Studioでは、BPMNプロセスのスイムレーンは論理的なロールを指しています。論理的なロールは、プロセスの 参加者(ユーザーまたはグループ)を表します。これらの参加者は、プロセスがデプロイされる前に物理的なロール (LDAPユーザー・グループ)にマップする必要があります。これはすでに実施済みです。「Organization」ペインに は、プロセスのスイムレーンに対応するロールが表示されています。これらのロールのメンバーを参照することもできま す。 ロール メンバー SalesRep(Quoteプロセス) jcooper FullfilmentClerk(Quoteプロセス) jstein Approvers(Quoteプロセス) wfaulk Contracts(Quoteプロセス) cdickens Customer(Customerプロセス) cdoyle 10. 「Business Catalog」は、ビジネス・データ、ビジネス・ルール、ビジネス・サービス、タスク・サービスなど、プロセスに関 連する様々なアーティファクトを保持しています。「Business Catalog」は、ビジネスとIT開発者の間のコラボレーション の手助けをします。「Business Catalog」はビジネス・データ、ビジネス・サービスなどの構成要素を提供するITとして のメカニズムを提供しており、ビジネス・プロセスの実装時には、これらがビジネス・アナリスト、プロセス・デザイナーお よびビジネス・ユーザーに使用されます。様々なタイプのBPMアーティファクトを保持するためのフォルダがあります。 ビジネス・プロセスの実装では、対話型タスクをヒューマン・タスク・サービスに、サービス・タスクをビジネス・サービス に、ルール・タスクをルール・サービスに関連づける必要があります。
11. 「QuoteProcess」への入力は、「Quote」データ型です。複合データ型はOracle BPM 11gではビジネス・オブジェクト と呼ばれています。「Quote」データ型は「Business Catalog/Data」フォルダにあり、「quote.xsd」ファイルから生成さ れています。「Quote」データには顧客情報、複数の製品、見積もりを担当する営業担当などの情報が含まれていま す。「Applications Navigatior」→「SalesProcesses」→「xsd」を展開して、「Quote」データ型の定義を参照できます。
12. 「QuoteProcess」のヒューマン・ワークフローの実装アーティファクト「Create Quote」、「Approve Quote」、「Approve Terms」は事前に作成されています。「CustomerProcess」のヒューマン・ワークフローの実装アーティファクト「Review Quote」も作成されています。「.task」アーティファクトをダブル・クリックして、タスク・エディタで参照できます。
13. ビジネス例外「InventoryFault」も事前に定義されています。ビジネス例外はビジネス・オブジェクトのようなデータ型 ですが、特別なセマンティクスにより、エラー処理に関連付けられます。この章の後半では、ビジネス例外を様々なケ ースで使用します。 14. データ・オブジェクトは変数を表します。プロセス・データ・オブジェクトはプロセス全体に可視性があり、プロセス・イン スタンスのライフ・タイムを通して保持されます。データ・オブジェクトは、データ型を指定する必要があります。データ 型としては、スカラー型もしくはネイティブ型(String型、Int型、Decimal型、Boolean型、Array型)または複合データ 型を指定することができます。Quote型のビジネス・オブジェクトは既に作成されています。「View」→「Structure」をク リックして「Structure」ペインを開き、「Process Data Object」フォルダでQuote型のデータ・オブジェクトを参照できま す。
2. QuoteProcessの拡張
以下の事項を追加して、提供されたQuoteProcessを変更します。 1. 「CustomerProcess」とのプロセスの対話。見積もりを顧客に送信し、応答を受信します。 2. 「Insert Quote」ステップで重複レコードが挿入されるといったエラーが発生した場合の、システム例外の処理 3. 承認サブプロセスからメインプロセスへのエラーの伝播 4. 「Fulfill Order」ステップで「FulfillOrderProcess」によってスローされたビジネス例外の処理2.1. 概要
メッセージ開始イベント は、メッセージの到着時にプロセス・インスタンスをトリガーするために使用されます。メッセージ は特殊なデータ型で、プロセス対話コンテキストでデータの変換を表すために使用されます。メッセージのソースは設定済 みである必要があり、メッセージは様々なソース(他のBPMNプロセス、BPELプロセス、アダプタ・イベントまたは外部の Webサービス・クライアント)から生成されることができます。プロセスの完了時には、メッセージ終了イベント は別のプロ セスまたはアプリケーションにメッセージを送信するために使用されます。メッセージの宛先は設定済みである必要がありま す。メッセージ開始イベントとメッセージ終了イベントを持つBPMNプロセスは、それ自体がサービス・プロバイダーであり、 別のBPMNプロセスのサービス・タスク、Webサービス・クライアントまたはBPELプロセスから呼び出すことができます。メッ セージ開始イベントの操作タイプが非同期の場合はBPMNプロセスは非同期サービスとなり、メッセージ開始イベントの操 作タイプが同期の場合はBPMNプロセスは同期サービスとなります。 この項では、QuoteProcessをサービスに変更します。 2.1.1. QuoteProcessのメッセージ開始イベントの設定 1. 現時点では、「QuoteProcess」にはNone開始イベントがあります。None開始イベントはトリガーに関連付けられてい ないため、これをメッセージ開始イベントに変更する必要があります。「Quote Request」イベントを右クリックし、 「Change Trigger Type」を選択し、「Message」オプションを選択します。2. 次の手順では、メッセージ開始イベント「quote Request」を実装します。メッセージ・イベントは常にサービス・インター フェースの操作に関連付けられています。「quote Request」イベントを右クリックし、「Properties」を選択します。これ により、Propertiesウィザードが起動されます。「Implementation」タブを選択します。サービス・インターフェースを定 義するには、2つの方法があります。「Define Interface」オプションを使用してインターフェースを初めから定義する方 法と、「Interface from Catalog」オプションを選択して「Business Catalog」配下の既存のインターフェースを参照する 方法です。この例では、「Define Interface」オプションを使用して「quote Request」イベントのインターフェースを指定 します。
3. プラス記号をクリックして、インターフェースの入力引数を定義します。この例では、引数の名前は「quote」です。省略 記号ボタンをクリックして、「Business Catalog」で定義された複合データ型を参照します。
4. 「Browse Types」ウィンドウが表示されます。「Type」から「Component」を選択し、下部に表示された複合データ型 のリストから「Quote」を選択します。
5. 「Advanced」セクションを展開します。操作のタイプ(「Asynchronous」または「Synchronous」)を選択し、 「Operation Name」フィールドに分かりやすい名前を入力します。
7. 右側のツリーから「quote」データ・オブジェクトをドラッグし、「Outputs」セクションにドロップします。これで、 「QuoteProcess」のメッセージ開始イベントの設定は完了です。 2.1.2. QuoteProcessのメッセージ終了イベントの設定 1. 「Conversation」フィールドは常に「Continues」に設定されています。メッセージ終了イベントはスロー・タイプである ため、対応するキャッチ・イベントを持つ必要があります。キャッチ・イベントは、メッセージ開始イベントまたはキャッチ・ メッセージ中間イベントのいずれかになります。
2. 「Initiator Node」は、対応するキャッチ・イベントを指定するために使用されます。この例では、「Initiator Node」はメ ッセージ開始イベント「quote Request」になります。
3. 「Arguments Definition」セクションは操作するペイロードを指定するために使用されます。プラス記号を使用して、 「Data Object」ブラウザを起動し、適切なデータ・タイプを追加します。
4. 「Initiator Node」が非同期であるため、「Advanced」セクションの下にある「Asynchronous」ラジオ・ボタンが自動的 に選択されています。「Operation Name」フィールドに「quoteResponse」と入力します。
5. 「Data Associations」を使用して、「quote」データ・オブジェクトをメッセージ終了イベント「order fulfilled」の入力引 数にマップします。
2.2. QuoteProcessとCustomerProcessのプロセス対話
この項では、「CustomerProcess」と対話するように「QuoteProcess」を変更します。「CustomerProcess」は 「QuoteProcess」から見積もりを受け取り、承認または却下します。
メッセージ中間イベントは、外部のプロセスにメッセージを受信または送信するために使用されます。多くの場合は、プロセ ス対話のために使用されます。スロー・メッセージ中間イベント の後にキャッチ・メッセージ中間イベント を配置し、非 同期の要求応答シナリオをモデル化することができます。キャッチ・メッセージ中間イベントの後にスロー・メッセージ中間イ ベントを配置し、受信送信シナリオをモデル化することができます。この演習では、「CustomerProcess」に送信し、非同期 的に「CustomerProcess」から応答を受信するように「QuoteProcess」を変更します。「CustomerProcess」からの応答メッセ ージを相互排他的に処理する必要もあります。 2.2.1. 顧客への見積もりの送信 1. 「BPM Component Palette」からスロー・メッセージ中間イベントをドラッグし、「Approvals」サブプロセスの右後ろに ドロップします。「send quote」と名前を付けます。 2. 下図で示すように、「sent Quote」を設定し、「Conversation」を「Initiates」に設定します。「Implementation」を 「Process Call」に設定します。ブラウザのボタンを使用して、「CustomerProcess」を選択します。「Node」を「receive Quote Approval Request」に設定します。
3. 下図で示すように、「Data Associations」を設定します。 2.2.2. 顧客からの応答の受信 「CustomerProcess」から複数の応答を受信する場合があります。相互排他的なイベントを受信するために、XORイベント・ ゲートウェイとメッセージ中間イベントを使用します。 1. XORイベント・ゲートウェイをドラッグし、イベント「sent Quote」の右後ろにドロップします。 2. 「Name」フィールドに「Receive Response」と入力します。XORイベント・ゲートウェイは、キャッチ・メッセージ中間イベ ントとタイマー中間イベントのペアを持っています。タイマー中間イベントは、応答が指定時間以内に来ない場合のタ イムアウトを処理するために使用されます。
3. XORイベント・ゲートウェイ「Receive Response」の送信パスに接続されたメッセージ中間イベントに対して、「accept quote」と名前をつけます。下図で示すように、メッセージ中間イベント「accept quote」を設定します。「Continues」オ プションを選択し、「Initiator Node」のドロップダウンリストから「Send quote」を選択します。「Process」は自動的に 「CustomerProcess」に設定され、「Node」は「Accept Quote Response」に設定されます。
4. データ・アソシエーションは、以下のようになります。
5. XORイベント・ゲートウェイの送信パスに接続されたタイマー中間イベントを、以下のように設定します。「Name」に 「timeout」と入力し、「Time Cycle」オプションを選択します。timeoutの値を1時間に指定します。
6. 以下のスクリーンショットは、XORイベント・ゲートウェイの送信パスを示しています。
7. 以下のスクリーンショットで示すように、XORイベント・ゲートウェイの送信パスを切り替えます。
8. 「CustomerProcess」から却下された見積もり応答を処理するために、別のメッセージ中間イベントを追加します。キャ ッチ・メッセージ中間イベントをドラッグ&ドロップし、XORイベント・ゲートウェイ「Receive Response」の3番目の送信フ ローとして接続します。
9. 「reject quote」と名前を付けます。以下のように、キャッチ・メッセージ中間イベント「reject quote」を設定します。 「Continues」オプションを選択します。「Process」のドロップダウンリストから「CustomerProcess」を選択します。 「Node」のドロップダウンリストから「Reject Quote Response」を選択します。
3. 例外処理
キャッチ・タイプの特定の中間イベントは、アクティビティ(タスクまたはサブプロセス)の境界にアタッチされ、内部と外部のト リガーをリスニングすることができます。これらのイベントは境界イベントと呼ばれます。境界イベントがトリガーされると、プロ セスの実行は例外フローと呼ばれる送信パスを通して流れます。アタッチされたアクティビティがアクティブ時にのみ境界イ ベントはアクティブになり、トリガーをリスニングします。 境界イベントは2種類(連続するイベントと連続しないイベント)に分けることができます。連続する境界イベントは、連続しな いイベントと区別するために、境界線が点線になっています。連続なしイベントの場合には、通常のシーケンス・フローで進 むプロセスの実行が中断され、代わりに例外パスに進みます。言い換えると、通常の実行フローと例外フローは相互排他的 になります。連続するイベントの場合には、プロセスの実行は通常のシーケンス・フローで継続され、パラレルに例外フロー を実行します。例外フローをプロセスのメイン・フローにマージする場合には、注意が必要になります。ほとんどの場合、例 外フローは独自の終了イベントで終了すべきです。Oracle BPM 11gは、メッセージ境界イベント、シグナル境界イベント、 エラー境界イベント、タイマー境界イベントなど様々な境界イベントをサポートしています。連続するイベントと連続しないイ ベントもサポートしています。3.1. システム例外のキャッチ
サービス・タスクのようなシステム・ステップにアタッチされたエラー境界イベントは、サービス呼び出しの例外またはシステ ム・フォルトを捕捉するために使用されます。サービスが利用できない可能性があり、サービスに送信したデータまたはサー ビスから受信したデータが無効である可能性もあります。このような状況では、境界エラー・イベントはシステム・ステップにア タッチされ、システム例外を捕捉します。次の手順では、「Insert Quote」ステップでシステム例外をキャッチするために、エ ラー境界イベントを設定します。 1. エラー中間イベントをドラッグし、「Insert Quote」ステップにドロップします。 2. エラー境界イベントを右クリックします。「Properties」を選択して、「Properties」ウィザードを開きます。 「Implementation」タブを選択し、ブラウザのアイコンを選択します。3. 「Show System Faults」を選択します。システム・フォルトの事前定義済リストが表示されます。よく使用される2つのシ ステム・フォルトは、バインディング・フォルトとリモート・フォルトです。リモート・フォルトはサービスが利用できないエラ ーを捕捉するために使用され、バインディング・フォルトは不正なデータのような、他のすべてのシステム・エラーを捕 捉するために使用されます。この演習では、データに関連するエラーをテストするため、「BindingFault」を選択しま す。
4. 「Data Association」セクションで、選択したシステム・フォルトをプロセス・データ・オブジェクトにマップします。
5. 次の手順では、「Insert Quote」ステップのエラー境界イベントの例外フローを作成します。ユーザー・タスクをドラッグ し、「FullfilmentClerk」スイムレーンにドロップします。このレーンはこれまで空でした。ユーザー・タスクに「Manually Insert Quote」と名前を付けます。
7. 次の手順では、「Manually Insert Quote」ステップの設定を完了します。「Manually Insert Quote」を右クリックし、 「Properties」を選択します。「Implementation」タブを選択し、「Pattern」のドロップダウンリストから「Simple」を選択し ます。「Title」フィールドに「Manually insert quote」と入力します。プラス記号のボタンをクリックして、タスク・ペイロー ドの引数を設定します。「OK」をクリックして、再び「OK」をクリックします。ヒューマン・ワークフロー
8. 下図で示すように、データ・アソシエーションを行います。
3.2. 例外の伝播
サブプロセスのエラー境界イベントは、サブプロセス内でスローされたエラー・メッセージを伝播させ、親プロセスによってキ ャッチ、処理するために使用されます。下図は、サブプロセスによってスローされた例外をキャッチするために使用する 「QuoteProcess」の修正版です。「Approve Deal」、「Approve Terms」または両方ともREJECTを出力した場合、 「Approvals」サブプロセスはエラー終了イベント「quote reject error」をスローします。サブプロセス内部でスローされたエ ラーはサブプロセスの境界に接続されているエラー境界イベントによって親プロセスでキャッチされます。例外パスが実行さ れ、「quote cancelled」ステップが実行されます。
1. 「BPM Component Palette」からXOR(Exclusive)データ・ゲートウェイをドラッグし、Parallel Joinゲートウェイ「Done」 の右後ろにドロップします。「Outcome」と名前を付けます。XORデータ・ゲートウェイ「Outcome」のデフォルトの出力 接続パスを終了イベントに接続します。パスに「Approve」と名前を付けます。エラー終了イベントをドラッグ&ドロップ し、「throw Reject Error」と名前を付け、XORデータ・ゲートウェイ「Outcome」の条件フローをそれに接続します。条 件パスに「Reject」と名前を付けます。これらの手順については、以下のスクリーンショットを参照してください。
2. 「Approve Deal」ステップの出力引数「outcome」を「approveQuoteOutcome」Stringデータ・オブジェクトにマップ し、「Approve Terms」ステップの出力引数「outcome」を「approveTermsOutcome」Stringデータ・オブジェクトにマ ップします。各ステップの右クリックメニューから「Properties」を選択します。「Implementation」タブを選択し、「Data Use Associations」をチェックし、 「Simple」タイプを選択します。
3. Stringデータ・オブジェクト「approveTermsOutcome」を作成する必要があります。手順については、以下のスクリー ンショットを参照してください。
4. 「reject」条件パス(XORデータ・ゲートウェイ「Outcome」の送信パス)を選択します。
5. 下図で示すように、「reject」パスの条件式を設定します。以下の内容を入力します。
approveQuoteOutcome ==”REJECT” || approveTermsOutcome == “REJECT”
7. 「type」を「Quote」に設定します。デフォルトでは、すべてのビジネス例外はString型になっています。省略記号ボタ ンをクリックして、タイプを変更します。
8. 以下のスクリーンショットで示すように、ビジネス例外「ApprovalsError」をエラー終了イベント「throw Reject Error」 に関連付けます。
9. 埋めこみのサブプロセス「Approvals」でスローされたエラーは、メイン・プロセス(親レベルのプロセス)によって、キャ ッチする必要があります。これは、サブプロセス「Approval」にアタッチされたキャッチ・エラー中間イベントによって実 現します。
10. エラー中間イベント「catch Reject Error」をドラッグし、サブプロセス「Approvals」の境界にドロップします。以下のスク リーンショットで示すように設定します。「Catch Reject Error」をメッセージ終了イベント「quoteCancelled」に接続しま す。ブラウザボタンを使用して、「Business Catalog」から「ApprovalsError」を選択します。「Data Associations」タブ で「quote」をマップします。 11. これで、エラー伝播部分の設定は完了です。
3.3. ビジネス例外のキャッチ
エラー境界イベントは、ビジネス例外を捕捉するためにも使用できます。サービス・タスクがサービスを起動し、サービスがフ ォルトをスローすると、ビジネス例外が生成されます。エラー境界イベントは、ビジネス例外をキャッチするために使用されま す。次の例では、「FulfillOrderProcess」が「QuoteProcess」の「Fulfill Order」ステップから呼び出されます。「Fulfill Order」は一定の条件のもとでフォルトをスローし、ビジネス例外として「QuoteProcess」に伝播します。「QuoteProcess」は エラー境界イベントを使用してビジネス例外をキャッチします。「FulfillOrderProcess」は「Quote」データ型の入力と出力を持つ同期BPMNプロセスです。「FulfillOrderProcess」には1 つのメッセージ開始イベント(操作―同期)と2つのメッセージ終了イベントがあります。メッセージ終了イベント「Order Fulfilled」は通常の方法で構成され、「Quote」データ型(ビジネス・オブジェクト)の出力パラメータを持っています。 もう一つのメッセージ終了イベント「Inventory Fault」は、別の方法で設定します。このイベントの引数は、事前定義済のビ ジネス例外「Inventory Fault」となります。これにより、メッセージ終了イベントがトリガーされた時、フォルトがスローされ、ビ ジネス例外として「QuoteProcess」に伝播されます。
1. ビジネス例外「InventoryFault」をキャッチするために、キャッチ・エラー境界イベントを「Fulfill Order」ステップに追 加する必要があります。キャッチ・エラー境界イベントをドラッグし、「Fulfill Order」ステップの境界にドロップします。こ のエラー境界イベンに「catch Inventory Fault」と名前を付けます。
2. エラー境界イベント「catch Inventory Fault」を右クリックします。「Properties」を選択して、「Properties」ウィザードを 起動します。「Implementation」タブを選択し、「Exception」フィールドの隣にあるブラウザボタンを使用して、 「Business Catalog」内の「Business Exceptions」を参照します。ビジネス例外「Inventory Fault」を選択します。 「Inventory Fault」をキャッチするためのエラー境界イベント「catch Inventory Fault」の設定については、以下のスク リーンショットを参照してください。
3. 下図で示すように、エラー境界イベント「catch Inventory Fault」のデータ・アソシエーションを行います。
4. 「BPM Component Palette」からユーザー・タスクをドラッグ&ドロップし、「Procure Parts」と名前を付けます。ユーザ ー・タスク「Procure Parts」をエラー境界イベント「catch Inventory Fault」の送信パスに接続します。
5. キャッチ・タイマー中間イベントをドラッグ&ドロップし、ユーザー・タスク「Procure Part」の送信パスに接続します。
6. タイマー中間イベントに「wait for 2 minutes」と名前を付けます。タイマー中間イベントを「Fulfill Order」ステップに 接続します。
7. Procure Parts」を右クリックします。「Properties」を選択して、「Properties」ウィザードを開きます。 「Implementation」タブを選択し、プラス記号をクリックして、「Human Task」エディタを開きます。「Name」フィールド に「ProcureParts」と入力し、「Title」フィールドに「Procure Parts」と入力します。「Outcomes」フィールドから「OK」を 選択します。プラス記号のボタンをクリックして、「Data Object」ブラウザを開きます。「quote」データ・オブジェクトをド ラッグし、「Task」エディタの「Parameters」セクションにドロップします。「OK」をクリックし、再び「OK」をクリックします。 8. プロセス参加者や割当先へタスクの詳細を提示するために、ヒューマン・タスクの実装では、タスク・フォームと呼ばれ るタスクに関連付けられたユーザー・インターフェースを備えています。タスク・フォームに関連付けられたヒューマン・ タスクの実装アーティファクトはまだ作成していないため、次にヒューマン・ワークフロー「ProcureParts」の実装アーテ ィファクトにタスク・フォームを作成します。「Business Catalog/Human Tasks」フォルダに移動し、
「ProcureParts.task」ファイルをダブル・クリックして、開きます。
9. 「Task」エディタが開きます。「Task」エディタの上にある「Create Form」メニューをクリックし、「Auto-Generate Task Form」オプションを選択します。Oracle BPM 11gでは、Oracle Application Development Framework(ADF)を使 用して、ヒューマン・タスクのユーザー・インターフェースを作成します。
11. ポップアップされたすべてのダイアログで「OK」をクリックして、デフォルトの設定をそのまま使用します。
12. これで、ヒューマン・タスク「ProcureParts」の実装アーティファクトのユーザー・インターフェースの設定は完了します。 13. 以下のスクリーンショットは、タイマー中間イベント「wait for 2 minutes」の設定を示しています。タイマー中間イベント
これで、「Fulfill Order」ステップから「FulfillOrderProcess」を呼び出し中にスローされたビジネス例外(フォルト)を処 理するための「QuoteProcess」の変更は完了です。次の手順では、プロセスを実行し、異なる条件下での動作を理解 します。以下のスクリーンショットは、完成したプロセスです。
4. Sales Processes BPMプロジェクトのデプロイ
1. 「Applications Navigator」に移動します。BPMプロジェクト「Sales Processes」を選択し、「Deploy」を選択します。以 下のスクリーンショットで表示される手順に従ってください。途中でBPMランタイム・エンジンへの接続を選択する必要 があります。
5. QuoteProcessの実行
Oracle BPM Workspaceは、割り当てられたロールや、企業内のロールに関連するプロセスと対話できるWebアプリケーシ ョンです。最小限のトレーニングを受けることで、Workspaceを使用して、効果的かつ効率的にタスクを管理することができ ます。Workspaceは、ロールを割り当てられているビジネス・プロセスに対するポータルまたはウィンドウとして機能します。 Workspaceで保留中のタスクを選択し、トランザクションまたはタスクに関連したトランザクションを実行することができます。 Workspaceは、任意の場所からインターネット・ブラウザを使用して作業にアクセスすることができます。電子メール・リーダ ーのようなWorkspaceのインターフェースを使用して、担当する着信タスクを表示することもできます。5.1. QuoteProcessの起動
実際のシナリオでは、Siebelのようなシステムから販売見積もりの依頼を取得しますが、今回はSOAインフラストラクチャ・コ ンソールから手動でイベントを作成して、プロセスの開始をテストします。 1. 「input.xml」ファイルのコンテンツをコピーします。 2. 次のURLを入力して、ブラウザでSOAインフラ・コンソールを開きます。 http://localhost:7001/soa-infra 3. 認証情報の入力が指示されるので、「weblogic/welcome1」を入力します。正しく認証されると、次のページが表示さ れます。 4. 「Test QuoteProcess.service」リンクをクリックします。 5. 下図で示すように、XMLペイロードをペーストし、画面の下部にある「Invoke」をクリックします。これにより、 「QuoteProcess」が起動されます。5.2. BPM Workspaceを使用したプロセスの実行
プロセス・インスタンスが作成された後、プロセスに関連するタスクを処理するためにWorkspaceアプリケーションにログイン します。 1. プロセスに参加する最初の人は、「Create Quote」ステップで「SalesRep」ロールが割り当てられた「jcooper」です。 「jcooper」としてBPM Workspaceにログインします。パスワードは「welcome1」となります(すべてのユーザーのパスワ ードはwelcome1です)。 2. 「jcooper」がログインすると、下図で示すように「My Tasks」セクションに保留中のタスクが表示されています。このタス クは、ビジネス・プロセス「QuoteProcess」の最初の対話型ステップ「CreateQuote」の実行待ちになっています。 3. プロセス・インスタンスの位置を確認するために、「Process Tracking」タブに移動します。ページの上部のセクション にあるプロセス・インスタンスの表で、プロセス・インスタンスをクリックします。プロセス・インスタンスの監査証跡が下に 表示されます。「Audit Trail」セクションを展開し、「graphical view」を選択します。プロセス・インスタンスが「Create Quote」ステップ で実行待ちになっていることが分かります。
4. 「Tasks」タブに戻り、「Create Quote」タスク・アイテムをクリックします。以下のエラーが表示されますが、これは無視し てかまいません。このエラーは、「Create Quote」ステップに関連付けられたユーザー・インターフェースが存在しない ことを示しています(このハンズオンでは該当するユーザー・インターフェースを作成していません)。 5. 「Action」メニューに移動し、「OK」を選択します。タスク・アイテムが完了し、受信トレイから削除されます。プロセス・イ ンスタンスは次のステップ「Insert Quote」に進みます。これは、システム・ステップであり、このステップが完了すると 「Approvals」サブプロセスに移動します。
6. 「Approval」サブプロセスでは、「Approval Deal」と「Approve Terms」ステップが同時にアクティブ化されます。 「Approve Deal」のユーザーは「wfaulk/welcome1」であり、「Approve Terms」のユーザーは
「cdickens/welcome1」です。これらのユーザーとしてBPM Workspaceにログインし、「Actions」に移動し、 「Approve」を選択します。完了した「Approve Deal」タスクを以下のスクリーンショットで示します。
7. サブプロセス「Approval」を離れると、プロセス・インスタンスは「CustomerProcess」に見積もりを送信し、応答を待ち ます。ロール「Customer」を持つ「cdoyle/welcome1」として、BPM Workspaceにログインし、タスク「Review」に対し て「Actions」→「Approve」を選択します。これにより、「CustomerProcess」からの見積もりの応答が発行されます。見 積もり応答は、その後、ゲートウェイ・ステップ「Receive Response」に進みます。
9. QuoteProcess」インスタンスは「CustomerProcess」からの応答と見積もりを受信し、「accespt quote」メッセージ中 間イベントがアクティブになります。その後、「Fulfill Order」ステップがアクティブになり、「FulfillOrderProcess」を呼 び出します。「QuoteRequestStatus」の「Quote」属性が「REJECT」に設定されている場合以外のすべてのケースで、 「FulfillOrderProcess」は正常に応答を返します。 10. これで、プロセス・インスタンスは正常に完了しました。監査証跡を、以下のスクリーンショットに表示します。
5.3. システム例外のテスト
1. 「QuoteProcess」を起動するために、「soa-infra」ページに移動し、「input.xml」をもう一度使用します。「Insert Quote」ステップで重複レコートが挿入されるため、BPMランタイム・エンジンによってバインディング・フォルトがスロー されます。 2. バインディング・フォルトは境界エラー・イベント「insert errors」によってキャッチされます。プロセス・インスタンスは 「Manually Insert Quote」ステップの例外パスに進みます。3. 「jstein/welcome1」としてログインし、「Manually Insert Quote」ステップに進み、作業を完成します。
4. プロセス・インスタンスは、「Approvals」サブプロセスに再度移動します。プロセスを完了するためには、5.2項の手順6 から最後までの手順を行ってください。
5.4. サブプロセスの境界を越えたエラー伝播のテスト
1. 「input.xml」の「Opportunity ID」を「ABC222」に変更します。
2. 5.2項のすべての手順を行います。
3. 5.2項の手順6の「Approve Deal」または「Approve Terms」ステップで、「Action」→「Reject」を選択します。これによ り、「throw Reject Error」がトリガーされます。エラーは「Approvals」サブプロセスに関連付けられたエラー境界イベ ント「catch Reject Error」によってキャッチされます。例外パスにより「Quote cancelled」が送信され、プロセス・インス タンスが完了します。