ヘッダーをスキップ
Oracle Fusion Middleware Oracle SOA Suiteアプリケーションの作成および実行のためのチュートリアル
11g リリース1(11.1.1)
B56240-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

6 OrderProcessor BPELプロセスの後半の作成

この章では、コンポジットOrderBookingCompositeに対するOrderProcessor BPELプロセスの後半の作成方法について説明します。 この章では、第3章から第5章までのタスクをすべて実行していることを前提としています。

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

6.1 OrderProcessorの後半を作成するタスクの概要

表6-1に、OrderBookingCompositeコンポジットのOrderProcessor BPELプロセスの後半を作成するタスクをリストして説明します。

表6-1 OrderBookingCompositeに対するOrderProcessor BPELプロセスの後半を作成するタスク

タスク 説明 参照先

Scope_RetrieveQuotesフローの作成

Scope_RetrieveQuotesフローを作成します。このフローは、内部倉庫と外部パートナの倉庫の2つのサプライヤに注文情報を送信し、倉庫はその注文に対する見積を戻します。

第6.2項


Scope_SelectPreferredSupplierスコープの作成

Scope_SelectPreferredSupplierスコープを作成します。このスコープは、EvaluatePreferredSupplierRuleビジネス・ルールを使用して注文合計が最低の倉庫を選択します。

第6.3項


Scope_FulfillOrderスコープに必要なサービスおよびルーティングの作成

USPSとJMSキューのアダプタを作成します。 また、これらのアダプタに履行対象の注文を送信するためのメディエータも作成します。

第6.4項


Scope_FulfillOrderスコープの作成

Scope_FulfillOrderスコープを作成します。このスコープは注文をFulfillOrderメディエータに発行し、メディエータは注文をUSPSアダプタとJMSアダプタの両方に送信します。

第6.5項


完了済注文に対するScope_UpdateStatusToCompleteスコープの作成

Scope_UpdateStatusToCompleteスコープを作成します。このスコープは、completeのステータスを、データベース内の注文を更新するorderエンティティ変数に割り当てます。エンティティ変数を使用しなかった場合は、データベース・アダプタを作成する必要があります。

第6.6項


Scope_NotifyCustomerofCompletionスコープの作成

Scope_NotifyCustomerofCompletionスコープを作成します。このスコープは、Oracle User Messaging Serviceを使用して、注文が履行されると顧客に電子メールを送信します。

第6.7項


プロセス全体の未完了注文に対するCatchブランチの追加

プロセス全体にCatchブランチを追加して、プロセスの任意の場所でエラーが発生した場合に注文ステータスが取り消されるように更新できるようにします。

第6.8項



6.2 Scope_RetrieveQuotesフローの作成

Scope_RetrieveQuotesフローは、内部倉庫と外部パートナの倉庫の2つのサプライヤに注文情報を送信し、倉庫はその注文に対する見積を戻します。 次に、Scope_SelectPreferredSupplierスコープは、最低見積に基づいて倉庫を選択します。

図6-1に、Scope_RetrieveQuotesスコープ内のアクティビティを示します。このスコープは、flowアクティビティを使用して、注文情報を2つの倉庫に同時に送信します。

図6-1 Scope_RetrieveQuotesスコープのアクティビティ

図6-1の説明は次にあります。
「図6-1 Scope_RetrieveQuotesスコープのアクティビティ」の説明

図6-2では、OrderProcessor BPELプロセスがInternalWarehouseサービスを起動し、このサービスから見積を受信しています。 このサービスは、OrderBookingCompositeコンポジット内に存在するInternalWarehouseServiceという名前のBPELプロセスからWSDLファイルを参照します。 図6-3に、これがSOAコンポジット・エディタでどのように表示されるかを示します。 このサプライヤは、すべての注文について注文合計に関係なく静的に値$1,000を戻します。

図6-2 内部倉庫から見積を受信するアクティビティ

図6-2の説明は次にあります。
「図6-2 内部倉庫から見積を受信するアクティビティ」の説明

図6-3 OrderBookingCompositeのInternalWarehouseService

図6-3の説明は次にあります。
「図6-3 OrderBookingCompositeのInternalWarehouseService」の説明

図6-4では、OrderProcessor BPELプロセスがPartnerSupplierMediatorメディエータを起動し、このメディエータから見積を受信しています。 このメディエータは、第1章「SOAサンプル・アプリケーションの概要」で作成したPartnerSupplierCompositeExternalPartnerSupplier BPELプロセスを開始します。 図6-5に、メディエータとサービスがSOAコンポジット・エディタでどのように表示されるかを示します。

図6-4 パートナの倉庫から見積を受信するアクティビティ

図6-4の説明は次にあります。
「図6-4 パートナの倉庫から見積を受信するアクティビティ」の説明

図6-5 OrderBookingCompositeのPartnerSupplierService

図6-5の説明は次にあります。
「図6-5 OrderBookingCompositeのPartnerSupplierService」の説明

Scope_RetrieveQuotesスコープおよび関連サービスを作成するには、次のタスクを実行します。

6.2.1 タスク1: Scope_RetrieveQuotesスコープの追加

Scope_RetrieveQuotesスコープを追加する手順は、次のとおりです。

  1. コンポーネント・パレットから、「Scope」アクティビティを「Scope_CheckApprovalLimit」スコープの下にドラッグします。

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

  3. 編集フィールドで、名前をScope_RetrieveQuotes」に変更します。

  4. 「拡張」「+」)アイコンをクリックして、「Scope_RetrieveQuotes」スコープを拡張します。

  5. 「Flow」アクティビティをドラッグし、スコープにドロップします。

  6. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

  7. 編集フィールドに、「RetrieveQuotesFromSuppliers」と入力します。

  8. 「拡張」「+」)アイコンをクリックして、「Scope_RetrieveQuotes」スコープを拡張します。

    このとき、フローには空のシーケンスが2つ含まれています。

    flowempty.gifの説明は次にあります。
    図版flowempty.gifの説明

6.2.2 タスク2: InternalWarehouseService BPELプロセスの作成

InternalWarehouseService BPELプロセスを作成する手順は、次のとおりです。

  1. 「composite.xml」タブをクリックします。

  2. コンポーネント・パレットから「SOA」を選択します。

  3. 「サービス・コンポーネント」リストから「BPELプロセス」をキャンバス・ワークスペースにドラッグします。

    「BPELプロセスの作成」ダイアログが表示されます。

  4. 次の値を入力および選択します。

    要素
    名前 InternalWarehouseService
    ネームスペース http://www.globalcompany.example.com/ns/InternalWarehouse
    テンプレート 非同期BPELプロセス
    SOAPサービスとして公開 このチェック・ボックスの選択を解除します。

  5. 「入力」フィールドで、DEMO_DOWNLOAD_HOMEディレクトリにある完全なスキーマをインポートします。

    1. 「入力」フィールドで、「入力要素の参照」アイコンをクリックします。

      「タイプ・チューザ」ダイアログが表示されます。

    2. 「プロジェクトのスキーマ・ファイル」「InternalWarehouse.xsd」の順に開き、「WarehouseRequest」を選択して「OK」をクリックします。

    3. 「OK」をクリックします。

  6. 「出力」フィールドで、DEMO_DOWNLOAD_HOMEディレクトリにある完全なスキーマをインポートします。

    1. 「入力」フィールドで、「入力要素の参照」アイコンをクリックします。

      「タイプ・チューザ」ダイアログが表示されます。

    2. 「プロジェクトのスキーマ・ファイル」「InternalWarehouse.xsd」の順に開き、「WarehouseResponse」を選択して「OK」をクリックします。

  7. 「OK」をクリックします。

    SOAコンポジット・エディタにBPELプロセスが表示されます。

  8. InternalWarehouseService」BPELプロセスをダブルクリックして、BPELデザイナを表示します。

    warehouse.gifの説明は次にあります。
    図版warehouse.gifの説明

6.2.3 タスク3: InternalWarehouseServiceプロセスの変更

次に、InternalWarehouseServiceサービスに入力データをコピーするassignアクティビティを作成します。

  1. assignアクティビティを作成します。

    1. コンポーネント・パレットから、「Assign」アクティビティを「receiveInput」receiveアクティビティの下にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Assign_Defaults」に変更します。

    4. assignアクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

  2. 文字列'InternalWarehouse'を、InternalWarehouseServiceサービスの出力変数にコピーします。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を入力および選択します。

      要素
      From
      • タイプ
      string('InternalWarehouse')
      
      To
      • タイプ
      変数
      • 変数
      「変数」「outputVariable」「payload」「client:WarehouseResponse」の順に開き、「client:warehouse」を選択します。

    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  3. 現在の日付を、InternalWarehouseServiceサービスの出力変数に割り当てます。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を入力および選択します。

      要素
      From
      • タイプ
      xp20:current-date()
      
      To
      • タイプ
      変数
      • 変数
      「変数」「outputVariable」「payload」「ns3:WarehouseResponse」の順に開き、「ns3:deliveryDate」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  4. 1000を、InternalWarehouseServiceサービスの出力変数に割り当てます。 この値を割り当てることで、この倉庫はすべての注文について確実に値$1,000を静的に戻します。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を入力および選択します。

      要素
      From
      • タイプ
      1000
      
      To
      • タイプ
      変数
      • 変数
      「変数」「outputVariable」「payload」「ns3:WarehouseResponse」の順に開き、「ns3:orderTotal」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  5. 「Assign」ダイアログで、「OK」をクリックします。

  6. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

  7. 「InternalWarehouseService.bpel」タブで「X」をクリックし、プロセスを閉じます。

