チュートリアル : 初めてのビジネス プロセス構築

     前  次    目次     
ここから内容

手順 3 : 実行の代替パスの条件定義

この手順では、ビジネス プロセスの一般的なパターンを設計する方法について説明します。この一般的なパターンでは、1 つまたは複数の条件の評価に基づいて 1 つの実行パスを選択します。このパターンを作成するには、ビジネス プロセスの分岐ノードを設計します。

チュートリアル シナリオのこのパートでは、クライアントから受け取る XML メッセージが割り当てられている変数からビジネス プロセスが抽出する値に基づいて分岐を行うように、ビジネス プロセスを設計します。設計条件は 1 つで、実行時にその条件が評価されて、受信する見積り要求 XML で指定されている発送先について消費税を計算する必要があるかどうかが判断されます。条件の評価結果が「true」の場合は消費税を計算する必要があり、消費税を計算する Web サービスを呼び出すブランチに沿って実行フローが進みます。条件の評価結果が「false」の場合は消費税を計算する必要がなく、デフォルトのブランチに沿って実行フローが進みます。ここで実行するタスクは次のとおりです。

ビジネス プロセスに分岐ノードを追加するには
  1. BEA Workshop にノード パレットが表示されていない場合は、BEA Workshop メニューからArrow symbol [ウィンドウArrow symbolビューの表示Arrow symbolノード パレット] を選択します。[パースペクティブの選択] ダイアログ ボックスで [プロセス] を選択します。これにより、ノード パレットが表示されます。
  2. ノード パレットで [ Decision] をクリックし、分岐ノードをビジネス プロセスにドラッグし、「手順 2 : プロセスの開始方法の指定」で作成した [Client Requests Quote] ノードの直下にドロップします。
  3. 注意 : ノード パレットからデザイン ビューにノードをドラッグすると、ビジネス プロセスにターゲット が表示されます。ターゲットの場所の近くにノードをドラッグすると、そのターゲットがアクティブ  になり、カーソルの形が矢印 に変わります。ここでマウスのボタンを放すと、ビジネス プロセスのアクティブになったターゲットで示される場所に、ノードが設定されます。

    分岐ノードには、条件を表すノード (Condition というラベルが付きます) と 2 つの実行パスが含まれています。1 つの実行パスは、条件の評価結果が「true」の場合に実行されるイベントのパスで、もう 1 つの実行パスは、条件の評価結果が「false」の場合に実行されるイベントのパス (Default パス) です。

  4. このノードのビジネス タスクを明確に示すことができるように、[Decision]、[Condition]、および [Default] ラベルを変更します。
    1. ノードの [名前] ボックスで、DecisionSales Tax Calculation Needed? に変更し、〔Enter〕を押します。
    2. 注意 : [名前] ボックスが表示されていない場合は、[Decision] をダブルクリックして表示してください。
    3. [Condition] を置き換えるラベルを入力し、「true パス」を識別するには、[Condition] をダブルクリックし、Yes と入力して〔Enter〕を押します。
    4. [Default] を置き換えるラベルを入力し、「false」パスを識別するには、[Default] をダブルクリックし、No と入力して〔Enter〕を押します。
    5. ビジネス プロセスの分岐ノードが、以下の図に示すように、デザイン ビューに表示されます。



この分岐ノードに条件を定義するには
  1. 条件ノード () をダブルクリックして分岐ビルダを呼び出します。このビルダでは、分岐ロジックの設計に役立つ、タスク駆動型のユーザ インタフェースが提供されます。


  2. 分岐ビルダでは、デフォルトで [変数] が選択されています。この場合は、XML スキーマに対して有効な、XML ドキュメント内の要素の値に基づいて分岐を設計するので、この選択を変更しないでください。

  3. 分岐の決定の基になる XML 要素を選択します。この手順は、次のとおりです。
    1. 分岐ビルダで をクリックして、[左辺の式] 用の変数を選択します。
    2. プロジェクト内の変数のドロップダウン リストが表示されます。この場合は、ビジネス プロセスの最初にクライアント要求ノード用に作成した変数 requestXML が表示されます。

      QuoteRequest 用の XML スキーマ表現が [式ノードの選択] ペインに表示されます。



      前の図に示したように、この変数に割り当てられている XML ドキュメントの要素と属性は、ノードの階層として表現されます。この例のスキーマ (QuoteRequest.xsd) は、ルート要素 quoteRequest、子要素 customerNameshipAddress、および で識別される反復要素 widgetRequest が指定されます。shipAddress 要素に含まれる属性は、streetcitystate、および zip です。

    3. [式ノードの選択] ペインで、ShipAddress を展開して、state 属性をクリックします。
    4. これにより、条件を定義する要素を表す XML ドキュメント内のノードが選択されます。

      [選択された式] フィールドには以下の式が表示されます。

      fn:data($requestXML/ns0:shipAddress/@state)

    5. [選択] をクリックします。
    6. [左辺の式] フィールドに式が表示されます。

    7. [演算子] リストから = 演算子を選択します。
    8. [右辺の式] フィールドに "CA" と入力します。
    9. [追加] をクリックして、作成した条件を追加します。
    10. fn:data($requestXML/ns0:shipAddress/@state) = "CA"

      これにより、このノードの最初の条件の設計が完了します。

    11. 以下の図に示すように、条件リストのペインで式を選択します。


    12. [結合の種類] オプションを [OR] に変更します。
    13. [右辺の式] フィールドで ["CA"] を選択し、"California" に変更します。
    14. [追加] ボタンが [更新] に変わります。
    15. [更新] ボタンの横の矢印を選択し、スクロールダウンしてメニューから [追加] を選択します。
    16. 式を選択する操作を繰り返し、その式を条件リストに追加して、[右辺の式] フィールドのエントリを NJ および New Jersey に変更します。
    17. 以下の図に示すように、指定した条件が条件リストのペインに表示されます。



  4. [閉じる] をクリックして、分岐ビルダを閉じます。
  5. デザイン ビューの条件ノードのアイコンが、 から に変わります。これにより、このノードに定義した条件が XML の評価に基づくものであることを視覚的に確認できます。

    この手順で、実行時にフローが分岐ノードに遷移するときに評価される条件の設計が完了します。作成した条件ロジックは、ソース コードに XQuery 式として記述されます。次の節「ソース コードの XML 条件」を参照してください。

    これで、フローで後に続くパスのアクションを定義する準備が整いました。
    手順 4 : Web サービスの呼び出し」に進んでください。

ソース コードの XML 条件

分岐ビルダで XML 条件を定義すると、BEA Workshop では XQuery 式として JPD ファイルに書き込まれます。具体的には、XQuery 式が JPD ファイルの Process Language 領域に書き込まれます。

前の節の作業で記述された XQuery 式を表示するには、[ソース] タブをクリックします。

前の節の手順 2 から手順 9 の例に従って定義された条件により、ソース コードに以下の XQuery 式が作成されます。

@com.bea.wli.common.XQuery(prolog=
"declare namespace ns0=\"http://www.example.org/request\";" +
	"declare function cond_requestXML_1($requestXML as element()) as  		     xs:boolean  {" +
         " (((data($requestXML/ns0:shipAddress/@state) = \"CA\") or              (data($requestXML/ns0:shipAddress/@state) = \"California\"))               or (data($requestXML/ns0:shipAddress/@state) = \"NJ\")) or       (data($requestXML/ns0:shipAddress/@state) = \"New Jersey\")" + "};" +        "declare function get_requestXML1($requestXML as element())                as element()* { " +
               "$requestXML/ns0:widgetRequest" +
"};",

関連トピック

分岐条件の定義


  ページの先頭       前  次