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

戻る
戻る
 
次へ
次へ
 

5 OrderProcessor BPELプロセスの前半の作成

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

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

5.1 OrderProcessorの前半を作成するタスクの概要

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

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

タスク 説明 参照先

OrderProcessor BPELプロセスで使用されるサービスのコピー

後でOrderProcessor BPELプロセスの変更中に参照するサービス定義をコピーします。

第5.2項


StoreFrontServiceサービスの追加

StoreFrontServiceサービスを参照します。

第5.3項


StoreFrontServiceサービスへのOrderProcessor BPELプロセスの連結

StoreFrontServiceOrderProcessor BPELプロセスに接続します。

第5.4項


gOrderInfoVariable変数の作成

注文発行時の入力として変数gOrderInfoVariableを作成します。 この変数を作成するには、エンティティ変数として作成します。

第5.5項


Scope_RetrieveOrderスコープの作成

gOrderInfoVariableエンティティ変数を使用して注文IDを取得するScope_RetrieveOrderスコープを作成します。

第5.6項


Scope_RetrieveCustomerForOrderスコープの作成

StoreFrontServiceサービスをコールして顧客情報を取得するScope_RetrieveCustomerForOrderスコープを作成します。

第5.7項


CreditCardAuthorizationServiceサービスの作成

顧客のクレジット・カードが有効かどうかをチェックするCreditCardAuthorizationServiceサービスを参照します。

第5.8項


Scope_AuthorizeCreditCardスコープの作成

CreditCardAuthorizationServiceサービスを開始して顧客情報を取得するScope_AuthorizeCreditCardスコープを作成します。

第5.9項


Scope_AuthorizeCreditCardスコープのCatchブランチの作成

クレジット・カード番号が提供されていないかクレジット・タイプが有効でない注文に対して、Scope_AuthorizeCreditCardスコープにCatchブランチを追加します。

第5.10項


RequiresApprovalRuleビジネス・ルールの作成

business ruleアクティビティを作成して、RequiresApprovalRuleビジネス・ルールを指定します。このルールでは、注文の合計金額が$2,000以上の場合にマネージャの承認が必要であることが指定されます。

もう1つのアクティビティでは、注文を自動的に承認するかまたはヒューマン・タスクを使用してマネージャの承認を取得する、いずれかのビジネス・ルールからの出力を使用します。

第5.11項


Scope_CheckApprovalLimitスコープのSwitch_ApprovalRequiredスイッチの作成

注文合計が$2,000以上であるために手動承認を必要とする注文の場合、ApprovalHumanTask human taskアクティビティに制御を渡す<case>ブランチを使用して、ScopeCheckApprovalLimitスコープにSwitchApprovalRequiredスイッチを作成します。 このヒューマン・タスクを使用すると、マネージャは注文を承認または却下できます。 このスイッチは、手動承認を必要としない注文には適用されません。

第5.12項



5.2 OrderProcessor BPELプロセスで使用されるサービスのコピー

後でOrderProcessor BPELプロセスの変更中に参照するサービス定義をコピーします。

  1. ディレクトリ「services」を、DEMO_DOWNLOAD_HOME\CompositeServices\OrderBookingCompositeから、ディレクトリMY_FOD_HOME\CompositeServices\OrderBookingCompositeにコピーします。

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

    Oracle JDeveloperの「OrderBookingComposite」フォルダが更新されて、「services」フォルダが表示されます。

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

5.3 StoreFrontServiceサービスの追加

StoreFrontServiceサービスには、注文と顧客の情報が含まれます。 次のタスクを実行して、この同期サービスを参照します。

5.3.1 タスク1: StoreFrontServiceに必要なWSDLのコピー

StoreFrontServiceサービスのWSDLをコピーする手順は、次のとおりです。

  1. StoreFrontServiceRef.wsdlを、DEMO_DOWNLOAD_HOME\CompositeServices\OrderBookingCompositeからディレクトリMY_FOD_HOME\CompositeServices\OrderBookingCompositeにコピーします。

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

5.3.2 タスク2: StoreFrontService用のWebサービスの作成

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

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

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

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

    「Webサービスの作成」ダイアログが表示されます。

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

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

    要素
    名前 StoreFrontService
    タイプ 参照
    WSDL URL 「既存のWSDLを検索します。」アイコンをクリックし、MY_FOD_HOME\OrderBookingCompositeからStoreFrontServceRef.wsdlを選択します。

  4. 他のデフォルト値はそのまま使用し、「OK」をクリックします。

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

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

    エラーが戻される場合は、BC4Jランタイム・サービス・ライブラリをOrderBookingCompositeプロジェクトに追加していない可能性があります。 ライブラリの追加については、第4.3.3項を参照してください。

5.4 StoreFrontServiceサービスへのOrderProcessor BPELプロセスの連結

StoreFrontServiceサービスをOrderProcessor BPELサービス・コンポーネントに連結(接続)する手順は、次のとおりです。

  1. OrderProcessor BPELプロセス・インタフェースからStoreFrontService参照ハンドルにワイヤをドラッグします。

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

  2. ビジュアル・エディタの下部にある「ソース」をクリックして、連結を確認します。

    <wire>
      <source.uri>OrderProcessor/StoreFrontService</source.uri>
      <target.uri>StoreFrontService</target.uri>
    </wire>
    
  3. ビジュアル・エディタの最下部にある「設計」をクリックします。

  4. 「OrderProcessor.bpel」タブをクリックして、BPELプロセスを再度表示します。

    StoreFrontServiceサービスがBPELデザイナに表示されます。

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

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

5.5 gOrderInfoVariable変数の作成

このタスクでは、注文が発行される場合の入力として変数gOrderInfoVariableを作成します。 文字gは、この変数をBPELプロセス全体で使用できるグローバル変数として区別するために使用されています。 このチュートリアルでは、グローバル変数(接頭辞g付き)と個別スコープ用のローカル変数(接頭辞l付き)を作成する必要があります。 ローカル変数を使用できるのは、スコープ内のみです。

以前のリリースでは、BPELビジネス・プロセス内で交換される変数およびメッセージは、XML構造に配置された非接続ペイロード(Webサービスから戻されるデータのスナップショット)でした。 これがユーザーに適切な場合もありました。 状況によっては、これは課題でもありました。

このリリースでは、SDOベースのデータを使用するOracle ADF Business Componentsデータ・プロバイダ・サービスでエンティティ変数を使用できます。

発注IDのエンティティ変数を作成し、Oracle ADF Business Componentsアプリケーションを起動するパートナ・リンクとしてStoreFrontServiceを選択する手順は、次のとおりです。

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

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

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

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

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

  3. 「名前」フィールドに、「gOrderInfoVariable」と入力します。 文字gは、この変数をプロセス全体で使用できるグローバル変数として区別するために使用します。

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

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

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

    OrderIdは、StoreFrontServiceのOracle ADF Business Components内の注文を表します。

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

  6. 「orderInfoVOSDO」を選択して「OK」をクリックします。

  7. 「変数の作成」ダイアログで、「エンティティ変数」チェック・ボックスを選択し、「パートナ・リンク」フィールドの右側にある「検索」アイコンを選択します。

    「パートナ・リンク・チューザ」ウィンドウが表示されます。

  8. 「プロセス」「パートナ・リンク」の順に開き、「StoreFrontService」を選択して「OK」をクリックします。

    「変数の作成」ダイアログに、要素およびサービス情報が表示されます。

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

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

    「変数」ダイアログが更新され、「gOrderInfoVariable」エンティティ変数が表示されます。

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

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