6.2.4 タスク4: InternalWarehouseServiceプロセスへのOrderProcessorの連結

OrderProcessor BPELプロセスをInternalWarehouseServiceサービスに連結する手順は、次のとおりです。

  1. OrderProcessorからInternalWarehouseService参照ハンドルにワイヤをドラッグします。

    wire4.gifの説明は次にあります。
    図版wire4.gifの説明

    SOAコンポジット・エディタで、OrderProcessor BPELプロセスからInternalWarehouseServiceプロセスにワイヤが移動するのを確認します。

    composite12.gifの説明は次にあります。
    図版composite12.gifの説明

  2. 「OrderProcessor.bpel」タブをクリックし、BPELデザイナの「パートナ・リンク」レーンで「InternalWarehouseService」を確認します。

    internalwarebp.gifの説明は次にあります。
    図版internalwarebp.gifの説明

  3. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.2.5 タスク5: PartnerSupplierServiceサービスの作成

PartnerSupplierMediatorメディエータは、第3章で作成したPartnerSupplierCompositeをコールする、PartnerSupplierServiceという名前のパートナ倉庫サービスから見積を取得します。 PartnerSupplierMediatorメディエータを作成する前に、PartnerSupplierServiceサービスを作成する必要があります。 このサービスは、第3章ExternalPartnerSupplier BPELプロセスを作成したときに作成されたWSDLを参照します。

PartnerSupplierServiceサービスに対するWebサービスを作成する手順は、次のとおりです。

  1. PartnerSupplierCompositeコンポジットを作成時にデプロイしなかった場合は、次の手順でデプロイします。

    1. アプリケーション・ナビゲータで、「PartnerSupplierComposite」を右クリックし、「デプロイ」「PartnerSupplierComposite」「to MyAppServerConnection」の順に選択します。

      「SOAデプロイメントと構成ダイアログ」が表示されます。

    2. デフォルト設定を受け入れて「OK」をクリックします。

    3. 「認証リクエスト」ダイアログのプロンプトに対して、「Username」フィールドにweblogicと入力し、「Password」フィールドにパスワードを入力します。

      「SOA - ログ」に、一連の検証に続いて次のように表示されます。

      BUILD SUCCESSFUL
      Total time: nn seconds
      
  2. コンポーネント・パレットの「composite.xml」タブで、「サービス・アダプタ」リストの「Webサービス」を、SOAコンポジット・エディタの右側のスイムレーンにドラッグします。

    「Webサービス」ウィンドウが表示されます。

  3. 「名前」フィールドに、「PartnerSupplierService」と入力します。

  4. 「タイプ」リストから、「参照」を選択します。

  5. 「WSDL URL」フィールドの隣の「既存のWSDLを検索します。」アイコンをクリックします。

    「SOAリソース・ルックアップ」ダイアログが表示されます。

  6. 「リソース・パレット」を選択します。

  7. 「アプリケーション・サーバー」「MyApplicationServerConnection」「SOA」「PartnerSupplierComposite」の順に開き、「externalpartnersupplier_client_ep」を選択します。

  8. 「SOAリソース・ルックアップ」ダイアログで「OK」をクリックします。

  9. 「Webサービス」ダイアログで、「ポート・タイプ」リストから「ExternalPartnerSupplier」を選択し、「コールバック・ポート・タイプ」リストから「ExternalPartnerSupplierCallback」を選択します。

  10. 「Webサービス」ダイアログで「OK」をクリックします。

    SOAコンポジット・エディタに「PartnerSupplierService」サービスが表示されます。

    partnersupplierser.gifの説明は次にあります。
    図版partnersupplierser.gifの説明

6.2.6 タスク6: PartnerSupplierServiceサービス用のPartnerSupplierメディエータ・サービスの作成

PartnerSupplierMediatorメディエータ・サービスは、PartnerSupplierServiceサービスから見積を取得します。

メディエータを作成する手順は、次のとおりです。

  1. コンポーネント・パレットから、「メディエータ」サービスをSOAコンポジット・エディタの中央レーンにドラッグします。

    「メディエータの作成」ウィンドウが表示されます。

  2. 「名前」フィールドに、「PartnerSupplierMediator」と入力します。

  3. 「テンプレート」リストから、「WSDLからのインタフェース定義」を選択します。

  4. 「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。

  5. 「WSDL URL」フィールドで、WSDLファイルを生成します。

    1. 「スキーマからWSDLを生成します。」アイコンをクリックします。

      「WSDLの作成」ダイアログが表示されます。

    2. 「URL」フィールドで、「スキーマ・ファイルを参照」アイコンをクリックします。

      「タイプ・チューザ」ダイアログが表示されます。

    3. 「プロジェクトのスキーマ・ファイル」「OrderInfoVOSDO.xsd」の順に開き、「orderInfoVOSDO」を選択します。

    4. 「OK」をクリックして「タイプ・チューザ」を閉じ、「WSDLの作成」ダイアログに戻ります。

    5. 「ネームスペース」フィールドにhttp://www.globalcompany.example.com/ns/PartnerSupplierMediator.と入力します。

      partnersuppliermed.gifの説明は次にあります。
      図版partnersuppliermed.gifの説明

    6. 「コールバック」タブをクリックします。

    7. 「URL」フィールドで、「スキーマ・ファイルを参照」アイコンをクリックします。

      「タイプ・チューザ」ダイアログが表示されます。

    8. 「プロジェクトのスキーマ・ファイル」「InternalWarehouseService.xsd」の順に開き、「WarehouseResponse」を選択します。

    9. 「タイプ・チューザ」ダイアログで「OK」をクリックします。

    10. 「WSDLの作成」ダイアログで「OK」をクリックして、「メディエータの作成」ダイアログに戻ります。

  6. 「メディエータの作成」ダイアログで、「SOAPバインディングを持つコンポジット・サービスの作成」オプションの選択を解除し、「OK」をクリックして、指定した設定でメディエータを作成します。

    partnersuppliermed2.gifの説明は次にあります。
    図版partnersuppliermed2.gifの説明

    SOAコンポジット・エディタにPartnerSupplierMediatorメディエータが表示されます。

    partnersuppliermed3.gifの説明は次にあります。
    図版partnersuppliermed3.gifの説明

6.2.7 タスク7: PartnerSupplierMediatorメディエータとExternalPartnerSupplierサービスとの間のルーティング・ルールの作成

注文情報をメディエータからサービスにルーティングするには、ルーティング・ルールを設定します。

