ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

7.7 switchアクティビティを使用した条件付きブランチの作成

条件付きブランチでは、BPELプロセスの実行フローを制御するための判断を実行します。switchアクティビティを使用すると、条件付きブランチに基づいて異なるアクションを作成できます。2つ以上のブランチ(各ブランチはXPath式の形式)を設定します。式がtrueの場合は、そのブランチが実行されます。式がfalseの場合は、有効なブランチ条件が見つかるか、otherwiseブランチに達するか、またはブランチがなくなるまで次のブランチ条件に進みます。複数のブランチ条件がtrueの場合は、最初にtrueと判断されたブランチがBPELによって実行されます。

図7-15に、SOA Order Bookingアプリケーションでの条件付きブランチを示します。 「SelectByPrice」switchアクティビティを使用して、最低価格の見積りを提供するサプライヤを選択します。

図7-15 switchアクティビティを使用した条件付きブランチ

図7-15の説明は次にあります。
「図7-15 switchアクティビティを使用した条件付きブランチ」の説明

図7-16に、caseブランチを定義するXPath式を示します。Select Manufacturerは、その価格の見積りがRapid Manufacturerの価格見積りより低い場合に選択されます。

図7-16 「SelectByPrice」switchアクティビティのcaseブランチ

図7-16の説明は次にあります。
「図7-16 「SelectByPrice」switchアクティビティのcaseブランチ」の説明

caseブランチがfalseに評価された場合は、Rapid Manufacturerが選択されます。

詳細は、『Oracle BPEL Process Manager開発者ガイド』の次の条件付きブランチに関する項を参照してください。

7.7.1 switchアクティビティを使用した条件付きブランチの作成方法

条件付きブランチをBPELプロセスに追加するには、switchアクティビティを使用します。

switchアクティビティを使用して条件付きブランチを作成する手順は、次のとおりです。

  1. 「Switch」アクティビティをBPELプロセスにドラッグ・アンド・ドロップします。

  2. 「Switch_1」アイコンをダブルクリックし、アクティビティの名前を入力します。

  3. 「Switch」アクティビティを開き、switch caseブランチを表示します。

    「Switch」アクティビティにはデフォルトで2つのswitch caseブランチがあり、各ブランチには機能要素を挿入するためのボックスがあります。ブランチを追加するには、「Switch」アイコンを右クリックして「Switch Caseの追加」または「Switch Otherwiseの追加」を選択します。

  4. 最初のブランチで「<case>」をダブルクリックします。

  5. 図7-17に示すように、「Switch Case」ダイアログを使用して、条件付きブランチのロジックを指定します。

    図7-17 「SelectByPrice」switchアクティビティへのcaseブランチの作成

    図7-17の説明は次にあります。
    「図7-17 「SelectByPrice」switchアクティビティへのcaseブランチの作成」の説明

    1. 「名前」フィールドにcaseの名前を入力します。

    2. ノートパッド・アイコンをクリックし、XPath式ビルダーを使用して、「式」フィールドにXPathブール式を作成します。

    3. 「OK」をクリックし、「式ビルダー」ダイアログと「Switch Case」ダイアログを閉じます。

7.7.2 switchアクティビティを使用した条件付きブランチ作成時の処理内容

例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')) &lt; 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>