5.6 Scope_RetrieveOrderスコープの作成

Scope_RetrieveOrderスコープでは、bind entityアクティビティを使用し、gOrderInfoVariableエンティティ変数を使用して注文IDを取得します。

図5-1 Scope_RetrieveOrder

図5-1の説明は次にあります。
「図5-1 Scope_RetrieveOrder」の説明

scopeアクティビティには他のアクティビティが格納されているのみで、実際には処理は何も行われません。スコープは、Javaの中カッコに似ています。スコープを使用すると、プロセスを論理的なまとまりに分けることができます。

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

5.6.1 タスク1: Scope_RetrieveOrderスコープの追加

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

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

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

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

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

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

5.6.2 タスク2: 「findOrderById」bind entityアクティビティの作成

Oracle ADF Business Componentsデータ・プロバイダ・サービス内のデータを指し示すキーを作成する手順は、次のとおりです。

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

  2. 「Bind Entity」アクティビティをダブルクリックします。

    「Bind Entity」ウィンドウが表示されます。

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

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

  4. 「エンティティ変数」フィールドの隣の「検索」アイコンをクリックします。

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

  5. 第5.5項で作成した「gOrderInfoVariable」変数を選択して、「OK」をクリックします。

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

  6. 「Bind Entity」ウィンドウの「一意キー」セクションで、「作成」アイコンをクリックして、注文IDをデータベースから取得するためのキーを作成します。

    「キーの指定」ダイアログが表示されます。

  7. 次の設定を構成して、バインディング・キーを定義します。

    要素 手順
    キー・ローカル・パート
    1. 「エンティティ変数の参照」アイコンをクリックします。 このアイコンは、「キー・ローカル・パート」フィールドの右側にあるアイコンです。

      エンティティ・キーの参照ダイアログが表示されます。

    2. 「変数」「gOrderInfoVariable」「ns4:orderInfoVOSDO」の順に開き、要素「ns4:OrderId」を選択します。 「OrderId」キーは選択しないでください。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

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

    キー・ネームスペースURI キーのネームスペースURIはデフォルトのままにします。
    キー値
    1. 「式ビルダー」アイコンをクリックします。

      「式ビルダー」ダイアログが表示されます。

    2. 「BPEL変数」セクションで、「変数」「inputVariable」「payload」「ns4:WarehouseRequest」の順に開き、「ns4:orderId」を選択します。

    3. 「式に挿入」をクリックします。

    4. 「キーの指定」ダイアログで「OK」をクリックします。


  8. 「OK」をクリックして「キーの指定」ダイアログを閉じます。

    「一意キー」の表に、名前と値のペアが表示されます。

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

  9. 「OK」をクリックして「Bind Entity」ウィンドウを閉じます。

    実行時にbind entityアクティビティが実行されると、gOrderInfoVariableエンティティ変数を使用できるようになります。 それ以外の場合は、ランタイム・フォルトになります。

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

5.7 Scope_RetrieveCustomerForOrderスコープの作成

Scope_RetrieveCustomerForOrderスコープは、顧客情報を取得するStoreFrontServiceサービスをコールします。 これは、グローバル変数gOrderInfoVariableからの顧客IDをスコープのローカル変数lFindCustomerInfo_InputVariableに割り当てます。 次に、このスコープはinvokeアクティビティを使用してStoreFrontServiceサービスをコールします。 invokeアクティビティはサービスへの入力としてlFindCustomerInfo_InputVariable変数を提供し、StoreFrontServiceサービスはgCustomerInfoVariableグローバル変数を介してBPELプロセスに顧客名や電子メール・アドレスなどの顧客情報を戻します。

図5-2 Scope_RetrieveCustomerForOrder

図5-2の説明は次にあります。
「図5-2 Scope_RetrieveCustomerForOrder」の説明

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

5.7.1 タスク1: Scope_RetrieveCustomerForOrderスコープの追加

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

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

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

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

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

5.7.2 タスク2: InvokeCustomerServiceアクティビティの作成

invokeアクティビティは、サービスを起動してデータを渡します。また、この場合、サービスからのレスポンスと戻りデータを待機します。 StoreFrontServiceサービスをコールするには、invokeアクティビティを作成します。

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

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

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

  4. マウスを「InvokeFindCustomer」の右側から「StoreFrontService」パートナ・リンクまでドラッグします。

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

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

    要素
    名前 InvokeFindCustomer
    パートナ・リンク StoreFrontService
    操作 findCustomerInfoV01

    このフィールドの値は次のステップで変更します。


  5. 「操作」フィールドで、選択内容を「findCustomerInfoVO1CustomerInfoVOCriteria」に変更します。

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

    入力変数用の「変数の作成」ダイアログが表示されます。 この変数は、StoreFrontServiceサービスに対する入力データ、つまり顧客のIDを提供します。

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

    要素
    名前 lFindCustomerInfo_InputVariable

    文字lは、この変数をこのスコープ内でのみ使用できるローカル変数として区別するために使用します。 このチュートリアルでは、グローバル変数(接頭辞g付き)と個別スコープ用のローカル変数(接頭辞l付き)を作成する必要があります。 ローカル変数を使用できるのは、スコープ内のみです。

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

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

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

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

    出力変数用の「変数の作成」ダイアログが表示されます。 この変数は、顧客のID、名前、連絡先情報、メンバーシップ情報など、StoreFrontServiceサービスに対する出力データを提供します。

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

    要素
    名前 gCustomerInfoVariable

    文字gは、この変数をプロセス全体で使用できるグローバル変数として区別するために使用します。

    グローバル変数/ローカル変数 「グローバル変数」。この変数はプロセス内の他のスコープで使用されるためです。

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

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

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

5.7.3 タスク3: AssignCustomerIdアクティビティの作成

このタスクでは、顧客IDを取得し、StoreFrontServiceサービスに対する入力変数に送信するassignアクティビティを作成します。

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

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

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

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

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

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

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

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

  6. 「From」側で、「変数」「gOrderInfoVariable」「ns4:orderInfoVOSDO」「ns4:CustomerId」の順に開きます。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

  7. 「To」側で、「Scope - Scope_RetrieveCustomerForOrder」「変数」「lFindCustomerInfo_InputVariable」「parameters」「ns4:findCustomerInfoVO1CustomerInfoVOCriteria」の順に開き、「ns4:CustId」を選択します。 ネームスペース番号の値は異なる場合があります。

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

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

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

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

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

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

