ヘッダーをスキップ
Oracle BPEL Process Manager開発者ガイド
10g(10.1.3.1.0)
B31874-03
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

7 条件分岐

この章では、条件分岐について説明します。条件分岐により、BPELプロセスの実行フローを制御するための判断ができるようになります。

この章の内容は次のとおりです。

7.1 条件分岐のユースケース

第6章「パラレル・フロー」で作成したBPELプロセスでは、2つの融資提案(United Loanの条件とStar Loanの条件)を収集しました。この章では、年率(APR)が最も低い融資を自動的に選択するようにBPELプロセスを設計する方法について説明します。


関連項目:

次のサンプルを参照してください。
  • SOA_Oracle_Home¥bpel¥samples¥demos¥LoanDemo¥LoanFlow


7.2 条件分岐の概念の概要

BPELは、条件分岐によって選択するロジックを利用します。次のいずれかのアクティビティを使用すると、条件分岐に基づいて異なるアクションを選択するコードを設計できます。

いくつかのブランチが設定され、各ブランチにはXPath式形式の条件が指定されます。

条件分岐には、タイムアウトを設定できます。つまり、指定の期間内にレスポンスを生成できない場合、BPELフローは待機を中止し、そのアクティビティを再開できます。第10章「イベントおよびタイムアウト」では、この機能の詳細を説明しています。

7.3 switchアクティビティによる条件分岐の定義

第6章では、BPELプロセスのflowアクティビティは2つの融資提案を同時に収集しましたが、どちらの条件も比較していません。各条件は、それぞれのグローバル変数に格納されています。2つの条件を比較し、その比較に基づいて決定するには、BPELフローにswitchアクティビティが必要です。

switchアクティビティに定義されたBPEL条件分岐プロセスの概観を図7-1に示します。

図7-1 条件分岐

図bpmdg017.gifの説明が続きます
図bpmdg017.gifの説明

flowアクティビティと同様に、switchアクティビティは複数のブランチを持ちます。この例では、ブランチが2つだけあります。最初のブランチは、United Loanからの融資提案を選択するブランチであり、XPathブール式を含むcase条件が適合した場合に実行されます。適合しなかった場合は、Star Loanの融資提案を選択する2番目のブランチが実行されます。デフォルトでは、switchアクティビティに含まれるSwitch Caseは2つですが、必要に応じて追加できます。

<switch name="switch-1">
     <case condition="bpws:getVariableData('loanOffer1','payload',
     '/autoloan:loanOffer/autoloan:APR') <;
     bpws:getVariableData('loanOffer2','payload','/autoloan:loanOffer/autoloan:APR
     ')">
          <assign name="selectUnitedLoan">
            <copy>
               <from variable="loanOffer1" part="payload">
               </from>
               <to variable="selectedLoanOffer" part="payload"/>
            </copy>
          </assign>
     </case>
     <otherwise>
        <assign name="selectStarLoan">
          <copy>
            <from variable="loanOffer2" part="payload">
            </from>
            <to variable="selectedLoanOffer" part="payload"/>
          </copy>
         </assign>
     </otherwise>
</switch>

switchアクティビティの追加

Oracle JDeveloperでswitchアクティビティをBPELフローに追加するには、次のようにします。

  1. コンポーネント・パレット「プロセス・アクティビティ」リストからswitchアクティビティをBPELフローにドラッグします。

  2. 「+」記号をクリックしてswitchアクティビティを開きます。

    switchアクティビティにはデフォルトで、それぞれ機能要素用のボックスを持つ2つのSwitch Caseブランチがあります。ブランチを追加するには、switchアクティビティ全体を選択して右クリックし、メニューから「Switch Caseの追加」を選択します。

    図switch3.gifの説明が続きます
    図switch3.gifの説明

  3. 最初のブランチを右クリックして、メニューから「編集」を選択します。

    Switch Caseウィンドウが表示されます。

  4. [Ctrl]キーを押しながら[Space]バーを押してXPathビルディング・アシスタントを起動し、「式」フィールドにXPathブール式を入力します。たとえば、次のようになります。

    bpws:getVariableDate('loanOffer1','payload','/loanOffer/APR') >
    bpws:getVariableData('loanOffer2','payload','/loanOffer/APR')
    
    
  5. この式は1行で入力します。XPath式ビルダーを使用するには、「式」フィールドの上にある「XPath式ビルダー」アイコンをクリックします。

    LoanFlowチュートリアルで使用する2つの融資提案は、グローバル変数loanOffer1およびloanOffer2に格納されています。それぞれの融資提案変数には、融資提案のAPRが格納されます。BPELフローは、APRが最も低い融資を選択する必要があります。次のいずれかのswitchアクティビティを実行します。

    • loanOffer1のAPRの方が高い場合、最初のブランチはloanOffer2のペイロードをselectedLoanOfferのペイロードに割り当てることで、loanOffer2を選択します。

    • loanOffer1のAPRがloanOffer2より高くない場合、otherwiseケースがloanOffer1のペイロードをselectedLoanOfferのペイロードに割り当てます。


関連項目:

Oracle JDeveloperでのswitchアクティビティの作成例は、次のドキュメントを参照してください。
  • 『Oracle BPEL Process Manager Order Bookingチュートリアル』

  • 『Oracle BPEL Process Managerクイック・スタート・ガイド』

  • 「Switchアクティビティ」

  • SOA_Oracle_Home¥bpel¥samples¥references¥Switch


7.4 whileアクティビティによる条件分岐の定義

複数のアクション間で選択を行うようにBPELコードを設計する別の方法としては、whileアクティビティを使用したwhileループの作成があります。whileループは、指定の条件が適合するまで、アクティビティを繰り返します。たとえば、重要なWebサービスでリクエストに対してサービス・ビジー・メッセージを返している場合、そのサービスが使用可能になるまで、whileアクティビティを使用してポーリングし続けることができます。このときのwhileアクティビティの条件はサービスから受け取った最新のメッセージがビジーであることで、whileアクティビティ内の操作はサービスを再チェックすることです。Webサービスからサービス・ビジー以外のメッセージが返されると、whileアクティビティは終了し、理想的にはWebサービスからの有効なレスポンスを使用して、BPELプロセスが続行されます。

Oracle JDeveloperでwhileアクティビティを作成するには、次のようにします。

  1. コンポーネント・パレット「プロセス・アクティビティ」リストからwhileアクティビティをBPELフローにドラッグ・アンド・ドロップします。

    whileアクティビティには、条件式の作成を行うアイコンとwhile定義の検証を行うアイコンがあります。また、アクティビティをドロップしてwhileループを定義する領域も用意されます。

    図while1.gifの説明が続きます
    図while1.gifの説明

  2. while条件の定義に使用するアクティビティをwhileアクティビティの「アクティビティをここにドロップ」領域にドラッグします。

    このアクティビティとしては、既存のアクティビティや新しいアクティビティを使用できます(タスクを起動するinvokeアクティビティなど)。


関連項目:

Oracle JDeveloperでのwhileアクティビティの定義例は、次のドキュメントを参照してください。

7.5 まとめ

この章では、2つの情報の比較結果に基づいて異なる動作を選択するswitchアクティビティの条件フローの作成について、概要と手順を説明しました。この例のBPELプロセスでは、2つの融資提案を比較し、APRが低い方の条件を選択しました。また、この章では、whileループ条件アクティビティについても説明しました。