条件付きブランチでは、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>