5.7.4 タスク4: OrderBookingCompositeコンポジットのデプロイ

OrderBookingCompositeコンポジットをデプロイする手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、「OrderBookingComposite」を右クリックし、「デプロイ」「OrderBookingComposite」→「デプロイ先」→「MyAppServerConnection」の順に選択します。 MyAppServerConnection接続は、第1.2.4項「タスク4: Oracle WebLogic Serverへの接続の作成」で作成した接続です。

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

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

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

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

    BUILD SUCCESSFUL
    Total time: nn seconds
    

5.7.5 タスク5: OrderSDOCompositeコンポジットのデプロイ

OrderBookingCompositeコンポジットのテスト・インスタンスを開始するには、StoreFrontService.wsdlを使用してサービスをデプロイする必要があります。 第2.1.2項のタスクを実行しており、ストアフロント・モジュールが現在実行中の場合は、それを使用してOrderBookingCompositeコンポジットをテストできます。 第5.7.6項「タスク6: OrderBookingCompositeコンポジットのテスト・インスタンスの開始」に進むことができます。 ストアフロント・モジュールが現在実行されていない場合は、サンプル・アプリケーションから使用可能なOrderSDOCompositeコンポジットをデプロイします。

OrderSDOCompositeコンポジットをデプロイする手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、DEMO_DOWNLOAD_HOMEディレクトリにあるサンプル・アプリケーションのWebLogicFusionOrderDemoを選択します。

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

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

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

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

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

    BUILD SUCCESSFUL
    Total time: nn seconds
    
  5. アプリケーション・ナビゲータで、MY_FOD_HOMEディレクトリに現在構築中のアプリケーションのWebLogicFusionOrderDemoを選択します。

5.7.6 タスク6: OrderBookingCompositeコンポジットのテスト・インスタンスの開始

このタスクでは、OrderBookingCompositeコンポジットのテスト・インスタンスを次の2つの方法のいずれかで開始できます。

  • 第2.2項で説明した第1の注文と同様に、注文を発行してストアフロント・モジュールを使用し、第2.4項で説明した注文インスタンスを監視できます。 注文はScope_RetrieveCustomerForOrderスコープを通過する必要があります。

  • Fusion Middleware ControlのWebサービスのテスト・ページからOrderSDOCompositeコンポジットのテスト・インスタンスを開始して、OrderSDOCompositeコンポジットを使用します。 後述の手順に従ってください。

OrderSDOCompositeコンポジットのテスト・インスタンスを開始する手順は、次のとおりです。

  1. 次のオプションを介してFusion Middleware ControlのWebサービスのテスト・ページにアクセスします。

    「SOAインフラストラクチャ」メニューから ナビゲータの「SOA」フォルダから 「SOAコンポジット」メニューから
    1. 「ホーム」を選択します。
    2. 「デプロイ済コンポジット」タブを選択します。

    3. 「コンポジット」セクションで「OrderBookingComposite」を選択します。

    4. ページ上部の「テスト」をクリックします。

    1. 「soa-infra」の下で「OrderBookingComposite」を選択します。
    2. ページ上部の「テスト」をクリックします。

    「サービスのテスト」「orderprocessor_client_ep」の順に選択します。

  2. Webサービスのテスト・ページの「引数を入力」セクションで、「orderID」フィールドに1000より小さいIDを入力します。

  3. 「Webサービスのテスト」をクリックします。

    テストが完了すると、結果が「レスポンス」タブに表示されます。

  4. 「メッセージ・フロー・トレースの起動」をクリックしてインスタンスのフロー・トレースにアクセスします。

  5. 「フローのトレース」ウィンドウの「トレース」セクションで、OrderProcessor BPELプロセスをクリックします。

  6. インスタンスの「フローのトレース」ウィンドウで「フロー」タブをクリックします。

  7. 様々なアクティビティをクリックし、Scope_RetrieveCustomerForOrderスコープを通過するフローを表示します。

  8. 「X」または「閉じる」をクリックして「アクティビティの詳細」ダイアログを閉じます。

  9. 「フローのトレース」ウィンドウを閉じます。

5.8 CreditCardAuthorizationServiceサービスの作成

CreditCardAuthorizationServiceサービスは、顧客のクレジット・カードが有効かどうかを確認します。 このサービスを作成するには、FusionOrderDemo_R1.zipからのWSDLに基づいてWebサービスを作成します。

このサービスをコールするOrderProcessor BPELプロセスのスコープは、後述の第5.8項「CreditCardAuthorizationServiceサービスの作成」で作成します。

5.8.1 タスク1: CreditCardAuthorizationServiceに必要なWSDLファイルのコピー

CreditCardAuthorizationService.wsdlを、ディレクトリDEMO_DOWNLOAD_HOME\CompositeServices\OrderBookingCompositeからディレクトリMY_FOD_HOME\CompositeServices\OrderBookingCompositeにコピーします。

5.8.2 タスク2: CreditCardAuthorizationService用のWebサービスの作成

第5.3.2項「タスク2: StoreFrontService用のWebサービスの作成」では、SOAコンポジット・エディタからWebサービスへの参照を作成しました。このタスクでは、BPELデザイナからの参照を作成します。

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

  1. コンポーネント・パレットから、「BPELサービス」リストの「パートナ・リンク(Webサービス/アダプタ)」を、BPELデザイナの右側のスイムレーンにドラッグします。

    「パートナ・リンクの作成」ダイアログが表示されます。

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

    要素
    名前 CreditCardAuthorizationService
    WSDLファイル MY_FOD_HOME\OrderBookingCompositeからCreditAuthorizationService.wsdlを参照し、選択します。
    パートナ・リンク・タイプ デフォルトの「CreditCardAuthorizationService」のままにします。
    パートナ・ロール CreditAuthorizationPort
    マイ・ロール これは同期サービスのため、デフォルトの「指定されていません」のままにしておきます。

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

    CreditCardAuthorizationServiceサービスが右側のスイムレーンに表示されます。

    「composite.xml」タブをクリックすると、CreditCardAuthorizationServiceサービスがSOAコンポジット・エディタに自動的に伝播されていることがわかります。

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

5.9 Scope_AuthorizeCreditCardスコープの作成

Scope_AuthorizeCreditCardスコープは、CreditCardAuthorizationServiceサービスをコールして顧客情報を取得します。 このサービスは、注文合計、クレジット・カード・タイプおよび口座番号をグローバル変数gOrderInfoVariableからスコープのローカル変数lCreditCardInputに割り当てます。 次に、このスコープはinvokeアクティビティを使用してCreditCardAuthorizationServiceサービスをコールします。 invokeアクティビティはサービスへの入力としてlCreditCardInput変数を提供し、CreditCardAuthorizationServiceサービスはlCreditCardCardOutputローカル変数を介してBPELプロセスにステータスを戻します。 このswitchアクティビティでは、クレジット・カード検証の結果が確認されます。

図5-3 Scope_AuthorizeCreditCard

図5-3の説明は次にあります。
「図5-3 Scope_AuthorizeCreditCard」の説明

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