PartnerSupplierMediatorメディエータからPartnerSupplierサービスへのルーティング・ルールを作成する手順は、次のとおりです。

  1. 「PartnerSupplierMediator」から「PartnerSupplierService」参照ハンドルにワイヤをドラッグします。

    wire2.gifの説明は次にあります。
    図版wire2.gifの説明

  2. 「PartnerSupplierMediator」をダブルクリックして、「メディエータ」エディタを表示します。

    partnersupp.gifの説明は次にあります。
    図版partnersupp.gifの説明

    「メディエータ」エディタの概要は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

  3. PartnerSupplierServiceサービスがメディエータから正しい情報を受信するように、「ペイロード」トランスフォーメーションを変更します。

    1. 「次を使用して変換」フィールドの隣のトランスフォーメーション・アイコンをクリックします。

      transformation.gifの説明は次にあります。
      図版transformation.gifの説明

      「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

    2. 「新規マッパー・ファイルの作成」を選択し、デフォルトのファイル・エントリを「orderItemsInfoVOSDO_To_WarehouseProcessRequest.xsl」のままにして、「OK」をクリックします。

      データ・マッパーが表示されます。

      mapper1.gifの説明は次にあります。
      図版mapper1.gifの説明

    3. 「ソース: PartnerSupplierMediator.wsdl」(左)側の「OrderTotal」をクリックし、「XSLTファイル: ExternalPartnerSupplier.wsdl」(右)側の「orderTotal」にドラッグします。

    4. 「ソース:PartnerSupplierMediator.wsdl」(左)側で、「OrderItemsInfoVO」を開きます。

    5. 「ソース: PartnerSupplierMediator.wsdl」(左)側の「OrderItemsInfoVO」をクリックし、「XSLTファイル: ExternalPartnerSupplier.wsdl」(右)側の「orderItems」にドラッグします。

      「自動マップ・プリファレンス」ダイアログに、ノードの自動マッピングを実行することを確認するプロンプトが表示されます。

    6. デフォルト設定のまま「OK」をクリックします。

    7. データ・マッパーで、「for-each」「orderItems」の順に開いて、「OrderItemsInfoVO」から「orderItems」へのマッピングを表示します。

      mapper2.gifの説明は次にあります。
      図版mapper2.gifの説明

    8. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

    9. 「IorderInfoVOSDO_To_WarehouseProcessRequest.xsl」タブの「X」をクリックして、データ・マッパーを閉じます。

    10. 「PartnerSupplier.mplan」タブに戻ると、「ルーティング・ルール」セクションでは、「次を使用して変換」フィールドに「orderInfoVO_To_WarehouseProcessRequest.xsl」ファイルが表示されています。

      partnersupp3.gifの説明は次にあります。
      図版partnersupp3.gifの説明

  4. PartnerSupplierMediatorメディエータ・サービスがPartnerSupplierServiceサービスから正しい情報を受信するように、「callback」トランスフォーメーションを変更します。

    1. 「次を使用して変換」フィールドの隣のトランスフォーメーション・アイコンをクリックします。

      「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

    2. 「新規マッパー・ファイルの作成」を選択し、デフォルトのファイル・エントリを「WarehouseProcessResponse_To_WarehouseProcessResponse.xsl」のままにして、「OK」をクリックします。

      データ・マッパーが表示されます。

    3. 「ソース: ExternalPartnerSupplier.wsdl」(左)側の「OrderTotal」をクリックし、「XSLTファイル: PartnerSupplierMediator.wsdl」(右)側の「orderTotal」にドラッグします。

    4. 「ソース: ExternalPartnerSupplier.wsdl」(左)側の「client:deliveryDate」をクリックし、「XSLTファイル: PartnerSupplierMediator.wsdl」(右)側の「deliveryDate」にドラッグします。

      データ・マッパーのマッピングは、次のように表示されます。

      mapper3.gifの説明は次にあります。
      図版mapper3.gifの説明

    5. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

    6. 「WarehouseProcessResponse_To_WarehouseProcessResponse.xsl」タブの「X」をクリックして、データ・マッパーを閉じます。

    7. 「PartnerSupplierMediator.mplan」タブに戻ると、「ルーティング・ルール」セクションでは、「次を使用して変換」フィールドに「WarehouseProcessResponse_To_WarehouseResponse.xsl」ファイルが表示されています。

      partnersupp4.gifの説明は次にあります。
      図版partnersupp4.gifの説明

  5. 「PartnerSupplier.mplan」タブの「X」をクリックして、「メディエータ」エディタを閉じます。

6.2.8 タスク8: PartnerSupplierMediatorメディエータへのOrderProcessorの連結

  1. 「composite.xml」タブをクリックします。

  2. OrderProcessorからPartnerSupplierMediator参照ハンドルにワイヤをドラッグします。

    wire5.gifの説明は次にあります。
    図版wire5.gifの説明

  3. 「OrderProcessor.bpel」タブをクリックして、「PartnerSupplierMediator」「パートナ・リンク」レーンにサービスとして追加されるのを確認します。

    partnersuppbp.gifの説明は次にあります。
    図版partnersuppbp.gifの説明

  4. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.2.9 タスク9: gWarehouseQuotes変数の追加

このタスクでは、Scope_RetrieveQuotesスコープからの出力とScope_SelectPreferredSupplierスコープへの入力を提供する、gWarehouseQuotes変数を作成します。この変数は、倉庫名、配送日、注文の合計金額など、倉庫に対するレスポンスを提供します。

この変数を作成する手順は、次のとおりです。

  1. OrderProcessor BPELプロセス用のキャンバス・ワークスペースで、「変数」アイコンをクリックします。

    「変数」ダイアログが表示されます。

  2. 「追加」アイコンをクリックして、変数を追加します。

    「変数の作成」ダイアログが表示されます。

  3. 「名前」フィールドに、「gWarehouseQuotes」と入力します。

  4. 「タイプ」セクションで、「要素」を選択し、次に「要素」フィールドの右側にある「参照」アイコンを選択します。

    「タイプ・チューザ」ダイアログが表示され、使用可能なサービスのリストが示されます。

  5. 「プロジェクトのWSDLファイル」「InternalWarehouseService.wsdl」「インライン・スキーマ」「スキーマ」の順に開き、「WarehouseList」を選択します。

    warehouselst.gifの説明は次にあります。
    図版warehouselst.gifの説明

  6. 「タイプ・チューザ」ダイアログで「OK」をクリックします。

  7. 「変数の作成」ダイアログで「OK」をクリックします。

    「変数」ダイアログが更新され、「gWarehouseQuotes」変数が表示されます。

    warehouselst2.gifの説明は次にあります。
    図版warehouselst2.gifの説明

  8. 「変数」ダイアログで「OK」をクリックします。

6.2.10 タスク10: InternalWarehouseプロセスから見積を取得するアクティビティの追加

見積を取得するアクティビティを追加する手順は、次のとおりです。

  1. InternalWarehouse BPELプロセスを起動するinvokeアクティビティを作成します。

    1. コンポーネント・パレットから、「Invoke」アクティビティをScope_RetrieveQuotesスコープ内のスイッチの左側のシーケンスにドラッグします。

      internalwarebp2.gifの説明は次にあります。
      図版internalwarebp2.gifの説明

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Invoke_InternalWarehouse」に変更します。

    4. マウスを「Invoke_InternalWarehouse」の右側から「InternalWarehouse」BPELプロセスまでドラッグします。

      internalwarebp3.gifの説明は次にあります。
      図版internalwarebp3.gifの説明

      「Invokeの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 InvokeInternalWarehouse
      パートナ・リンク InternalWarehouseService.internalwarehouseservice_client
      操作 WarehouseRequest

    5. 「入力変数の自動作成」アイコンをクリックします。このアイコンは、「入力」フィールドの右側にある最初のアイコンです。

      入力変数用の「変数の作成」ダイアログが表示されます。

    6. 次の値を入力および選択します。

      要素
      名前 lInternalWarehouseInputVariable
      グローバル変数/ローカル変数 「ローカル変数」。この変数はプロセス内の他のスコープには必要ありません。

    7. 「OK」をクリックして「変数の作成」ダイアログを閉じます。

      「Invokeの編集」ダイアログの「入力」フィールドに変数が表示されます。

    8. 「Invokeの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  2. データをInternalWarehouseプロセスに対する入力変数に割り当てます。

    1. コンポーネント・パレット・セクションから「Assign」アクティビティを、「InvokeInternalWarehouse」invokeアクティビティの上にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「Assign_InternalWarehouseRequest」と入力します。

    4. 「Assign_InternalWarehouseRequest」アクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    6. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「変数」「gOrderInfoVariable」「ns4:orderInfoVOSDO」の順に開き、「ns4:OrderId」ノードを選択します。ネームスペース番号の値(例: ns1ns2)は異なる場合があります。
      To
      • タイプ
      変数
      • 変数
      「Scope - RetrieveQuote」「変数」「lInternalWarehouseInputVariable」「payload」「WarehouseRequest」の順に開き、「ns1:orderId」を選択します。

    7. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じます。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

    8. 「Assign」ダイアログで、「OK」をクリックします。

  3. receiveアクティビティを作成して、内部倉庫からの配送日を受信します。

    1. コンポーネント・パレットから、「Receive」アクティビティをドラッグし、「InvokeInternalWarehouse」アクティビティの下にドロップします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。receiveアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Receive_InternalWarehouse」に変更します。

    4. マウスを「ReceiveInternalWarehouse」の右側から「InternalWarehouse」BPELプロセスまでドラッグします。

      「Receiveの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 Receive_InternalWarehouse
      パートナ・リンク InternalWarehouseService.internalwarehouseservice_client
      操作 WarehouseResponse

    5. リクエストの自動作成アイコンをクリックします。このアイコンは、「変数」フィールドの右側にある最初のアイコンです。

      入力変数用の「変数の作成」ダイアログが表示されます。

    6. 次の値を入力および選択します。

      要素
      名前 linternalWarehouseResponseVariable
      グローバル変数/ローカル変数 「ローカル変数」。この変数はプロセス内の他のスコープには必要ありません。

    7. 「OK」をクリックして「変数の作成」ダイアログを閉じます。

      「Receiveの編集」ダイアログの「変数」フィールドに変数が表示されます。

    8. 「Receiveの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  4. lInternalWarehouseResponseVariable変数からgWarehouseQuotes変数にデータを割り当てます。

    1. コンポーネント・パレット・セクションから「Assign」アクティビティを、「Receive_InternalWarehouse」receiveアクティビティの下にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「Assign_InterWHResponse」と入力します。

    4. 「Assign_InterWHResponse」アクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「追加操作」を選択します。

      「追加操作の作成」ダイアログが表示されます。

    6. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「Scope - Scope_RetrieveQuotes」「変数」「lInternalWarehouseResponseVariable」「payload」の順に開き、「ns1:WarehouseResponse」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。
      To
      • タイプ
      変数
      • 変数
      「変数」「gWarehouseQuotes」「WarehouseList」の順に開き、「ns1:WarehouseList」を選択します。

    7. 「OK」をクリックして「追加操作の作成」ダイアログを閉じます。

      「追加操作の作成」ダイアログの「コピー操作」タブが更新され、操作が表示されます。

    8. 「Assign」ダイアログで、「OK」をクリックします。

  5. 「閉じる」「-」)アイコンをクリックして、左側のフローのシーケンスを最小化します。

  6. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.2.11 タスク11: PartnerSupplierMediatorメディエータから見積を取得するアクティビティの追加

