条件付きブランチでは、BPELプロセスの実行フローを制御するための判断を実行します。switchアクティビティを使用すると、条件付きブランチに基づいて異なるアクションを作成できます。2つ以上のブランチ(各ブランチはXPath式の形式)を設定します。式がtrueの場合は、そのブランチが実行されます。式がfalseの場合は、有効なブランチ条件が見つかるか、otherwiseブランチに達するか、またはブランチがなくなるまで次のブランチ条件に進みます。複数のブランチ条件がtrueの場合は、最初にtrueと判断されたブランチがBPELによって実行されます。
図7-15に、SOA Order Bookingアプリケーションでの条件付きブランチを示します。 「SelectByPrice」switchアクティビティを使用して、最低価格の見積りを提供するサプライヤを選択します。
図7-16に、caseブランチを定義するXPath式を示します。Select Manufacturerは、その価格の見積りがRapid Manufacturerの価格見積りより低い場合に選択されます。
caseブランチがfalseに評価された場合は、Rapid Manufacturerが選択されます。
詳細は、『Oracle BPEL Process Manager開発者ガイド』の次の条件付きブランチに関する項を参照してください。
whileアクティビティを使用した、2つのアクション間で選択を実行するwhileループの作成
条件付きブランチへのイベントおよびタイムアウトの追加
条件付きブランチをBPELプロセスに追加するには、switchアクティビティを使用します。
switchアクティビティを使用して条件付きブランチを作成する手順は、次のとおりです。
「Switch」アクティビティをBPELプロセスにドラッグ・アンド・ドロップします。
「Switch_1」アイコンをダブルクリックし、アクティビティの名前を入力します。
「Switch」アクティビティを開き、switch caseブランチを表示します。
「Switch」アクティビティにはデフォルトで2つのswitch caseブランチがあり、各ブランチには機能要素を挿入するためのボックスがあります。ブランチを追加するには、「Switch」アイコンを右クリックして「Switch Caseの追加」または「Switch Otherwiseの追加」を選択します。
最初のブランチで「<case>」をダブルクリックします。
図7-17に示すように、「Switch Case」ダイアログを使用して、条件付きブランチのロジックを指定します。
図7-17 「SelectByPrice」switchアクティビティへのcaseブランチの作成
「名前」フィールドにcaseの名前を入力します。
ノートパッド・アイコンをクリックし、XPath式ビルダーを使用して、「式」フィールドにXPathブール式を作成します。
「OK」をクリックし、「式ビルダー」ダイアログと「Switch Case」ダイアログを閉じます。
例7-7に、SOA Order Bookingアプリケーションの「SelectByPrice」switchアクティビティのソース・コードを示します。
例7-7 「SelectByPrice」switchアクティビティのソース・コード
<switch name="SelectByPrice"> <!--case condition="number(bpws:getVariableData('selectManufacturerResponse', 'parameters','/ns22:processRequestQuoteResponseElement/ns22:result/ ns22:supplierPrice')) < number(bpws:getVariableData ('rapidManufacturerResponse','parameters','/ns23:OrderQuoteResponse/ ns24:return/ns25:supplierPrice'))"--> <case condition="true()"> <assign name="AssignSelectManufacturer"> <copy> <from variable="selectManufacturerResponse" part="parameters" query="/ ns17:processRequestQuoteResponseElement/ns17:return/ns17:supplierPrice"/> <to variable="inputVariable" part="payload" query="/ client:SOAOrderBookingProcessRequest/ client:purchaseOrder/ns4:SupplierInfo/ns4:SupplierPrice"/> </copy> <copy> <from variable="selectManufacturerResponse" part="parameters" query="/ ns17:processRequestQuoteResponseElement/ns17:return/ns17:supplierName"/> <to variable="inputVariable" part="payload" query="/ client:SOAOrderBookingProcessRequest/client:purchaseOrder/ns4:SupplierInfo/ ns4:SupplierName"/> </copy> </assign> </case> <otherwise> <assign name="AssignRapidManufacturer"> <copy> <from variable="rapidManufacturerResponse" part="parameters" query="/ ns23:POItemsQuoteResponse/ns30:return/ns30:supplierPrice"/> <to variable="inputVariable" part="payload" query="/ client:SOAOrderBookingProcessRequest/client:purchaseOrder/ns4:SupplierInfo/ ns4:SupplierPrice"/> </copy> <copy> <from variable="rapidManufacturerResponse" part="parameters" query="/ ns23:POItemsQuoteResponse/ns30:return/ns30:supplierName"/> <to variable="inputVariable" part="payload" query="/ client:SOAOrderBookingProcessRequest/client:purchaseOrder/ns4:SupplierInfo/ ns4:SupplierName"/> </copy> </assign> </otherwise> </switch>