5.9.1 タスク1: Scope_AuthorizeCreditCardスコープの追加

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

  1. 「OrderProcessor.bpel」タブに戻り、コンポーネント・パレットから、「コンポーネント・パレット」セクションの「Scope」アクティビティを、「Scope_RetrieveCustomerForOrder」スコープの下にドラッグします。

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

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

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

5.9.2 タスク2: 「InvokeCheckCredit」invokeアクティビティの作成

CreditCardAuthorizationServiceサービスをコールするinvokeアクティビティを作成する手順は、次のとおりです。

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

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

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

  4. マウスをInvokeCheckCreditCardの右側からCreditCardAuthorizationServiceパートナ・リンクまでドラッグします。

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

    要素
    名前 InvokeCheckCreditCard
    パートナ・リンク CreditCardAuthorizationService
    操作 AuthorizeCredit

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

    入力変数用の「変数の作成」ダイアログが表示されます。 この変数は、CreditCardAuthorizationServiceサービスに対する入力データを提供します。

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

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

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

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

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

    出力変数用の「変数の作成」ダイアログが表示されます。 この変数は、CreditCardAuthorizationServiceサービスからのステータスを戻します。

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

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

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

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

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

5.9.3 タスク3: Assign_CreditCheckInputアクティビティの作成

次に、クレジット・カード・タイプ、クレジット・カード番号および購入金額を取得し、CreditAuthorizationServiceに対する入力変数に割り当てるassignアクティビティを作成します。

  1. CreditCardAuthorizationServiceサービスに対する入力変数にデータを割り当てるassignアクティビティを作成します。

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

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

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

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

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

  2. 購入金額に対する入力変数をCreditCardAuthorizationServiceサービスに割り当てます。

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

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

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

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

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

      To
      • タイプ
      変数
      • 変数
      「Scope - Scope_AuthorizeCreditCard」「変数」「lCreditCardInput」「Authorization」「ns8:AuthInformation」の順に開き、「ns8:PurchaseAmount」を選択します。

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

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

  3. クレジット・カード・タイプに対する入力変数をCreditCardAuthorizationServiceサービスに割り当てます。

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

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

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

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

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

      To
      • タイプ
      変数
      • 変数
      「Scope - Scope_AuthorizeCreditCard」「変数」「lCreditCardInput」「Authorization」「ns8:AuthInformation」の順に開き、「ns8:CCType」を選択します。

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

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

  4. クレジット・カード口座番号に対する入力変数をCreditCardAuthorizationServiceサービスに割り当てます。

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

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

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

      要素
      From
      • タイプ
      変数
      • 変数
      「変数」「gOrderInfoVariable」「ns4:orderInfoVOSDO」「ns4:AccountNumber」の順に開きます。

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

      To
      • タイプ
      変数
      • 変数
      「Scope - Scope_AuthorizeCreditCard」「変数」「lCreditCardInput」「Authorization」「ns8:AuthInformation」の順に開き、「ns8:CCNumber」を選択します。

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

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

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

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

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

5.9.4 タスク4: switchアクティビティの作成

クレジット・カード検証の結果を確認するswitchアクティビティを作成する手順は、次のとおりです。

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

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

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

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

  5. 顧客のクレジット・カードが有効でない場合を処理するための<case>ブランチの条件を指定します。この情報は、lCreditCardOuput変数に格納されます。

    1. 「<case>」ボックスのタイトル・バーをダブルクリックして、「Switch Case」ダイアログを表示します。

    2. 「Switch Case」ダイアログで、「式」ボックスの上にある「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。

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

    3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「Scope - Scope_AuthorizeCreditCard」「変数」「lCreditCardOuput」「status」の順に選択し、「ns8:status」を選択します。 ネームスペース番号の値(例: ns1ns2)は異なる場合があります。

      「コンテンツのプレビュー」ボックスに、挿入する内容が表示されます。次に例を示します。

      bpws:getVariableData('lCreditCardOutput','status','/ns8:status')
      
    4. 「式に挿入」をクリックします。

      「式」ボックスが更新され、3つのパラメータが表示されます。

    5. 次のような式になるように、「!= 'APPROVED'」を「式」ボックスの式に追加します。

      bpws:getVariableData('lCreditCardOutput','status','/ns6:status') != 'APPROVED'
      
    6. 「OK」をクリックして「式ビルダー」を閉じます。

    7. 「Switch Case」ダイアログで、「OK」をクリックします。

  6. 不要な<otherwise>ブランチを削除します。

    1. 「<otherwise>」ブランチを右クリックし、メニューから「削除」をクリックします。

    2. ブランチの削除を確認するプロンプトが表示されたら、「はい」をクリックします。

  7. 残りの<case>ブランチにThrowアクティビティを作成します。

    注文が承認されない場合、このアクティビティはThrow_Fault_CC_Deniedというフォルトをスローします。 OrderProcessorプロセスは、このthrowアクティビティの実行後に終了します。

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

    2. 新しいthrowアクティビティをダブルクリックします。

      「Throw」アクティビティ・ダイアログが表示されます。

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

      要素
      名前 Throw_Fault_CC_Denied
      ネームスペース http://www.globalcompany.example.com/ns/OrderBookingService
      ローカル・パート OrderProcessorFault
      フォルト変数 値は入力しないでください。

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

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

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

5.10 Scope_AuthorizeCreditCardのCatchブランチの作成

クレジット・カード番号が提供されていないかクレジット・タイプが有効でない注文に対して、Scope_AuthorizeCreditCardスコープにCatchブランチを追加します。 図5-4に、スコープのCatchを示します。

図5-4 Scope_AuthorizeCreditCardのCatch

図5-4の説明は次にあります。
「図5-4 Scope_AuthorizeCreditCardのCatch」の説明

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

5.10.1 タスク1: gOrderProcessorFaultVariable変数に対するOrderProcessor.wsdlファイルの変更