見積を取得するアクティビティを追加する手順は、次のとおりです。

  1. PartnerSupplierMediatorメディエータを起動するinvokeアクティビティを作成します。

    1. コンポーネント・パレットから、「Invoke」アクティビティを右側のシーケンスにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Invoke_PartnerSupplier」に変更します。

    4. マウスを「Invoke_PartnerSupplier」の右側から「PartnerSupplierMediator」サービスまでドラッグします。

      「Invokeの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 Invoke_PartnerSupplier
      パートナ・リンク PartnerSupplierMediator.PartnerSupplierMediator
      操作 excecute

    5. 「入力変数の自動作成」アイコンをクリックします。このアイコンは、「入力」フィールドの右側にある最初のアイコンです。

      入力変数用の「変数の作成」ダイアログが表示されます。

    6. 次の値を入力および選択します。

      要素
      名前 lPartnerSupplierInputVariable
      グローバル変数/ローカル変数 「ローカル変数」。この変数はプロセス内の他のスコープには必要ありません。

    7. 「OK」をクリックして「変数の作成」ダイアログを閉じます。

      「Invokeの編集」ダイアログの「入力変数」フィールドに変数が表示されます。

    8. 「Invokeの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  2. データをPartnerSupplierServiceサービスに対する入力変数に割り当てます。

    1. コンポーネント・パレット・セクションから「Assign」アクティビティをドラッグし、「Invoke_PartnerSupplier」invokeアクティビティの上にドロップします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「Assign_PartnerRequest」と入力します。

    4. 「Assign_PartnerRequest」アクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    6. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「変数」「gOrderInfoVariable」の順に開き、「ns4:orderInfoVOSDO」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。
      To
      • タイプ
      変数
      • 変数
      「Scope - RetrieveQuotes」「変数」「lPartnerSupplierInputVariable」「request」の順に開き、「ns4:orderInfoVOSDO」を選択します。

    7. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じます。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

    8. 「Assign」ダイアログで、「OK」をクリックします。

  3. receiveアクティビティを作成して、外部パートナの倉庫からの配送日を受信します。

    1. コンポーネント・パレットから、receiveアクティビティを「Invoke_PartnerSupplier」アクティビティの下にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Receive_PartnerResponse」に変更します。

    4. マウスを「Receive_PartnerResponse」の右側から「PartnerSupplierService」サービスまでドラッグします。

      「Receiveの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 Receive_PartnerResponse
      パートナ・リンク PartnerSupplierMediator.PartnerSupplierMediator
      操作 callback

    5. 「追加」アイコンをクリックします。このアイコンは、「変数」フィールドの右側にある最初のアイコンです。

      入力変数用の「変数の作成」ダイアログが表示されます。

    6. 次の値を入力および選択します。

      要素
      名前 lPartnerResponseVariable
      グローバル変数/ローカル変数 「ローカル変数」

    7. 「OK」をクリックして「変数の作成」ダイアログを閉じます。

      「Receiveの編集」ダイアログの「変数」フィールドに変数が表示されます。

    8. 「Receiveの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  4. lPartnerResponseVariable変数からgWarehouseQuotes変数にデータを割り当てます。

    1. コンポーネント・パレット・セクションから「Assign」アクティビティを、「Receive_PartnerResponse」receiveアクティビティの下にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「Assign_PartnerWHResponse」と入力します。

    4. 「Assign_PartnerWHResponse」アクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「追加操作」を選択します。

      「追加操作の作成」ダイアログが表示されます。

    6. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「Scope - Scope_RetrieveQuotes」「変数」「lPartnerResponseVariable」「callback」の順に開き、「ns1:WarehouseResponse」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。
      To
      • タイプ
      変数
      • 変数
      「変数」「gWarehouseQuotes」の順に開き、「ns1:WarehouseList」を選択します。

    7. 「OK」をクリックして「追加操作の作成」ダイアログを閉じます。

      「追加操作の作成」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

    8. 「Assign」ダイアログで、「OK」をクリックします。

  5. 「閉じる」「-」)アイコンをクリックして、右側のフローのシーケンスを最小化します。

  6. 「閉じる」「-」)アイコンをクリックして、「Scope_RetrieveQuotes」スコープを最小化します。

  7. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.3 Scope_SelectPreferredSupplierスコープの作成

Scope_SelectPreferredSupplierスコープはEvaluatePreferredSupplierRuleを使用して、注文の合計金額が最低の倉庫を選択します。

Scope_SelectPreferredSupplierスコープを作成するには、次のタスクを実行します。

6.3.1 タスク1: Scope_SelectPreferredSupplierスコープの作成

図6-6に示すように、Scope_SelectSupplierスコープはRequiresApprovalRuleビジネス・ルールを起動します。

図6-6 Scope_SelectSupplierスコープ

図6-6の説明は次にあります。
「図6-6 Scope_SelectSupplierスコープ」の説明

スコープを追加する手順は、次のとおりです。

  1. コンポーネント・パレットから、「Scope」アクティビティを「Scope_RetrieveQuotes」スコープの下にドラッグします。

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

  3. 編集フィールドで、名前をScope_SelectPreferredSupplier」に変更します。

  4. 「拡張」「+」)アイコンをクリックして、「Scope_SelectPreferredSupplier」スコープを拡張します。

  5. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.3.2 タスク2: gPreferredSupplier変数の追加

このタスクでは、gPreferredSupplier変数を作成します。この変数は、ビジネス・ルール変数com_example_globalcompany_ns_internalwarehouse_WarehouseResponse_oからの出力を提供します。

この変数を作成する手順は、次のとおりです。

  1. OrderProcessor BPELプロセス用のワークスペースで、「変数」アイコンをクリックします。

    「変数」ダイアログが表示されます。

  2. 「作成」アイコンをクリックして、変数を追加します。

    「変数の作成」ダイアログが表示されます。

  3. 「名前」フィールドに、「gPreferredSupplier」と入力します。

  4. 「タイプ」セクションで、「要素」を選択し、次に「要素」フィールドの右側にある「要素の参照」アイコンを選択します。

    「タイプ・チューザ」ダイアログが表示され、使用可能なサービスのリストが示されます。

  5. 「プロジェクトのスキーマ・ファイル」「InternalWarehouse.xsd」の順に開き、「WarehouseResponse」を選択します。 このスキーマ・ファイルは、前にOrderProcessor BPELプロセスに対する入力変数と出力変数を作成するときにインポートしたものです。

  6. 「OK」をクリックして「タイプ・チューザ」ダイアログを閉じます。

  7. 「変数の作成」ダイアログで、「OK」をクリックします。

    「変数」ダイアログが更新され、「gPreferredSupplier」変数が表示されます。

  8. 「変数」ダイアログで「OK」をクリックします。

6.3.3 タスク3: EvaluatePreferredSupplierRuleビジネス・ルールの作成

このビジネス・ルールを作成する手順は、次のとおりです。

  1. 「composite.xml」タブをクリックして、SOAコンポジット・エディタを表示します。

  2. 「ビジネス・ルール」サービス・コンポーネントを、SOAコンポジット・エディタにドラッグします。

    「ビジネス・ルールの作成」ダイアログが表示されます。

  3. 「名前」フィールドに、Oracle Business Rulesディクショナリの名前としてEvaluatePreferredSupplierRuleと入力します。

  4. 「パッケージ」フィールドのデフォルトはそのままにします。

  5. 「入力/出力」セクションで、「追加」メニューから「入力」を選択し、ビジネス・ルールに対する入力を選択します。

    「タイプ・チューザ」ダイアログが表示されます。

  6. 「入力/出力」セクションで、ビジネス・ルールに対する入力を選択します。

    1. 「追加」メニューから「入力」を選択します。

      「タイプ・チューザ」ダイアログが表示されます。

    2. 「InternalWarehouse.xsd」を開き、「WarehouseList」を選択します。

    3. 「OK」をクリックして「ビジネス・ルールの作成」ダイアログに戻ります。

  7. 「入力/出力」セクションで、ビジネス・ルールに対する出力を選択します。

    1. 「追加」メニューから「出力」を選択します。

      「タイプ・チューザ」ダイアログが表示されます。

    2. 「Warehouse.xsd」を開き、「WarehouseProcessResponse」を選択します。 このスキーマ・ファイルは、前にExternalPartnerSupplier BPELプロセスに対する入力変数と出力変数を作成するときにインポートしたものです。

    3. 「OK」をクリックして「ビジネス・ルールの作成」ダイアログに戻ります。

  8. 「詳細」タブをクリックし、「サービス名」フィールドの名前をEvaluatePreferredSupplierRule_DecisionService_1に変更します。 Oracle JDeveloperにより、この名前に基づいてビジネス・ルールのWSDLが作成されます。

  9. 「OK」をクリックしてビジネス・ルールを作成します。

    コンポジットに「EvaluatePreferredSupplierRule」ビジネス・ルールが表示されます。

    preferredsup2.gifの説明は次にあります。
    図版preferredsup2.gifの説明

  10. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.3.4 タスク4: BPELデザイナでのRequiresApprovalRuleディクショナリの参照

