![]() ![]() ![]() ![]() |
前の手順では、分岐ノード (Sales Tax Calculation Needed?) 用の条件セットを設計しました。この手順では、分岐ノード (Sales Tax Calculation Needed?) で定義した条件の評価結果が true の場合 (つまり、クライアントから受け取った XML ドキュメント内の shipAddress/state
の値が、CA、California、NJ、New Jersey と等しい場合) に実行するアクティビティの作成方法を学習します。特に、Web サービス コントロールを介して税計算 Web サービスを呼び出すビジネス プロセスの設計方法について学びます。
このチュートリアルでは、TaxCalcControl.java
Web サービス コントロールが Tutorial_Process_Application_Web\requestquote\services
フォルダに用意されています。
注意 : | Java コントロールは、Workshop フレームワークで管理されているサーバサイド コンポーネントであり、Workshop アプリケーションで使用できるように、外部リソースとビジネス ロジックをカプセル化します。Java コントロールは、ビジネス プロセスと他のリソース間のインタフェースを表します。基底のコントロールの実装で、対話の詳細の大部分を処理します。コントロールにより、ビジネス プロセスから直接呼び出し可能な Java インタフェースがエクスポーズされます。ユーザは、コントロールのインスタンスをプロジェクトに追加し、そのメソッドを呼び出すことができます。 |
注意 : | Web サービスとその関連コントロールの作成方法の詳細については、このチュートリアルでは説明していません。Web サービスの作成、および Web サービスのコントロールの作成方法の詳細については、以下を参照してください。 |
Web サービス コントロールの呼び出しには、以下の作業が伴います。
注意 : | コントロールのインスタンスは、[パッケージ・エクスプローラー] ビューから [データ パレット] の [コントロール] ノード下にドラッグ アンド ドロップすることによって作成することもできます。 |
void requestTaxRate(String stateID_arg)
] メソッドを [データ パレット] ビューから [デザイン] ビューまでドラッグし、[Sales Tax Calculation Needed?] の [Yes] ノードの直下にドロップします。
コントロール送信ノードが作成されます。このノードは、税計算 Web サービス コントロールへの非同期呼び出しを表します。このノードの名前は、[データ パレット] ビューから選択したメソッド (requestTaxRate
) の名前と同じになります。
注意 : | この対話は非同期で行われるように設計されます。つまり、ビジネス プロセスは、Web サービスへの要求の送信後、応答を待機しません。ビジネス プロセスは処理を続行し、Web サービスが要求を完了したときに応答を受け取ります。 |
taxCalcControl
と void request TaxRate(String stateID_arg)
がすでに選択されています。
デフォルトでは、[データの送信] タブは [変数の割り当て] ペインで表示されます。[コントロールが予期する値] フィールドには、taxCalcControl
Web サービスがエクスポーズする requestTaxRate()
メソッドが予期するデータ型 (String stateID_arg
) が示されます。
注意 : | 前の手順で学習したように、[データの送信] タブには [変数の割り当て] と [トランスフォーメーション] の 2 つのモードがあります。 |
この場合は、taxCalcControl
コントロールへの入力として必要なデータ型が Java String 型であるのに対して、RFQ メッセージ (shipAddress/state
の値を含む) が格納される変数のデータ型は型付き XML (QuoteRequestDocument
、XML スキーマに対して有効) であるため、[トランスフォーメーション] モードに切り替える必要があります。
注意 : | WLI には、異種データ型間のデータのトランスフォーメーションを行う XQuery Mapper と呼ばれるツールがあります。XQuery Mapper を使用して作成するデータ トランスフォーメーションは xq ファイルに格納されます。トランスフォーメーション ファイルは、ビジネス プロセスが対話するリソースの 1 つと考えることができます。データ トランスフォーメーションが格納されているファイルは、コントロールとしてビルドされます。コントロールがエクスポーズするメソッドをビジネス プロセスが呼び出すことにより、異種のデータ型のトランスフォーメーションを実行できます。 |
requestXML
(QuoteRequestDocument
)] を選択します。これは、ビジネス プロセスの最初にクライアント要求ノード用に作成した変数です。
XQuery ファイルが作成され、XQuery トランスフォーメーション パースペクティブに自動的に開かれます。
XQuery ファイルのデザイン ビューで、QuoteRequestDocument
XML ドキュメントの要素が [ソース] ペインに、[String
] 要素が [対象] ペインに表示されます。
state
] を選択し、[対象] ペインの [String
] までドラッグします。次の図に示すように、state
要素と String
要素を結ぶ線が表示されます。この線は、2 つのデータ型間のトランスフォーメーションを表します。xq
ファイルを保存します。
XQuery ファイル (RequestQuotetaxCalcControlrequestTaxRate.xq
) とトランスフォーメーション コントロール ファイル (RequestQuoteTransformation.java
) が作成されます。両方のファイルが [パッケージ・エクスプローラー] ビューに表示されます。また、トランスフォーメーション コントロールのインスタンスが作成され、[データ パレット]([コントロール] フォルダ) 内の [transformations] 下に表示されます。
ビジネス プロセスと税計算コントロールとの対話は非同期的に行われます。つまり、税計算サービスが応答を準備している間も、ビジネス プロセスは他の作業を引き続き実行できます。税計算サービスからの応答が用意できると、ビジネス プロセスに通知されます。
前の節では、コントロールを介した、税計算 Web サービスの呼び出しを設計しました。
税計算コントロールから返される税率を受け取るロジックをビジネス プロセスに追加するには、以下の手順を実行します。
void returnTaxRate(float taxRate_arg)
] メソッドを [データ パレット] から [デザイン] ビューまでドラッグし、[Sales Tax Calculation Needed?] ノードの [requestTaxRate] ノードの直下にドロップします。
税計算 Web サービス コントロールからの非同期応答を表すコントロール受信ノードが作成されます。このノードの名前は、[データ パレット] から選択したメソッド (returnTaxRate
) の名前と同じになります。
ノード ビルダが [一般的な設定] タブで表示されます。コントロール インスタンスとターゲット メソッド、つまり taxCalculation
と returnTaxRate(float taxRate_arg)
がすでに選択されています。
[コントロールが返す値] フィールドは、taxCalculation コントロールの returnTaxRate()
メソッドが返すパラメータのデータ型と名前を示します。
0
(ゼロ) を入力します。これにより、taxRate
の値がゼロに初期化されます。
実行時に消費税率が割り当てられる新しい変数が作成され、[データ パレット] ビューの [変数] に Java 変数として表示されます。
これで、returnTaxRate ノードの設計と、分岐ノードの条件の評価結果が true のときにビジネス プロセスが実行するアクティビティの設計が完了しました。
[デザイン] ビューに、ビジネス プロセスが以下の図のように表示されます。
注意 : | Web サービス コントロールへの非同期呼び出しを追加すると、開始ノードのアイコンが ![]() ![]() |
注意 : | プロセスがステートレスかステートフルかを確認するには、開始ノードを選択し、[JPD コンフィグレーション] ビューで stateless プロパティを探します。 |
注意 : | ステートフル ビジネス プロセスとステートレス ビジネス プロセスの詳細については、『ビジネス プロセス構築ガイド』の「ステートレス/ステートフル ビジネス プロセスの構築」を参照してください。 |
注意 : | プロセスのプロパティがステートレスからステートフルに変った理由については、「トランザクション境界」を参照してください。 |
![]() ![]() ![]() |