次のタスクのブランチに対する入力として、gOrderProcessorFaultVariable変数を作成します。 この変数では、OrderProcessor.wsdlファイルのOrderProcessorFault要素を使用します。この要素は、OrderProcessor.wsdlファイル内に作成する必要があります。

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

  1. アプリケーション・ナビゲータで、「OrderProcessor.wsdl」をダブルクリックします。

    WSDLエディタが表示されます。これは、WSDLドキュメントを編集することに特化したスキーマ駆動エディタです。

  2. 「ソース」タブをクリックして、「wsdl:definitions」セクションに次の定義を追加します。

    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    
  3. 「設計」タブをクリックします。

  4. OrderProcessorFaultメッセージを作成します。

    1. 「メッセージ」セクションの「拡張」「+」)アイコンをクリックします。

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

    2. 「追加」アイコンをクリックして、新しいメッセージを追加します。

      「メッセージの作成」ダイアログが表示されます。

    3. 「メッセージ名」フィールドに「OrderProcessorFault」と入力し、「OK」をクリックします。

    4. 「メッセージ」「OrderProcessorFault」を選択します。

    5. 「OrderProcessorFault」を選択し、右側のWSDLコンポーネント・パレットで「part」を選択します。

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

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

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

      要素
      パート名 code
      参照タイプ type
      パート名 xsd:string

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

    8. 「OrderProcessorFault」を選択し、右側のWSDLコンポーネント・パレットで「part」を選択します。

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

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

      要素
      パート名 orderId
      参照タイプ type
      パート名 xsd:string

    10. 「パートの作成」ダイアログで「OK」をクリックします。

    11. 「OrderProcessorFault」を選択し、右側のWSDLコンポーネント・パレットで「part」を選択します。

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

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

      要素
      パート名 summary
      参照タイプ type
      パート名 xsd:string

    13. 「パートの作成」ダイアログで「OK」をクリックします。

      「メッセージ」セクションに、「OrderProcessorFault」メッセージのパートが表示されます。

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

  5. OrderProcessorCallbackに対してprocessFault操作を作成します。

    1. 「ポート・タイプ」セクションで「OrderProcessorCallback」を選択し、右側のWSDLコンポーネント・パレットで「operation」を選択します。

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

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

      要素
      操作名 processFault
      操作タイプ リクエスト・レスポンス
      入力 client:OrderProcessorFault
      出力 client:OrderProcessorResponseMessage

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

    4. 「ポート・タイプ」セクションで、「OrderProcessorCallback」「processFault」の順に開きます。

    5. 「processFault」で不要な「出力」を右クリックし、「削除」を選択します。

    6. 「processFault」「input」「OrderProcessorFault」「OrderProcessor」の順に開いてパートを表示します。

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

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

  7. 「OrderProcessor.wsdl」タブの「X」をクリックして、WSDLエディタを閉じます。

5.10.2 タスク2: gOrderProcessorFaultVariable変数の作成

このタスクでは、次のタスクのブランチに対する入力としてgOrderProcessorFaultVariable変数を作成します。

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

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

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

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

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

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

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

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

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

  5. 「メッセージ・タイプ」「プロジェクトのWSDLファイル」「OrderProcessor.wsdl」「メッセージ・タイプ」の順に開いて、第5.10.2項「タスク2: gOrderProcessorFaultVariable変数の作成」でWSDLファイルに追加した「OrderProcessorFault」を選択します。

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

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

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

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

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

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

5.10.3 タスク3: Scope_AuthorizeCreditCardへのCatchブランチの追加

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

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

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

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

  3. 「フォルトQName」セクションで「参照」アイコンをクリックします。

  4. 「フォルト・チューザ」ダイアログで、「システム・フォルト」を開いて「selectionFailure」を選択し、「OK」をクリックします。 このCatchは組込みのシステム・フォルトを提供します。 このフォルトは、いずれかのフィールドが空白(口座番号がないなど)の場合にAssign_CreditCheckInputアクティビティから発生します。

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

  6. 「拡張」「+」)アイコンをクリックして、「selectionFailure」Catchを拡張します。

  7. 「selectionFailure」Catchで、クレジット・カード番号なしの注文に対するグローバル変数gOrderProcessorFaultVariableへの入力として式'CreditCardCheck - NO CreditCard'を割り当てるassignアクティビティを作成します。

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

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

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

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

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

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

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

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

      要素
      From
      • タイプ
      string('CreditCardCheck - NO CreditCard')
      
      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderProcessorFaultVariable」の順に開き、「code」を選択します。 この変数は、第5.10.2項「タスク2: gOrderProcessorFaultVariable変数の作成」で作成しました。

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

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

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

  8. 「selectionFailure」Catchで、assignアクティビティAssign_noCCNumberの後にthrowアクティビティを挿入し、Scope_AuthorizeCreditCardスコープによってフォルトがスローされるようにします。

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

    2. 新しいthrowアクティビティをダブルクリックします。

      「Throw」アクティビティ・ダイアログが表示されます。

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

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

    4. 「フォルト変数」フィールドの隣の「フォルト変数の参照」アイコンをクリックします。

    5. 「変数チューザ」ダイアログで、「gOrderProcessFaultVariable」を選択し、「OK」をクリックします。

    6. 「Throw」ダイアログに戻り、「OK」をクリックします。

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

  10. スコープに対して「Catchブランチの追加」アイコンをクリックして、2つ目のCatchを作成します。

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

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

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

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

  14. 「拡張」「+」)アイコンをクリックして、「InvalidCredit」Catchを拡張します。

  15. 「InvalidCredit」Catchで、クレジット・カード・タイプを取得するためにデータを割り当てて、有効なクレジット・カード・タイプがない注文に対するグローバル変数gOrderProcessorFaultVariableにそのデータを割り当てます。

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

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

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

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

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

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

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

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

      要素
      From
      • タイプ
      1. 「XPath式ビルダー」アイコンを選択します。

        「式ビルダー」が表示されます。

      2. 「BPEL変数」セクションで、「変数」「gOrderInfoVariable」「ns8:orderInfoVOSDO」の順に開き、「CardTypeCode」を選択します。

      3. 「式に挿入」をクリックします。

        「式」ボックスが更新され、次の式が表示されます。

        bpws:getVariableData('gOrderInfoVariable','/ns2:orderInfoVOSDO/ns8:CardTypeCode')
        
      4. 次の「式」ボックスに次のように入力し、式を付加します。

        concat(
        
      5. 次の「式」ボックスに次のように入力し、式を追加します。

        , ' is not a valid creditcard type')
        

        式は次のように表示されます。

        concat(bpws:getVariableData('gOrderInfoVariable','/ns4:orderInfoVOSDO/ns4:CardTypeCode'), ' is not a valid creditcard type')
        
      6. 「OK」をクリックして「式ビルダー」を閉じます。

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

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

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

  16. 「InvalidCredit」Catchで、グローバル変数gOrderProcessorFaultVariableにデータ式'CreditCardCheck - NOT VALID'を割り当てます。

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

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

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

      要素
      From
      • タイプ
      string('CreditCardCheck - NOT VALID')
      
      To
      • タイプ
      変数
      • 変数
      「変数」「gOrderProcessorFaultVariable」の順に開き、「code」を選択します。

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

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

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

  17. 「InvalidCredit」Catchで、assignアクティビティAssign_InvalidCreditFaultの後にthrowアクティビティを挿入し、Scope_AuthorizeCreditCardスコープによってフォルトがスローされるようにします。

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

    2. 新しいthrowアクティビティをダブルクリックします。

      「Throw」アクティビティ・ダイアログが表示されます。

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

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

    4. 「フォルト変数」フィールドの隣の「フォルト変数の参照」アイコンをクリックします。

    5. 「変数チューザ」ダイアログで、「gOrderProcessFaultVariable」を選択し、「OK」をクリックします。

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

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

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

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

5.11 RequiresApprovalRuleビジネス・ルールの作成

business ruleアクティビティを作成して、RequiresApprovalRuleビジネス・ルールを指定します。このルールでは、注文の合計金額が$2,000以上の場合にマネージャの承認が必要であることが指定されます。