Scope_SelectSupplierスコープ内でEvaluatePreferredSupplierRuleを参照する手順は、次のとおりです。

  1. 「OrderProcessor.bpel」タブをクリックします。

  2. コンポーネント・パレットから、「Business Rule」アクティビティをScope_SelectSupplierスコープにドラッグします。

    「ビジネス・ルール」ダイアログが表示されます。

  3. 「名前」フィールドに、「BusinessRule_SelectPreferredSupplier」と入力します。

  4. 「ディクショナリ」リストから、第6.3.3項「タスク3: EvaluatePreferredSupplierRuleビジネス・ルールの作成」で作成したルール「EvaluatePreferredSupplierRule」を選択します。

  5. 「サービス」および「操作」フィールドのデフォルト設定はそのままにします。

  6. gWarehouseQuotes変数によってビジネス・ルールに対する入力変数com_example_globalcompany_ns_internalwarehouse_WarehouseList_iにデータが割り当てられるように、ビジネス・ルールへの入力を作成します。

    1. 「入力ファクトの割当て」タブで「作成」アイコンをクリックします。

      「デシジョン・ファクト・マップ」ダイアログが表示されます。

    2. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「変数」「gWarehouseQuotes」の順に開き、「ns3:WarehouseList」を選択します。

      注意: ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

      To
      • タイプ
      ビジネス・ルール・ファクト
      • 変数
      「com_example_globalcompany_ns_internalwarehouse_WarehouseList_i」を開き、「ns10:WarehouseList」を選択します。

    3. 「OK」をクリックします。

      「ビジネス・ルール」ダイアログの「入力ファクトの割当て」タブにコピー操作が表示されます。

  7. 変数com_example_globalcompany_ns_internalwarehouse_WarehouseResponse_oによってgPreferredSupplier変数にデータが送信されるように、ビジネス・ルールからの出力を作成します。

    1. 「出力ファクトの割当て」タブをクリックします。

    2. 「出力ファクトの割当て」タブで「作成」アイコンをクリックします。

      「デシジョン・ファクト・マップ」ダイアログが表示されます。

    3. 次の値を選択します。

      要素
      From
      • タイプ
      ビジネス・ルール・ファクト
      • 変数
      「com_example_globalcompany_ns_internalwarehouse_WarehouseResponse_o」を開き、「ns1:WarehouseResponse」を選択します。

      注意: ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

      To
      • タイプ
      変数
      • 変数
      「変数」「gPreferredSupplier」の順に開き、「ns1:WarehouseResponse」を選択します。

    4. 「OK」をクリックします。

      「ビジネス・ルール」ダイアログの「出力ファクトの割当て」タブにコピー操作が表示されます。

  8. 「ビジネス・ルール」ダイアログで「OK」をクリックします。

  9. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.3.5 タスク5: ルール・デザイナでのルールセットに対する新しいルールの追加

このタスクでは、Rule_FindPreferredSupplierルールを追加します。このルールでは、倉庫に対する注文の合計金額を提供するgWarehouseQuotes変数を入力として使用します。 図6-7に示すように、ルールのロジックでは、注文の合計金額が最低である現在のサプライヤとして倉庫を選択します。

図6-7 Rule_FindPreferredSupplierルール

図6-7の説明は次にあります。
「図6-7 Rule_FindPreferredSupplierルール」の説明

ルールを作成する手順は、次のとおりです。

  1. ルール・デザイナで、左側のメニューから「Ruleset_1」を選択します。

  2. 「作成」ドロップダウン・リストから、「ルールの作成」を選択します。

    「Rule_1」という名前の新しいルールが表示されます。

  3. 「Rule_1」を選択して、名前を「Rule_FindPreferredSupplier」に変更します。

  4. <テストの挿入>」をクリックして、文テンプレートを表示します。

  5. 「IF」条件で、左側のオペランドをクリックして、「WarehouseList」「warehouseResponse」の順に開き、「size()」を選択します。

    preferredsup5.gifの説明は次にあります。
    図版preferredsup5.gifの説明

    1. 演算子をクリックして、「>」を選択します。

    2. 右側のオペランドをクリックして、「0」を入力します。

  6. 「詳細設定の表示」アイコンをクリックします。

    preferredsup6.gifの説明は次にあります。
    図版preferredsup6.gifの説明

  7. 「拡張モード」オプションをクリックすると、THEN true句に対して拡張アクションを選択できるようになります。

  8. THEN true句に対して、次の手順を実行して最初の文を完成させます。

    1. 「<アクションの挿入>」をクリックし、「assign new」を選択します。

    2. 「<タイプ>」をクリックし、「int」を選択します。

    3. 「var」をクリックし、「index」と入力します。

    4. 「<式>」をクリックし、「0」を入力します。

  9. 2つ目の文を次のように作成します。

    assign new WarehouseResponse preferredSupplier = new WarehouseResponse()
    
  10. 次の手順を実行して、3つ目の文を完成させます。

    1. 「<アクションの挿入>」をクリックし、「while」を選択します。

    2. 「<ブール式>」をクリックし、次のように入力します。

      index < WarehouseList.warehouseResponse.size()
      
    3. while文の下で、次のassign newアクティビティを作成します。

      assign new WarehouseResponse currentSupplier=(WarehouseResponse)WarehouseList.wareshouseResponse.get(index)
      
    4. while文の下で、「<アクションの挿入>」をクリックし、「if」を選択します。

    5. 「<ブール式>」をクリックし、「式ビルダー」アイコンをクリックします。

    6. 式ビルダーに、次のように入力します。

      currentSupplier.orderTotal < preferredSupplier.orderTotal || preferredSupplier.orderTotal <= 0
      

      「オプション」から「currentSupplier.orderTotal」および「preferredSupplier.orderTotal」を選択し、「式に挿入」をクリックできます。「式ビルダー」で「OK」をクリックします。

    7. if文の下で、「<アクションの挿入>」をクリックし、「modify」を選択します。

    8. 「<ターゲット>」をクリックし、「preferredSupplier」を選択します。

    9. 「<プロパティの追加>」をクリックします。「プロパティ」ダイアログが表示されます。

    10. 「deliveryDate」「orderTotal」および「warehouse」「値」ドロップダウン・メニューから、それぞれ「currentSupplier.deliveryDate」「currentSupplier.orderTotal」および「currentSupplier.warehouse」を選択します。

    11. 「プロパティ」ダイアログで「閉じる」をクリックします。

    12. while文の下で、次のassign文を作成します。

      assign index = index + 1
      
  11. 4つ目の文を次のように作成します。

    assert preferredSupplier
    
  12. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

  13. 「EvaluatePreferredSupplierRule.rules」タブの「X」をクリックして、ルール・デザイナを閉じます。

6.4 Scope_FulfillOrderスコープに必要なサービスおよびルーティングの作成

注文に対して倉庫が選択された後、OrderProcessor BPELプロセスによってScope_FulfillOrderスコープが起動されます。このスコープではFulfillOrderメディエータ・サービスを使用して、注文が履行のために転送される場所が決定されます。 注文は、USPSShipmentというファイル・アダプタおよびFulfillmentBatchというJMSアダプタに送信されます。このチュートリアルでは、注文はJMSキューのみに送信されます。キューからの注文データのコンシューマは存在しません。 このチュートリアルではJMSアダプタを作成するので、JMSアダプタへのメッセージの送信方法を学習できます。

図6-8に、SOAコンポジット・エディタにおけるFulfillOrderメディエータ・サービスのフローを示します。

図6-8 FulfillOrderフロー

図6-8の説明は次にあります。
「図6-8 FulfillOrderフロー」の説明

OrderProcessor BPELプロセスでScope_FulfillOrderスコープを作成する前に、次を作成します。

これらの要素を作成するためのタスクは、次のとおりです。

6.4.1 タスク1: USPSShipmentファイル・アダプタの作成

USPSShipmentアダプタは、注文情報をC:\tmpディレクトリ内のフラット・ファイルに書き込みます。

