|
この手順では、ビジネス プロセスの一般的なパターンを設計する方法について説明します。この一般的なパターンでは、1 つまたは複数の条件の評価に基づいて 1 つの実行パスを選択します。このパターンを作成するには、ビジネス プロセスの分岐ノードを設計します。
チュートリアル シナリオのこのパートでは、クライアントから受け取る XML メッセージが割り当てられている変数からビジネス プロセスが抽出する値に基づいて分岐を行うように、ビジネス プロセスを設計します。設計条件は 1 つで、実行時にその条件が評価されて、受信する見積り要求 XML で指定されている発送先について消費税を計算する必要があるかどうかが判断されます。条件の評価結果が「true」の場合は消費税を計算する必要があり、消費税を計算する Web サービスを呼び出すブランチに沿って実行フローが進みます。条件の評価結果が「false」の場合は消費税を計算する必要がなく、デフォルトのブランチに沿って実行フローが進みます。ここで実行するタスクは次のとおりです。
注意 : | ノード パレットからデザイン ビューにノードをドラッグすると、ビジネス プロセスにターゲット が表示されます。ターゲットの場所の近くにノードをドラッグすると、そのターゲットがアクティブ になり、カーソルの形が矢印 に変わります。ここでマウスのボタンを放すと、ビジネス プロセスのアクティブになったターゲットで示される場所に、ノードが設定されます。 |
分岐ノードには、条件を表すノード (Condition というラベルが付きます) と 2 つの実行パスが含まれています。1 つの実行パスは、条件の評価結果が「true」の場合に実行されるイベントのパスで、もう 1 つの実行パスは、条件の評価結果が「false」の場合に実行されるイベントのパス (Default パス) です。
注意 : | [名前] ボックスが表示されていない場合は、[Decision] をダブルクリックして表示してください。 |
分岐ビルダでは、デフォルトで [変数] が選択されています。この場合は、XML スキーマに対して有効な、XML ドキュメント内の要素の値に基づいて分岐を設計するので、この選択を変更しないでください。
プロジェクト内の変数のドロップダウン リストが表示されます。この場合は、ビジネス プロセスの最初にクライアント要求ノード用に作成した変数 requestXML が表示されます。
QuoteRequest 用の XML スキーマ表現が [式ノードの選択] ペインに表示されます。
前の図に示したように、この変数に割り当てられている XML ドキュメントの要素と属性は、ノードの階層として表現されます。この例のスキーマ (QuoteRequest.xsd
) は、ルート要素 quoteRequest
、子要素 customerName
、shipAddress
、および で識別される反復要素 widgetRequest
が指定されます。shipAddress
要素に含まれる属性は、street
、city
、state
、および zip
です。
これにより、条件を定義する要素を表す XML ドキュメント内のノードが選択されます。
fn:data($requestXML/ns0:shipAddress/@state)
"CA"
と入力します。 fn:data($requestXML/ns0:shipAddress/@state) = "CA"
"CA"
] を選択し、"California" に変更します。
デザイン ビューの条件ノードのアイコンが、 から に変わります。これにより、このノードに定義した条件が XML の評価に基づくものであることを視覚的に確認できます。
この手順で、実行時にフローが分岐ノードに遷移するときに評価される条件の設計が完了します。作成した条件ロジックは、ソース コードに XQuery 式として記述されます。次の節「ソース コードの XML 条件」を参照してください。
これで、フローで後に続くパスのアクションを定義する準備が整いました。
「手順 4 : Web サービスの呼び出し」に進んでください。
分岐ビルダで 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" +
"};",