もう1つのアクティビティでは、注文を自動的に承認するかまたはヒューマン・タスクを使用してマネージャの承認を取得する、いずれかのビジネス・ルールからの出力を使用します。

business ruleアクティビティをBPELプロセスに追加すると、入力変数および出力変数を作成してbusiness ruleアクティビティに入力し、business ruleアクティビティから結果を取得できます。

Oracle JDeveloperでビジネス・ルールを使用するには、次の処理を実行します。

必要な場合は、SOAコンポジット・エディタで作成したビジネス・ルール・サービス・コンポーネントをBPELプロセス・サービス・コンポーネントと関連付けることができます。この関連付けは、BPELプロセスのbusiness ruleアクティビティを使用して作成します。このアクティビティは、ビジネス・ルール・パートナ・リンクを作成します。また、このアクティビティを使用すると、ルール・セット内のファクト・データとBPEL変数の間のコピー操作割当を作成できます。完了すると、ビジネス・ルール・パートナ・リンクに対するassignおよびinvokeアクティビティで構成されるbusiness ruleアクティビティが作成されます。

RequiresApprovalRuleビジネス・ルールを作成するには、次のタスクを実行します。

5.11.1 タスク1: Scope_CheckApprovalLimitスコープの作成

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

図5-5 Scope_CheckApprovalLimitスコープ

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

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

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

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

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

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

5.11.2 タスク2: lOrderApproved変数の追加

このタスクでは、ビジネス・ルール変数に対する入力を提供するローカル変数lOrderApprovedを作成します。

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

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

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

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

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

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

  4. 「タイプ」セクションで、「単純型」を選択し、フィールドの右側にある「XMLスキーマ・タイプの参照」アイコンを選択します。

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

  5. 「XMLスキーマ単純型」の下の「string」を選択します。

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

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

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

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

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

5.11.3 タスク3: 「Assign_DefaultNotRequiresApproval」assignアクティビティの作成

このタスクでは、注文合計を取得し、ビジネス・ルールに対する入力変数に送信するassignアクティビティを作成します。

購入価格に対する入力変数をビジネス・ルールに割り当てる手順は、次のとおりです。

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

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

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

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

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

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

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

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

    要素
    From
    • タイプ
    string('false')
    
    To
    • タイプ
    変数
    • 変数
    「Scope - Scope_CheckApprovalLimit」「変数」の順に開き、第5.11.2項「タスク2: lOrderApproved変数の追加」で作成した変数「lOrderApproved」を選択します。

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

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

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

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

5.11.4 タスク4: RequiresApprovalRuleビジネス・ルールの作成

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

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

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

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

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

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

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

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

  6. DEMO_DOWNLOAD_HOMEディレクトリにある完全なスキーマをインポートします。

    1. 「スキーマ・ファイルのインポート」アイコンをクリックします。

      「スキーマ・ファイルのインポート」ダイアログが表示されます。

    2. 「ファイルシステム」を選択し、「場所」セクションでDEMO_DOWNLOAD_HOME/CompositeServices/OrderBookingComposite/xsd内のOrderBookingRules.xsdを参照し、「OK」をクリックします。

    3. 「スキーマのインポート」ダイアログで、「URL」フィールドにOrderBookingRules.xsdが表示されて「プロジェクトにコピー」オプションが選択されていることを確認し、「OK」をクリックします。

      「ファイルのローカライズ」ダイアログが表示され、OrderBookingRules.xsdスキーマ・ファイルをインポートするように要求されます。

    4. 「インポートされたファイルの元のディレクトリ構造を保持」オプションの選択を解除し、「OK」をクリックしてファイルをインポートします。

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

  7. ビジネス・ルールに対する入力を選択します。

    1. 「タイプ・チューザ」ダイアログで、「OrderBookingRules.xsd」を開いて「approve」を選択します。

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

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

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

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

    2. 「OrderBookingRules.xsd」を開いて「approve」を選択します。

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

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

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

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

  11. SOAコンポジット・エディタで「RequiresApprovalRule」をダブルクリックします。

    Oracle JDeveloperのルール・デザイナが表示され、「RequiresApprovalRule.rules」タブにディクショナリが表示されます。

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

    ルール・デザイナの概要は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

    ビジネス・ルール・デザイナの一部として、新しいルール・ディクショナリは、次の事前ロード・データとともに作成されます。

    • business ruleアクティビティの入力と出力のメタデータ情報に基づいたXMLファクト・タイプ・モデル。

    • ルールを追加して完了する必要がある新しいルールセット。

    • business ruleアクティビティの入力と出力の規定が含まれた新しいサービス。 サービスは、実行時にアクティビティから起動されています。

    • ルール・ディクショナリに対する新しいビジネス・ルール・サービス・コンポーネント。 このコンポーネントは、第5.11.5項「タスク5: BPELデザイナでのRequiresApprovalRuleディクショナリの参照」でBPELプロセスに連結します。

    このルールは後のタスクで変更します。 したがって、このタブは閉じないでください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      要素
      From
      • タイプ
      変数
      • 変数
      「Scope - Scope_CheckApprovalLimit」「変数」の順に開き、「lOrderApproved」を選択します。

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

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

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

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

  7. ビジネス・ルールの変数com_example_globalcompany_ns_orderbookingservice_rules_Approve_oによりスコープのlOrderApproved変数にデータが送信されるように、ビジネス・ルールからの出力を作成します。

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

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

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

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

      要素
      From
      • タイプ
      ビジネス・ルール・ファクト
      • 変数
      「com_example_globalcompany_ns_orderbookingservice_rules_Approve_o」「ns10:approve」の順に開き、「ns10:approvalRequired」を選択します。

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

      To
      • タイプ
      変数
      • 変数
      「Scope - Scope_CheckApprovalLimit」「変数」の順に開き、「lOrderApproved」を選択します。

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

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

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

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

5.11.6 タスク6: ルール・デザイナでの変数の定義

データ・モデルに変数を定義します。 後で変更が必要になった場合は、変数の値を編集する必要があります。 MAX_PRICEという変数を作成して金額を定義します。この金額を上回る注文にはマネージャによる手動の承認が必要であり、この金額を下回る注文は自動的に承認されます。 MAX_PRICE変数を$2000に設定します。

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

  1. ルール・デザイナで、「グローバル」タブを選択します。

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

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

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

  4. 「説明」フィールドに、次の文字列を入力します。

    Limit for Automatic Approval
    
  5. 「タイプ」ドロップダウン・リストから、「int」を選択します。

  6. 「バケットセット」の値は選択しないでください。

  7. 「値」フィールドの隣のアイコンをクリックします。

    「式ビルダー」ダイアログが表示されます。

  8. 「式」領域で、「2000」と入力し、「OK」をクリックして「式ビルダー」を閉じます。

  9. 「変数の編集」ダイアログで、「OK」をクリックします。

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