このアダプタを作成する手順は、次のとおりです。

  1. LegacyOrderBookingPO.xsdを、DEMO_DOWNLOAD_HOME\CompositeServices\OrderBookingComposite\xsdからディレクトリMY_FOD_HOME\OrderBookingComposite\xsdにコピーします。これにより、アダプタの作成時にこのファイルを参照できるようになります。

  2. アプリケーション・ナビゲータで、「リフレッシュ」アイコンをクリックします。

  3. コンポーネント・パレットから、「ファイル・アダプタ」をドラッグし、SOAコンポジット・エディタの右側のスイムレーンにドロップします。

    アダプタ構成ウィザードが表示されます。

  4. 「次へ」をクリックします。

    サービス名ページが表示されます。

  5. 「サービス名」フィールドに「USPSShipment」と入力して、「次へ」をクリックします。

    操作ページが表示されます。

  6. アダプタ・インタフェース・ページで、操作およびスキーマから定義を選択して「次へ」をクリックします。

    操作ページが表示されます。

  7. 「操作タイプ」セクションで、「Write File」をクリックし、「次へ」をクリックします。

    「Write File」を選択すると、「操作名」「Write」に自動的に設定されます。

    ファイル構成ページが表示されます。

  8. 次の値を入力および選択します。

    要素
    発信ファイルのディレクトリ 「参照」をクリックして、アダプタによるファイルの書込先ディレクトリを検索します。たとえば、「/tmp」を選択できます。
    ファイル・ネーミング規則 ファイル名の設定方法を指定します。「po_%SEQ%.txt」と入力します。 %SEQ%は、ファイル名が順に番号付けされることを示しています。
    メッセージ数の到達 このフィールドは1のままでかまいません。これは、各注文が別々のファイルに書き込まれることを意味します。

  9. 他のデフォルト設定はそのまま使用し、「次へ」をクリックします。

    メッセージ・ページが表示されます。

  10. 「URL」フィールドの右側にある「参照」アイコンをクリックします。

    「タイプ・チューザ」ダイアログが表示されます。

  11. 「プロジェクトのスキーマ・ファイル」「LegacyOrderBookingPO.xsd」の順に開き、「PurchaseOrder」を選択します。

  12. 「OK」をクリックしてメッセージ・ページに戻ります。

    「URL」フィールドに値「xsd/LegacyOrderBooking.xsd」が入力され、「スキーマ要素」フィールドに値「PurchaseOrder」が入力されます。

  13. 「次へ」をクリックします。

    終了ページが表示されます。

  14. 「終了」をクリックします。

    SOAコンポジット・エディタが更新され、「USPSShipment」アダプタが表示されます。また、OrderBookingCompositeディレクトリが更新され、アダプタに対してファイルUSPShipment_file.jcaおよびUSPSShipment.wsdlが表示されます。これはアプリケーション・ナビゲータでも表示できます。

  15. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.4.2 タスク2: FulfillmentBatch JMSサービスの作成

FulfillmentBatch JMSアダプタは、注文情報をJMSサーバーに送信します。

このアダプタを作成する手順は、次のとおりです。

  1. コンポーネント・パレットから、「サービス・アダプタ」リストの「JMSアダプタ」を、SOAコンポジット・エディタの右側のスイムレーンにドラッグします。

    アダプタ構成ウィザードが表示されます。

  2. ようこそページで、「次へ」をクリックします。

    サービス名ページが表示されます。

  3. 「サービス名」フィールドに「FulfillmentBatch」と入力して、「次へ」をクリックします。

    JMSプロバイダ・ページが表示されます。

  4. 「Oracle Enterprise Messaging Service (OEMS)」リストから「Oracle WebLogic JMS」を選択して、「次へ」をクリックします。

    サービス接続ページが表示されます。

  5. 「接続」リストからOracle SOA Suiteを実行している「MyAppServerConnection」を選択して、「次へ」をクリックします。

    アダプタ・インタフェース・ページが表示されます。

  6. 操作およびスキーマから定義を選択して「次へ」をクリックします。

    操作ページが表示されます。

  7. 「メッセージ発行」を選択し、「次へ」をクリックします。

    発行操作のパラメータ・ページが表示されます。

  8. 「接続先名」フィールドの隣の「参照」アイコンをクリックします。

    「接続先の選択」ダイアログが表示されます。

  9. 「接続先」セクションで、「SOAJMSModule」を開いて「DemoSupplierTopic」を選択し、「OK」をクリックします。

    発行操作のパラメータ・ページが表示されます。

    第2.1.3項「タスク3: WebLogic Fusion Order Demoアプリケーションのデプロイ」seedFodJmsResourceスクリプトを実行してサンプル・アプリケーションを実行した場合は、このトピックが存在します。 トピックDemoSupplierTopicが使用可能でない場合は、Oracle WebLogic Server管理コンソールで次の手順に従って作成します。

  10. 「JNDI名」フィールドにeis/Jms/TopicConnectionFactoryと入力します。

    メッセージ・ページが表示されます。

  11. ページの他のデフォルト値はそのまま使用し、「次へ」をクリックします。

  12. メッセージ・ページで、オプションの「ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする)」をクリックし、「次へ」をクリックします。

    終了ページが表示されます。

  13. 「終了」をクリックします。

    SOAコンポジット・エディタが更新され、「FulfillmentBatch」アダプタが表示されます。 また、OrderBookingCompositeディレクトリが更新され、アダプタに対してファイルFulfillmentBatch_jms.jcaおよびFulfillmentBatch.wsdlが表示されます。これはアプリケーション・ナビゲータでも表示できます。

  14. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.4.3 タスク3: FulfillOrderメディエータ・サービス・コンポーネントの作成

FulfillOrderメディエータ・サービス・コンポーネントを作成する手順は、次のとおりです。

  1. コンポーネント・パレットから、「メディエータ」サービスをSOAコンポジット・エディタのデザイナにドラッグします。

    「メディエータの作成」ウィンドウが表示されます。

  2. 「名前」フィールドに、「FulfillOrder」と入力します。

  3. 「テンプレート」から、「WSDLからのインタフェース定義」を選択します。

  4. 「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。

  5. 「WSDL URL」フィールドで、WSDLファイルを生成します。

    1. 「スキーマからWSDLを生成します。」アイコンをクリックします。

      「WSDLの作成」ダイアログが表示されます。

    2. 「URL」フィールドで、「スキーマ・ファイルを参照」アイコンをクリックします。

      「タイプ・チューザ」ダイアログが表示されます。

    3. 「プロジェクトのスキーマ・ファイル」「OrderInfoVOSDO.xsd」の順に開き、「orderInfoVOSDO」を選択します。

    4. 「OK」をクリックします。

    5. 「WSDLの作成」ダイアログで、残りのフィールドについてはデフォルト値をそのまま使用し、「OK」をクリックします。

  6. 「メディエータの作成」ダイアログで、「OK」をクリックして、この設定でメディエータを作成します。

    fulfillordermed.gifの説明は次にあります。
    図版fulfillordermed.gifの説明

    SOAコンポジット・エディタに「FulfillOrder」メディエータが表示されます。

    fulfillordermed2.gifの説明は次にあります。
    図版fulfillordermed2.gifの説明

  7. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.4.4 タスク4: ルーティング・ルールの作成

WebLogic Fusion Order Demoアプリケーションについて、FulfillOrderメディエータからUSPSShipmentおよびFulfillmentBatchアダプタへのルーティング・ルールを作成します。

FulfillOrderメディエータ・サービスからFullmentBatch JMSアダプタへのルーティング・ルールを作成する手順は、次のとおりです。

  1. FulfillOrderメディエータからUSPSShipment参照ハンドルにワイヤをドラッグします。

  2. FulfillOrderメディエータからFulfillmentBatch参照ハンドルにワイヤをドラッグします。

    wire6.gifの説明は次にあります。
    図版wire6.gifの説明

  3. 「FulfillOrder」をダブルクリックして、「メディエータ」エディタを表示します。

    fulfillorder2.gifの説明は次にあります。
    図版fulfillorder2.gifの説明

  4. FulfillmentBatch JMSサービスのトランスフォーメーションを変更します。

    1. 「次を使用して変換」フィールドの隣のトランスフォーメーション・アイコンをクリックします。

      「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

    2. 「新規マッパー・ファイルの作成」を選択し、デフォルトのファイル・エントリをファイル名としてorderInfoVOSD_To_opaqueElement.xslのままにして、「OK」をクリックします。

      データ・マッパーが表示されます。

    3. 「ソース: FulfillOrderRef.wsdl」(左)側の「inp1:orderInfoVOSDO」をクリックし、「XSLTファイル: FulfillmentBatch.wsdl」(右)側の「opaque:opaqueElement」にドラッグします。

    4. コンポーネント・パレットで「String Functions」リストを開きます。

    5. 「get-content-as-string」関数をマッピングの最上部にドラッグし、そこにソースとターゲットを接続します。

      この関数では、「orderInfoVOSDO」入力のXML表現が返されます。データ・マッパー・ダイアログは、次のように表示されます。

      mapper4.gifの説明は次にあります。
      図版mapper4.gifの説明

    6. 「orderInfoVODO_To_opaqueElement.xsl」タブの「X」をクリックして、データ・マッパーを閉じます。

  5. USPSShipmentアダプタのトランスフォーメーションを変更します。

    1. 「次を使用して変換」フィールドの隣のトランスフォーメーション・アイコンをクリックします。

      「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

    2. 「新規マッパー・ファイルの作成」を選択し、デフォルトのファイル・エントリをファイル名として「orderInfoVOSDO_To_PurchaseOrder.xsl」のままにして、「OK」をクリックします。

      データ・マッパーが表示されます。

    3. 「ソース:FulfillOrder.wsdl」(左)側で、「orderInfoVOSDO」から次をクリックして、「XSLTファイル:USPSShipment.wsdl」(右)側の「PurchaseOrder」にドラッグします。

      - 「OrderId」から「ID」

      - 「OrderDate」から「OrderInfo」「OrderDate」

      - 「OrderStatusCode」から「OrderInfo」「OrderStatus」

      - 「OrderTotal」から「OrderInfo」「OrderPrice」

      - 「CustomerId」から「CustID」

      - 「ShipToName」から「ShipTo」「Name」「Last」

      - 「ShipToPhoneNumber」から「UserContact」「PhoneNumber」

      - 「Address1」から「ShipTo」「Street」

      - 「City」から「ShipTo」「City」

      - 「Postalcode」から「ShipTo」「Zip」

      - 「StateProvince」から「ShipTo」「State」

      - 「CountryId」から「ShipTo」「Country」

      - 「OrderItemsInfoVO」から「Item」

      「OrderItemsInvoVO」から「OrderItems」については、「自動マップ・プリファレンス」ダイアログが表示されます。デフォルト設定のまま「OK」をクリックします。

    4. 「orderInfoVOSDO_To_PurchaseOrder.xsl」タブの「X」をクリックして、データ・マッパーを閉じます。

    5. 「FulfillOrder.mplan」「X」をクリックします。

    6. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.4.5 タスク5: FulfillOrderメディエータ・サービスへのOrderProcessorの連結