ルール・ディクショナリを作成したとき、ルールなしのRuleset_1という空のルールセットが作成されました。 このタスクでは、CheckOrderTotalAgainstLimitルールを追加します。このルールでは、注文金額が$2,000以上の場合、注文に手動承認が必要であると指定されます。

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

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

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

    新しいルールが表示されます。

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

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

  4. 「IF」セクションで、左側のオペランドをクリックして、「approve.price」を選択します。

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

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

  6. 右側のオペランドをクリックして、「MAX_PRICE」を選択します。

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

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

  9. 「<プロパティの追加>」をクリックします。

    「プロパティ」ダイアログが表示されます。

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

  10. 「approvalRequired」行で、「値」ドロップダウン・メニューから「true」を選択し、「定数」チェック・ボックスを選択します。

  11. 「閉じる」をクリックします。

    ビジネス・ルールが更新され、完了します。

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

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

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

5.11.8 タスク8: OrderBookingCompositeコンポジットの再デプロイ

OrderBookingCompositeコンポジットを再デプロイする手順は、次のとおりです。

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

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

  2. 「同じリビジョンIDで既存のコンポジットを上書きします。」を選択して、第5.7.4項「タスク4: OrderBookingCompositeコンポジットのデプロイ」でデプロイしたコンポジットを上書きします。

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

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

    BUILD SUCCESSFUL
    Total time: nn seconds
    

5.11.9 タスク9: OrderBookingCompositeコンポジットのテスト・インスタンスの開始

第5.7.6項「タスク6: OrderBookingCompositeコンポジットのテスト・インスタンスの開始」と同じ手順に従って、OrderBookingCompositeコンポジットのテスト・インスタンスを開始します。 今回は、「フローのトレース」ウィンドウで注文がScope_CheckApprovalLimitスコープをどのように通過するかを確認します。

5.12 Scope_CheckApprovalLimitスコープへのSwitch_ApprovalRequiredスイッチの追加

合計金額が$2,000以上になるため手動承認が必要な注文の場合、ScopeCheckApprovalLimitスコープのSwitchApprovalRequiredスイッチは、ApprovalHumanTask human taskアクティビティに制御を渡す<case>ブランチで構成されます。これによって、jsteinというマネージャは注文を承認または却下できます。手動承認が不要な注文の場合、このスイッチは適用されません。

図5-6では、SwitchApprovalRequiredスイッチに、human taskアクティビティと、マネージャのレスポンスを処理するための別のswitchアクティビティが含まれています。

図5-6 human taskとswitchを持つSwitch_ApprovalRequiredスイッチ

図5-6の説明は次にあります。
「図5-6 human taskとswitchを持つSwitch_ApprovalRequiredスイッチ」の説明

SwitchApprovalRequiredスイッチを作成するには、次のタスクを実行します。

5.12.1 タスク1: Switch_ApprovalRequiredスイッチの作成

Switch_ApprovalRequiredスイッチを作成する手順は、次のとおりです。

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

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

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

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

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

  6. 不要な<otherwise>ブランチを削除します。

    1. 「<otherwise>」ブランチを右クリックし、メニューから「削除」をクリックします。

    2. ブランチの削除を確認するプロンプトが表示されたら、「はい」をクリックします。

      スイッチは次の図のように表示されます。

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

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

5.12.2 タスク2: <case>ブランチに対する条件の設定

<case>ブランチを作成する手順は、次のとおりです。

  1. 「<case>」ボックスのタイトル・バーをダブルクリックして、「Switch Case」ダイアログを表示します。

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

  2. 「名前」ボックスに、次のように入力します。

    approval required = true
    
  3. 「式」ボックスの上にある「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。

  4. 「BPEL変数」ボックスで、「Scope - Scope_CheckApprovalLimit」「変数」の順に開き、「lOrderApproved」を選択します。

    lOrderApprovedは、第5.11.2項「タスク2: lOrderApproved変数の追加」で定義した変数です。

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

    bpws:getVariableData('lOrderApproved')
    
  5. 「式に挿入」をクリックします。「式」ボックスに、1つのパラメータを持つ関数が表示されます。

  6. 「式」ボックスで、次のような式になるように、式に空白1個で始まる「= 'true'」を追加します。

    bpws:getVariableData('lOrderApproved') = 'true'
    
  7. 「式ビルダー」ダイアログで「OK」をクリックします。「Switch Case」ダイアログに式が表示されます。

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

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

    2つのアクティビティ(human taskアクティビティとswitchアクティビティ)を持つ<case>ブランチを変更します。 これらのアクティビティを作成するには、これら2つのアクティビティのコンテナとしてsequenceアクティビティを作成する必要があります。

5.12.3 タスク3: 注文を承認するための<case>ブランチにおけるヒューマン・タスクの作成

<case>ブランチでヒューマン・タスクを作成する手順は、次のとおりです。

  1. 「Human Task」アクティビティを「<case>」ボックス内にドラッグします。

    「ヒューマン・タスクの作成」ダイアログが表示されます。

  2. 「タスク定義」リストから、「タスク定義」フィールドの隣の「作成」アイコンをクリックします。

    「ヒューマン・タスクの作成」ダイアログが表示されます。

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

    要素
    名前 ApprovalHumanTask
    優先度 優先度の設定を「3(標準)」のままにします。
    ネームスペース http://www.globalcompany.com/ns/OrderBooking/ApprovalHumanTask
    タイトル 当面の間、値は入力しないでください。

  4. 「パラメータ」セクションで、「タスク・パラメータの追加」アイコンを選択します。

    「タスク・パラメータの追加」ダイアログが表示されます。

  5. 「ソース」フィールドの隣のアイコンをクリックし、パラメータ・ソースを選択するためのタスク・パラメータ・ページを起動します。

  6. 「変数」「gOrderInfoVariable」「ns8:orderInfoVOSDO」の順に開き、「OrderId」キーを選択します。

  7. 「OK」をクリックして「タスク・パラメータ」ダイアログを閉じます。

  8. 「タスク・パラメータの追加」ダイアログに戻り、「パラメータ名」フィールドをorderIdに変更します。

  9. 「OK」をクリックして「タスク・パラメータの追加」ダイアログを閉じ、「ヒューマン・タスクの作成」ダイアログに戻ります。

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

  10. 「ヒューマン・タスクの作成」ダイアログで、「OK」をクリックします。

    「ヒューマン・タスク」エディタが表示されます。

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

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

  11. タスクのタイトルを定義します。

    1. 「タイトル」フィールドに、次のように入力します。

      Approval Required for Order Id:
      
    2. 「タイトル」フィールドの右側にあるアイコンをクリックして注文IDを選択します。

      「式ビルダー」ダイアログが表示されます。

    3. 「スキーマ」セクションから、「task:task」「task:payload」の順に開き、「task:orderId」を選択します。

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

    4. 「式に挿入」をクリックします。

      「式」ボックスが更新され、次の式が表示されます。

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

      ApprovalHumanTask.taskページが更新され、タイトルが次のように表示されます。

      Approval Required for Order Id:<%/task:task/task:payload/task:orderId%>>
      
  12. ヒューマン・タスクの承認者を指定します。

    1. 「割当ておよびルーティング・ポリシー」セクションで、「<参加者なし>」をダブルクリックします。

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

      「参加者タイプの追加」ダイアログが表示されます。

    2. 「ラベル」フィールドにApproverと入力します。

    3. 「参加者名」テーブルのドロップダウン・メニューから、「ユーザーの追加」を選択します。

      「参加者名」テーブルに新しい行が表示されます。

    4. 行の右端にある「参照」アイコンをクリックします。

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

      「アイデンティティ・ルックアップ」ダイアログが表示されます。

    5. 「アプリケーション・サーバー」リストで、「MyAppServerConnection」を選択します。

    6. 「ルックアップ」アイコンをクリックします。 このアイコンは「ユーザー名」フィールドの右側にあります。

      検索結果が「ユーザーの検索」セクションに表示されます。

    7. 「jstein」を選択し、「選択」をクリックします。

      「選択したユーザー」セクションに「jstein」が追加されます。

    8. 「OK」をクリックして「アイデンティティ・ルックアップ」ダイアログを閉じます。

      「参加者タイプの編集」ダイアログの「参加者名」テーブルに「jstein」が表示されます。

    9. 「参加者タイプの追加」ダイアログで「OK」をクリックします。

      「ApprovalHumanTask.task」ウィンドウの「割当ておよびルーティング・ポリシー」セクションに、「承認者」が表示されます。

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

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

  14. 「ApprovalHumanTask.task」タブの「X」をクリックして、ヒューマン・タスクを閉じます。

  15. 「composite.xml」タブをクリックして、ヒューマン・タスクを表示します。

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

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

5.12.4 タスク4: マネージャのレスポンスを処理するための<case>ブランチにおけるTaskSwitchアクティビティの変更

図5-7に示すように、OrderProcessor BPELプロセスにおけるhuman taskアクティビティの後、Oracle JDeveloperではtaskSwitchと呼ばれるスイッチが自動的に作成されます。

図5-7 <case>ブランチのtaskSwitchアクティビティ

図5-7の説明は次にあります。
「図5-7 <case>ブランチのtaskSwitchアクティビティ」の説明

このスイッチを使用すると、マネージャが注文を承認したか却下したか、または注文が期限切れになっているかどうかに応じて、実行するアクションを定義できます。

このスイッチは次の場合に対応します。

  • マネージャが注文を却下した。

  • マネージャが注文を承認した。

  • 注文が期限切れになっている。

これらのアクションに対してスイッチを変更する手順は、次のとおりです。

  1. 「拡張」「+」)アイコンをクリックして、「taskSwitch」を拡張します。

  2. 「<case Task outcome is REJECT>」ブランチで、「CopyPayloadFromTask」アクティビティを削除して、throwアクティビティで置換します。

    注文が承認されない場合、このアクティビティはThrow_OrderProcessorFaultというフォルトをスローします。 OrderProcessorプロセスは、throwアクティビティの実行後に終了します。

    1. 「CopyPayloadFromTask」アクティビティを右クリックし、メニューから「削除」を選択します。

    2. ブランチの削除を確認するプロンプトが表示されたら、「はい」をクリックします。

    3. コンポーネント・パレットから、「Throw」アクティビティを「<case Task outcome is REJECT>」ブランチにドラッグします。

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

      「Throw」アクティビティ・ダイアログが表示されます。

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

      要素
      名前 Throw_OrderProcessorFault
      ネームスペース http://www.globalcompany.example.com/ns/OrderBookingService
      ローカル・パート OrderProcessorFault
      フォルト変数
      1. 「参照」アイコンをクリックします。
      2. 「変数チューザ」ダイアログで、「gOrderProcessorFaultVariable」を選択します。

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


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

  3. 「<case Task outcome is APPROVE>」ブランチで、「CopyPayloadFromTask」アクティビティを削除して空のassignアクティビティで置き換えます。空のassignアクティビティにより、ビジネスからプロセス内の次のスコープに出力が渡されています。

    1. 「CopyPayloadFromTask」アクティビティを右クリックし、メニューから「削除」を選択します。

    2. ブランチの削除を確認するプロンプトが表示されたら、「はい」をクリックします。

    3. コンポーネント・パレットから、「Empty」アクティビティを「<case Task outcome is APPROVE>」ブランチにドラッグします。

    4. アイコンの下の名前をダブルクリックして、このアクティビティの名前を変更します。

    5. 編集フィールドから名前を削除します。

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

  5. 「<otherwise>」ブランチで、「CopyPayloadFromTask」アクティビティを削除して、throwアクティビティで置換します。

    注文が承認されない場合、このアクティビティはThrowRejectedというフォルトをスローします。 OrderProcessorプロセスは、throwアクティビティの実行後に終了します。

    1. 「CopyPayloadFromTask」アクティビティを右クリックし、メニューから「削除」を選択します。

    2. ブランチの削除を確認するプロンプトが表示されたら、「はい」をクリックします。

    3. コンポーネント・パレットから、「Throw」アクティビティを「<otherwise Task>」ブランチにドラッグします。

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

      「Throw」アクティビティ・ダイアログが表示されます。

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

      要素
      名前 Throw_OrderProcessingFault
      ネームスペース http://www.globalcompany.example.com/ns/OrderBookingService
      ローカル・パート OrderProcessorFault
      フォルト変数
      1. 「参照」アイコンをクリックします。
      2. 「変数チューザ」ダイアログで、「gOrderProcessorFaultVariable」を選択します。

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


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

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

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

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

5.12.5 タスク5: OrderBookingCompositeコンポジットの再デプロイ

OrderBookingCompositeコンポジットを再デプロイする手順は、次のとおりです。

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

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

  2. 「同じリビジョンIDで既存のコンポジットを上書きします。」を選択して、前にデプロイしたコンポジットを上書きします。

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

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

    BUILD SUCCESSFUL
    Total time: nn seconds
    

5.12.6 タスク6: OrderBookingCompositeコンポジットのテスト・インスタンスの開始

前述の手順に従って、OrderBookingCompositeコンポジットのテスト・インスタンスを開始します。 テスト・インスタンスの作成の詳細は、第5.7.6項「タスク6: OrderBookingCompositeコンポジットのテスト・インスタンスの開始」を参照してください。 このテスト・インスタンスについて、次の調整を行います。

  • 「引数を入力」セクションで、「orderID」フィールドに1000より大きいIDを入力して$2,000を超える注文を発行します。

  • 「フローのトレース」ウィンドウで、「Scope_CheckApprovalLimit」スコープの下方へスクロールし、ビジネス・ルールの後にApprovalHumanTaskヒューマン・タスクが開始されたことを確認します。

第6章「OrderProcessor BPELプロセスの後半の作成」に進んで、OrderProcessor BPELプロセスの作成を完了します。 プロセスが完了した後、第9章「ApprovalHumanTaskヒューマン・タスクに対するタスク表示フォームの作成」で、マネージャが注文を承認するためのフォームを作成できます。