OrderProcessor BPELプロセスをFulfillOrderメディエータに連結する手順は、次のとおりです。

  1. OrderProcessorからFulfillOrder参照ハンドルにワイヤをドラッグします。

    wire7.gifの説明は次にあります。
    図版wire7.gifの説明

  2. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

  3. 「OrderProcessor.bpel」タブをクリックして、FulfillOrderメディエータ・サービスがメイン・プロセスに追加されるのを確認します。

6.5 Scope_FulfillOrderスコープの作成

OrderProcessorプロセスでScope_FulfillOrderスコープを作成するには、次のタスクを実行します。

6.5.1 タスク1: Scope_FulfillOrderスコープの追加

Scope_FulfillOrderスコープを作成する手順は、次のとおりです。

  1. コンポーネント・パレットから、「Scope」アクティビティを「Scope_SelectPreferredSupplier」アクティビティの下にドラッグします。

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

  3. 編集フィールドで、名前をScope_FulfillOrder」に変更します。

  4. 「拡張」「+」)アイコンをクリックして、「Scope_FulfillOrder」スコープを拡張します。

6.5.2 タスク2: InvokeFulfillOrderアクティビティの作成

FulfillOrderメディエータ・サービスをコールするinvokeアクティビティを作成する手順は、次のとおりです。

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

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

  3. 編集フィールドで、名前を「Invoke_FulfillOrder」に変更します。

  4. マウスを「Invoke_FulfillOrder」アクティビティの右側から「FulfillOrder」サービスまでドラッグします。

    fulfillorderbp.gifの説明は次にあります。
    図版fulfillorderbp.gifの説明

    「Invokeの編集」ダイアログが表示され、次の情報が自動的に表示されます。

    要素
    名前 Invoke_Fulfillorder
    パートナ・リンク FulfillOrder.FulfillOrder
    操作 execute

  5. 「入力変数の自動作成」アイコンをクリックします。このアイコンは、「入力変数」フィールドの右側にある最初のアイコンです。

    入力変数用の「変数の作成」ダイアログが表示されます。

  6. 次の値を入力および選択します。

    要素
    名前 入力変数の名前を「lFulfillOrder_InputVariable」に変更します。
    グローバル変数/ローカル変数 「ローカル変数」を選択します。

  7. 「OK」をクリックして「変数の作成」ダイアログを閉じます。

    「Invokeの編集」ダイアログの「入力変数」フィールドに変数が表示されます。

  8. 「Invokeの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

6.5.3 タスク3: AssignFulfillRequestアクティビティの作成

データをFulfillOrderメディエータ・サービスに対する入力変数に割り当てる手順は、次のとおりです。

  1. コンポーネント・パレット・セクションから「Assign」アクティビティをドラッグし、「Invoke_FulfillOrder」invokeアクティビティの上にドロップします。

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

  3. 編集フィールドに、「Assign_OrderData」と入力します。

  4. 「Assign_OrderData」アクティビティをダブルクリックします。

    「Assign」ダイアログが表示されます。

  5. ドロップダウン・メニューから、「コピー操作」を選択します。

    「コピー操作の作成」ダイアログが表示されます。

  6. 次の値を選択します。

    要素
    From
    • タイプ
    変数
    • 変数
    「変数」「gOrderInfoVariable」の順に開き、「ns4:orderInfoVOSDO」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。
    To
    • タイプ
    変数
    • 変数
    「Scope - Scope_FulfillOrder」「変数」「lFulfillOrder_InputVariable」「lFulfillOrder_InputVariable」の順に開き、「ns4:orderInfoVOSDO」を選択します。

  7. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じます。

    「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  8. 「Assign」ダイアログで、「OK」をクリックします。

  9. 「閉じる」「-」)アイコンをクリックして、「Scope_FulfillOrder」スコープを最小化します。

  10. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.6 完了済注文に対するScope_UpdateStatusToCompleteスコープの作成

Scope_UpdateStatusToCompleteスコープは、completeのステータスを、データベース内の注文を更新するorderエンティティ変数に割り当てます。エンティティ変数を使用しなかった場合は、データベース・アダプタを作成する必要があります。

Scope_UpdateStatusToCompleteスコープを作成する手順は、次のとおりです。

  1. Scope_UpdateStatusToCompleteスコープを追加します。

    1. コンポーネント・パレットから、「Scope」アクティビティを「Scope_FulfillOrder」アクティビティの下にドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Scope_UpdateStatusToComplete」に変更します。

    4. 「拡張」「+」)アイコンをクリックして、「Scope_UpdateStatusToComplete」スコープを拡張します。

  2. 注文を完了するassignアクティビティを作成します。

    1. コンポーネント・パレットから、「Assign」アクティビティを「Scope_UpdateStatusToComplete」スコープにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「UpdateOrderStatus」と入力します。

    4. 「UpdateOrderStatus」アクティビティをダブルクリックします。

      「Assign」ダイアログが表示されます。

  3. 注文に対してcompleteのステータスを割り当てます。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を選択します。

      要素
      From
      • タイプ
      1. 「XPath式ビルダー」アイコンを選択し、「式ビルダー」ダイアログを表示します。
      2. 「式」ボックスに、次のように入力します。

        string('complete')
        
      3. 「OK」をクリックして「コピー操作の作成」ダイアログに戻ります。

      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderInfoVariable」「ns4:orderInfoVOSDO」の順に開き、「ns4:OrderStatusCode」を選択します。

      注意: ネームスペース番号の値(例: ns1ns2)は異なる場合があります。


    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  4. OrderProcessor BPELプロセスに対する出力変数に注文IDを割り当てます。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を選択します。

      要素
      From
      • タイプ
      変数
      • 変数
      「変数」「inputVariable」「payload」「ns4:WarehouseRequest」の順に開き、「ns4:ordeId」を選択します。

      注意: ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

      To
      • タイプ
      変数
      • 変数
      「変数」「outputVariable」「payload」「ns3:WarehouseResponse」の順に開き、「Total」を選択します。

    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  5. 「Assign」ダイアログで、「OK」をクリックします。

  6. 「閉じる」「-」)アイコンをクリックして、「Scope_UpdateStatusToComplete」スコープを最小化します。

  7. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.7 Scope_NotifyCustomerofCompletionスコープの作成

Scope_NotifyCustomerofCompletionスコープは、Oracle User Messaging Serviceを使用して、注文が履行されると顧客に電子メールを送信します。

Scope_NotifyCustomerofCompletionスコープを作成する手順は、次のとおりです。

  1. コンポーネント・パレットから、「Scope」アクティビティを「Scope_UpdateStatusToComplete」アクティビティの下にドラッグします。

  2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。アクティビティ・アイコン自体をダブルクリックしないでください。

  3. 編集フィールドで、名前を「Scope_NotifyCustomerofCompletion」に変更します。

  4. 「拡張」「+」)アイコンをクリックして、「Scope_NotifyCustomerofCompletion」スコープを拡張します。

  5. コンポーネント・パレットから、「Email」アクティビティを空のスコープにドラッグします。

    「電子メール」ダイアログが表示されます。

  6. 「送信元アカウント」フィールドで、デフォルト値を「Default」のままにします。

  7. 「To」フィールドで、顧客の電子メール・アドレスをgCustomerInfoVariable変数のConfirmedEmailパラメータから指定します。

    1. 「To」フィールドの隣の「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。

    2. 「BPEL変数」ボックスで、「gCustomerInfoVariable」「parameters」「findCustomerInfoVO1CustomerInfoVOCriteriaResponse」「result」の順に開き、「ConfirmedEmail」を選択します。

      「コンテンツのプレビュー」ボックスが表示されます。

      bpws:getVariableData('gCustomerInfoVariable','parameters','/ns3:findCustomerInfoVO1CustomerInfoVOCriteriaResponse/ns3:result/ns2:ConfirmedEmail')
      
    3. 「式に挿入」をクリックします。

      「式」ボックスが更新されます。

    4. 「OK」をクリックして「式ビルダー」を閉じます。

  8. 「件名」フィールドで、「Order with id OrderID shipped」と指定します。実行手順は次のとおりです。

    1. 「件名」フィールド・ボックスに、「Order with id」とその後にスペースを入力します。

      Order with id
      
    2. 「件名」フィールドの隣の「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。

    3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「gOrderInfoVariable」「orderInfoVOSDO」の順に開き、「OrderID」ノードを選択します。

      「コンテンツのプレビュー」ボックスが表示されます。

      bpws:getVariableData('gOrderInfoVariable','/ns2:orderInfoVOSDO/ns2:OrderId')
      
    4. 「式に挿入」をクリックします。

      「式」ボックスが更新され、「OrderId」変数が表示されます。

    5. 「OK」をクリックして「式ビルダー」を閉じます。

    6. 「件名」フィールドの末尾に「shipped!」を追加します。文字列全体は次のようになります。

      Order with id <%bpws:getVariableData('gOrderInfoVariable','/ns2:orderInfoVOSDO/ns2:OrderId')%> shipped!
      
  9. 「本文」フィールドで、「Dear FirstName, your order has been shipped」と指定します。実行手順は次のとおりです。

    1. 「件名」フィールド・ボックスに、「Dear」とその後にスペースを入力します。

      Dear
      
    2. 「件名」フィールドの隣の「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。

    3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「gCustomerInfoVariable」「parameters」「findCustomerInfoVO1CustomerInfoVOCriteriaResponse」「result」の順に開き、「FirstName」を選択します。

      「コンテンツのプレビュー」ボックスが表示されます。

      bpws:getVariableData('gCustomerInfoVariable','parameters','/ns3:findCustomerInfoVO1CustomerInfoVOCriteriaResponse')
      
    4. 「式に挿入」をクリックします。

      「式」ボックスが更新され、「OrderId」変数が表示されます。

    5. 「OK」をクリックして「式ビルダー」を閉じます。

    6. 「本文」フィールドの末尾に次の文字列を追加します。

      , your order has been shipped.
      

      文字列全体は次のようになります。

      Dear <%bpws:getVariableData('gCustomerInfoVariable','parameters','/ns6:findCustomerInfoVO1CustomerInfoVOCriteriaResponse/ns6:result/ns4:FirstName')%>,your order has been shipped.
      
  10. 「電子メール」ダイアログで「OK」をクリックします。

  11. 「閉じる」「-」)アイコンをクリックして、「Scope_NotifyCustomerofCompletion」スコープを最小化します。

  12. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。

6.8 プロセス全体の未完了注文に対するCatchブランチの追加

プロセス全体にCatchブランチを追加して、プロセスの任意の場所でエラーが発生した場合に注文ステータスが取り消されるように更新できるようにします。 図6-9に、OrderProcessorプロセスのCatchを示します。左側のブランチはCatchブランチで、エラーの発生時に'FAULTED'のステータスを注文に割り当てます。 右側のブランチはCatchAllブランチで、Catchブランチによって未処理のフォルトを捕捉します。

図6-9 OrderProcessorのCatch

図6-9の説明は次にあります。
「図6-9 OrderProcessorのCatch」の説明

プロセスのCatchを作成するには、次のタスクを実行します。

  1. 次の図に示すように、プロセスに対して「Catchブランチの追加」アイコンをクリックします。

    catchorder.gifの説明は次にあります。
    図版catchorder.gifの説明

  2. Catchをダブルクリックして「Catch」ダイアログを表示します。

  3. 次の値を入力します。

    要素
    ネームスペース http://www.globalcompany.example.com/ns/OrderBookingService
    ローカル・パート OrderProcessorFault

  4. 「Catch」ダイアログで「OK」をクリックします。

  5. 「拡張」「+」)アイコンをクリックして、「client:OrderProcessorFault」Catchを拡張します。

  6. 「orderprocessor_client」サービスを起動するinvokeアクティビティを作成します。

    1. コンポーネント・パレットから、「Invoke」アクティビティを右側のシーケンスにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Invoke_FaultCallbackOPFault」に変更します。

    4. マウスを「Invoke_FaultCallbackOPFault」の左側から「orderprocessor_client」までドラッグします。

      「Invokeの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 Invoke_FaultCallbackOPFault
      パートナ・リンク orderprocessor_client_ep
      操作 processFault

    5. 「変数の参照」アイコンをクリックします。このアイコンは、「入力」フィールドの右側にある最初のアイコンです。

      「変数チューザ」ダイアログが表示されます。

    6. 「gOrderProcessorFaultVariable」を選択し、「OK」をクリックします。

      この変数は、第5.10項「Scope_AuthorizeCreditCardのCatchブランチの作成」で作成しました。

    7. 「Invokeの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  7. 「client:OrderProcessorFault」Catchで、式'FAULTED'を入力としてグローバル変数gOrderInfoVariableに割り当てるassignアクティビティを作成します。

    1. コンポーネント・パレットから、「Assign」アクティビティを「Invoke_FaultCallbackOPFault」の上のブランチにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドにAssign_FaultedStatusToOrderと入力します。

    4. 「Assign_FaultedStatusToOrder」をダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    6. 次の値を入力および選択します。

      要素
      From
      • タイプ
      string('FAULTED')
      
      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderInfoVariable」「orderInfoVOSDO」の順に開き、注文情報を含む変数「OrderStatusCode」を選択します。

    7. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

    8. 「Assign」ダイアログで、「OK」をクリックします。

  8. 「閉じる」「-」)アイコンをクリックして、「client:OrderProcessorFault」Catchを最小化します。

  9. プロセスに対して「CatchAllブランチの追加」アイコンをクリックして、「client:OrderProcessorFault」Catchで未処理のフォルトをすべて捕捉します。

    catchorder2.gifの説明は次にあります。
    図版catchorder2.gifの説明

  10. 「CatchAll」Catchを開きます。

  11. 「orderprocessor_client」サービスを起動するinvokeアクティビティを作成します。

    1. コンポーネント・パレットから、「Invoke」アクティビティを右側のシーケンスにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。invokeアイコン自体をダブルクリックしないでください。

    3. 編集フィールドで、名前を「Invoke_FaultCallback」に変更します。

    4. マウスを「Invoke_FaultCallback」の左側から「orderprocessor_client」までドラッグします。

      「Invokeの編集」ダイアログが表示され、次の情報が自動的に表示されます。

      要素
      名前 Invoke_FaultCallback
      パートナ・リンク orderprocessor_client
      操作 processFault

    5. 「変数の参照」アイコンをクリックします。このアイコンは、「入力」フィールドの右側にある最初のアイコンです。

      「変数チューザ」ダイアログが表示されます。

    6. 「gOrderProcessorFaultVariable」を選択し、「OK」をクリックします。

      この変数は、第5.10項「Scope_AuthorizeCreditCardのCatchブランチの作成」で作成しました。

    7. 「Invokeの編集」ダイアログで、「OK」をクリックして変数の設定を保存します。

  12. ora:getFaultAsString()をグローバル変数gOrderProcessorFaultVariableに割り当てます。

    1. コンポーネント・パレットから、「Assign」アクティビティを「Invoke_FaultCallback」の上のブランチにドラッグします。

    2. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。assignアイコン自体をダブルクリックしないでください。

    3. 編集フィールドに、「Assign_Fault」と入力します。

    4. 「Assign_Fault」をダブルクリックします。

      「Assign」ダイアログが表示されます。

    5. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    6. 次の値を選択します。

      要素
      From
      • タイプ
      1. 「XPath式ビルダー」アイコンを選択します。
      2. 右下の「関数」セクションで、メニューから「Advanced Functions」を選択し、メニュー・オプションから「getFaultAsString」を選択します。

      3. 「式に挿入」をクリックし、次に「OK」をクリックして「コピー操作の作成」ダイアログに戻ります。

      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderProcessorFaultVariable」の順に開き、「summary」を選択します。

    7. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

  13. ora:getFaultName()をグローバル変数gOrderProcessorFaultVariableに割り当てます。

    1. ドロップダウン・リストから、「コピー操作」を選択します。

      「コピー操作の作成」ダイアログが表示されます。

    2. 次の値を選択します。

      要素
      From
      • タイプ
      1. 「XPath式ビルダー」アイコンを選択します。
      2. 右下の「関数」セクションで、メニューから「Advanced Functions」を選択し、メニュー・オプションから「getFaultName」を選択します。

      3. 「式に挿入」をクリックし、次に「OK」をクリックして「コピー操作の作成」ダイアログに戻ります。

      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderProcessorFaultVariable」の順に開き、「code」を選択します。

    3. 「OK」をクリックして「コピー操作の作成」ダイアログを閉じ、「Assign」ダイアログに戻ります。

      「Assign」ダイアログの「コピー操作」タブが更新され、ルールが表示されます。

    4. 「Assign」ダイアログで、「OK」をクリックします。

  14. 「閉じる」「-」)アイコンをクリックして、Catchを最小化します。

  15. 「ファイル」メイン・メニューから「すべて保存」を選択して、作業内容を保存します。