ヘッダーをスキップ
Oracle SOA Suiteチュートリアル
10g (10.1.3.1.0)
B31831-01
  目次へ
目次

前へ
前へ
 
次へ
次へ
 

8 SOAOrderBookingプロジェクトの作成

この章では、BPELプロジェクトであるSOAOrderBookingプロジェクトの作成方法について説明します。 項目は次のとおりです。

8.1 SOAOrderBookingプロジェクトの概要

BPELプロジェクトであるSOAOrderBookingプロジェクトは、SOA Order Bookingアプリケーションのメイン・フローを表します。 このプロジェクトは、注文情報を適切な時期に適切なサービスに送信します。 たとえば、CreditServiceに連絡して顧客のクレジット・カードを確認し、そのクレジット・カードが受入れ可能である場合は、サプライヤ(Select ManufacturerおよびRapid Distributors)に連絡して注文の価格見積を取得します。

SOAOrderBookingプロジェクトは大規模なプロジェクトです。 この章では、最初にプロジェクトの主なブロックの概要を示した後で、各ブロックの詳細について説明します。

8.1.1 SOAOrderBookingプロジェクトのブロック

表8-1に、SOAOrderBookingプロジェクトの主なブロックをリストします。

表8-1 SOAOrderBookingプロジェクトの主なブロック

ブロック タイプ 説明

receiveInput

receiveアクティビティ

このアクティビティは、注文情報などの着信リクエストを受信します。

InsertOrderIntoDB

スコープ

このスコープでは、注文情報がデータベースに挿入されます。

CustomerService

スコープ

このスコープでは、顧客の情報がデータベースから取得されます。

CreditService

スコープ

このスコープでは、顧客の与信が受入れ可能であることが検証されます。

RequiresManualApproval

デシジョン

このスコープはdecideアクティビティです。ルール・リポジトリに設定されているルールを参照して、注文にマネージャの承認が必要かどうかを判別します。 マネージャは注文を承認または却下できます。

requiresApproval

スイッチ

このスイッチでは、マネージャが注文を承認したか却下したかが確認され、適切なアクティビティが実行されます。

承認された注文の場合は、このSOAOrderBookingプロジェクトの残りのアクティビティが続行されます。

却下された注文の場合は、フォルトがスローされ、アクティビティは続行されません。

SelectSupplier

スコープ

このスコープでは、注文を履行するサプライヤ(Select ManufacturerまたはRapid Distributors)が選択されます。

PostFulfillmentReq

スコープ

このスコープは、FulfillmentESBプロジェクトをコールします。このプロジェクトは、注文の出荷方法を決定します。

SetFinalOrderStatus

スコープ

このスコープでは、最終的な注文ステータスがデータベースに書き込まれます。

NotifyCustomer

スコープ

このスコープは電子メール・サービスです。 顧客に対して、注文が正常に処理されたことを通知する電子メールを送信します。

callbackClient

invokeアクティビティ

このinvokeアクティビティは、処理が終了したことをclientに通知します。


8.1.2 最小化されたビューでのブロックの表示

図8-1に、最小化された状態のブロックが表示されたJDeveloperのSOAOrderBooking.bpelページを示します。 後続の各項では、各ブロックを開いてその内容を示し、ブロックの作成方法について説明します。

図8-1 SOAOrderBookingプロジェクトのブロックの最小化されたビュー

図8-1の説明は次にあります。
「図8-1 SOAOrderBookingプロジェクトのブロックの最小化されたビュー」の説明

8.2 SOAOrderBooking用の新規BPELプロジェクトの作成

  1. アプリケーション・ナビゲータで、「SOADEMO」アプリケーションを右クリックし、「新規プロジェクト」を選択して新規ギャラリを表示します。

  2. 新規ギャラリの「カテゴリ」セクションで、「General」を開き、「Projects」を選択します。 「項目」の下にある「BPELプロセス・プロジェクト」を選択します。

    図8-2 SOAOrderBookingプロジェクト用の新規ギャラリ

    図8-2の説明は次にあります。
    「図8-2 SOAOrderBookingプロジェクト用の新規ギャラリ」の説明

    「OK」をクリックします。 BPELプロジェクト作成ウィザードが表示されます。

  3. BPELプロジェクト作成ウィザードのプロジェクトの設定ページで、次の操作を実行します。

    • 名前: 「SOAOrderBooking」と入力します。

    • ネームスペース: 「http://www.globalcompany.com/ns/OrderBooking」と入力します。

    • デフォルトのプロジェクト設定を使用: このオプションを選択します。

    • テンプレート: 「空のBPELプロセス」を選択します。

    図8-3 BPELプロジェクト作成ウィザード: プロジェクトの設定ページ

    図8-3の説明は次にあります。
    「図8-3 BPELプロジェクト作成ウィザード: プロジェクトの設定ページ」の説明

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

8.3 ファイルのコピー

次のファイルを、soademo_101310_prod.zipファイルからSOAOrderBooking¥bpelディレクトリにコピーします。

soademo_101310_prod.zipファイルでは、これらのファイルはSOAOrderBooking¥bpelディレクトリにあります。

8.4 SOAOrderBookingプロジェクトに対する変数の定義

このステップでは、SOAOrderBookingプロジェクトに対してinputVariableoutputVariableという2つの変数を作成します。 プロジェクト・レベルで定義した変数には、プロジェクト内のすべてのアクティビティがアクセスできます。

  1. 「SOAOrderBooking」スコープをダブルクリックします。 横に表示されている「SOAOrderBooking」テキストをダブルクリックすることもできます。

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

  2. 「Process」ダイアログで、「変数」タブをクリックします。

    図8-4 SOAOrderBookingに関する「Process」ダイアログ

    図8-4の説明は次にあります。
    「図8-4 SOAOrderBookingに関する「Process」ダイアログ」の説明

  3. inputVariableという変数を作成します。

    1. 「作成」をクリックして、「変数の作成」ダイアログを表示します。

    2. 「変数の作成」ダイアログで次の値を設定します。

      • 名前: 「inputVariable」と入力します。

      • タイプ: 「メッセージ・タイプ」を選択して懐中電灯アイコンをクリックします。 「タイプの選択」ダイアログが表示されます。

        「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「プロジェクトのWSDLファイル」「SOAOrderBooking.wsdl」「メッセージ・タイプ」「SOAOrderBookingRequestMessage」の順に選択します。

        図8-5 「inputVariable」に関する「タイプの選択」

        図8-5の説明は次にあります。
        「図8-5 「inputVariable」に関する「タイプの選択」」の説明

      「タイプの選択」で、「OK」をクリックします。 「変数の作成」ダイアログは次のように表示されます。

      図8-6 inputVariableに関する「変数の作成」ダイアログ

      図8-6の説明は次にあります。
      「図8-6 図8-6 inputVariableに関する「変数の作成」ダイアログ」の説明

    3. 「変数の作成」ダイアログで、「OK」をクリックします。 「Process」ダイアログに戻ります。 このダイアログに「inputVariable」が表示されていることを確認します。

  4. outputVariableという2番目の変数を作成します。

    1. 「Process」ダイアログで「作成」をクリックして、「変数の作成」ダイアログを表示します。

    2. 「変数の作成」ダイアログで次の値を設定します。

      • 名前: 「outputVariable」と入力します。

      • タイプ: 「メッセージ・タイプ」を選択して懐中電灯アイコンをクリックします。 「タイプの選択」ダイアログが表示されます。

        「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「プロジェクトのWSDLファイル」「SOAOrderBooking.wsdl」「メッセージ・タイプ」「SOAOrderBookingResponseMessage」の順に選択します。

        図8-7 outputVariableに関する「タイプの選択」

        図8-7の説明は次にあります。
        「図8-7 outputVariableに関する「タイプの選択」」の説明

      「タイプの選択」で、「OK」をクリックします。 「変数の作成」ダイアログは次のように表示されます。

      図8-8 outputVariableに関する「変数の作成」ダイアログ

      図8-8の説明は次にあります。
      「図8-8 outputVariableに関する「変数の作成」ダイアログ」の説明

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

  5. 「Process」ダイアログに、次の2つの変数が表示されていることを確認します。

    図8-9 inputVariableおよびoutputVariableが表示された「Process」ダイアログ

    図8-9の説明は次にあります。
    「図8-9 inputVariableおよびoutputVariableが表示された「Process」ダイアログ」の説明

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

  7. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.5 「client」パートナ・リンクの作成

この「client」パートナ・リンクはclientを表します。このclientは、receiveInputアクティビティにデータを渡し、戻り値を受信するためにフローの最後に起動されます。

  1. コンポーネント・パレットが表示されていない場合は、「表示」→「コンポーネント・パレット」の順に選択します。 コンポーネント・パレットのドロップダウンから、「Services」を選択します。

  2. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、「サービス」スイムレーンにドロップします。 「パートナ・リンクの作成」ダイアログが表示されます。

  3. 「パートナ・リンクの作成」ダイアログで次の値を設定します。

    • 名前: 「client」と入力します。

    • WSDLファイル: 「サービス・エクスプローラ」アイコン(左から2番目)をクリックし、「サービス・エクスプローラ」ダイアログを表示します。 「サービス・エクスプローラ」ダイアログで、「プロジェクトのWSDLファイル」を開き、「SOAOrderBooking.wsdl」を選択します。

      図8-10 「client」パートナ・リンクに関する「サービス・エクスプローラ」

      図8-10の説明は次にあります。
      「図8-10 「client」パートナ・リンクに関する「サービス・エクスプローラ」」の説明

      「サービス・エクスプローラ」で、「OK」をクリックします。

    • パートナ・リンク・タイプ: 「SOAOrderBooking」を選択します(自動的に表示されます)。

    • パートナ・ロール: 「SOAOrderBookingRequester」を選択します。

    • マイ・ロール: 「SOAOrderBookingProvider」を選択します。

    • プロセス: 空白のままにします。

    「OK」をクリックする前に、「名前」「client」に設定されたままであることを確認します。 この名前は、JDeveloperによって、他のフィールドが自動的に挿入されるときに、「SOAOrderBooking」に変更されている場合があります。

    図8-11 「client」に関する「パートナ・リンクの作成」ダイアログ

    図8-11の説明は次にあります。
    「図8-11 「client」に関する「パートナ・リンクの作成」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.6 clientからの入力の受信(receiveアクティビティ)

入力データをclientから受信するためのreceiveアクティビティを作成します。 このreceiveアクティビティでは、データをJMSトピックに送信するためのセンサーも定義します。

8.6.1 receiveアクティビティの作成

receiveアクティビティを作成する手順は、次のとおりです。

  1. コンポーネント・パレットのドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Receive」アイコンをドラッグして、ページ上の「アクティビティをここにドロップ」と表示されている場所にドロップします。

    この時点で、ページが次のように表示されていることを確認します。

    図8-12 receiveアクティビティをドロップしたSOAOrderBookingページ

    図8-12の説明は次にあります。
    「図8-12 receiveアクティビティをドロップしたSOAOrderBookingページ」の説明

  3. 次のいずれかを実行して、「Receive」ダイアログを表示します。

    • 「Receive_1」アクティビティの横にある矢印のいずれかをドラッグして、「client」パートナ・リンクにドロップします。 receiveアクティビティがパートナ・リンクに関連付けられます。

    • 新規の「Receive_1」アクティビティをダブルクリックします。

  4. 「Receive」ダイアログで、次の値を入力します。

    • 名前: 「receiveInput」と入力します。

    • パートナ・リンク: 「client」に設定されていることを確認します。 この値は、「Receive_1」アクティビティの矢印をドラッグして、「client」パートナ・リンクにドロップした場合は自動的に表示されます。 設定されていない場合は、懐中電灯をクリックして「パートナ・リンクの選択」ダイアログを表示し、「client」を選択します。

      図8-13 「receiveInput」receiveアクティビティに関する「パートナ・リンクの選択」ダイアログ

      図8-13の説明は次にあります。
      「図8-13 「receiveInput」receiveアクティビティに関する「パートナ・リンクの選択」ダイアログ」の説明

      「パートナ・リンクの選択」ダイアログで、「OK」をクリックします。

    • Operation: 「initiate」を選択します。 この値は自動的に表示されます。

    • Variable: 「変数の参照」アイコン(右側にあるアイコン)をクリックします。 「変数の選択」ダイアログで、「inputVariable」を選択します。

      図8-14 「receiveInput」receiveアクティビティに関する「変数の選択」ダイアログ

      図8-14の説明は次にあります。
      「図8-14 「receiveInput」receiveアクティビティに関する「変数の選択」ダイアログ」の説明

      「変数の選択」で、「OK」をクリックします。

    • インスタンスの作成: このオプションを選択します。

    「Receive」ダイアログは次のように表示されます。

    図8-15 「receiveInput」receiveアクティビティに関する「Receive」ダイアログ

    図8-15の説明は次にあります。
    「図8-15 「receiveInput」receiveアクティビティに関する「Receive」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.6.2 receiveアクティビティ用のセンサーの作成

このreceiveアクティビティでは、receiveアクティビティ用のアクティビティ・センサーが作成されます。 このアクティビティを実行した後は、このセンサーによって注文情報がJMSトピックに書き込まれます。 このJMSトピックのコンシューマは存在しません。このセンサーの目的は、注文情報を別の宛先に送信する方法を示すことです。

  1. receiveInputアクティビティをダブルクリックして、「Receive」ダイアログを表示します。

  2. 「Receive」ダイアログの「センサー」タブをクリックします。

  3. 「作成」をクリックして、新規のセンサーを作成します。 「アクティビティ・センサーの作成」ダイアログが表示されます。

  4. 「アクティビティ・センサーの作成」ダイアログで、「名前」「InstanceStart」に設定します。

  5. 「評価時間」「完了」に設定します。 センサーの起動時間が指定されます。 「完了」は、このアクティビティの実行後にセンサーが起動されることを示します。

  6. 「アクティビティ変数センサー」セクションで、「作成」をクリックし、「アクティビティ変数センサーの作成」ダイアログを表示します。

    図8-16 「アクティビティ変数センサーの作成」ダイアログ

    図8-16の説明は次にあります。
    「図8-16 「アクティビティ変数センサーの作成」ダイアログ」の説明

  7. 「アクティビティ変数センサーの作成」ダイアログで、「変数XPath」の鉛筆アイコンをクリックします。 「変数XPathビルダー」ダイアログが表示されます。

    図8-17 「変数XPathビルダー」ダイアログ

    図8-17の説明は次にあります。
    「図8-17 「変数XPathビルダー」ダイアログ」の説明

  8. 「変数」「プロセス」「変数」「inputVariable」の順に選択します。

  9. 「変数XPathビルダー」で、「OK」をクリックします。 「アクティビティ変数センサーの作成」ダイアログに、次の値が表示されます(図8-16を参照)。

    変数XPath: $inputVariable

    出力ネームスペース: http://www.globalcompany.com/ns/OrderBooking

    出力データ型: SOAOrderBookingRequestMessage

  10. 「アクティビティ変数センサーの作成」ダイアログで、「OK」をクリックします。 「アクティビティ・センサーの作成」ダイアログ(図8-21)に戻ります。

  11. 「アクティビティ・センサーの作成」ダイアログの「センサー・アクション」セクションで、「追加」アイコンをクリックします。 「センサー・アクションの選択」ダイアログが表示されます。

    図8-18 「センサー・アクションの選択」ダイアログ

    図8-18の説明は次にあります。
    「図8-18 「センサー・アクションの選択」ダイアログ」の説明

  12. 「センサー・アクションの選択」ダイアログで、「センサー・アクション」を選択し、棒型アイコンから「センサー・アクション」を選択します。 「センサー・アクションの作成」ダイアログが表示されます。

  13. 「センサー・アクションの作成」ダイアログで、次の操作を実行します。

    • 名前: 「InstanceStart」と入力します。

    • パブリッシュ・タイプ: 「JMSトピック」を選択します。

    • JMSコネクション・ファクトリ: 「jms/TopicConnectionFactory」と入力します。

    • パブリッシュ・ターゲット: 「jms/demoTopic」と入力します。

    • フィルタ: 空白のままにします。

    • 有効化: このオプションを選択します。

    図8-19 「センサー・アクションの作成」ダイアログ

    図8-19の説明は次にあります。
    「図8-19 「センサー・アクションの作成」ダイアログ」の説明

  14. 「センサー・アクションの作成」ダイアログで、「OK」をクリックします。 「センサー・アクションの選択」ダイアログに、「InstanceStart」センサー・アクションが表示されます。

    図8-20 「センサー・アクションの選択」ダイアログ

    図8-20の説明は次にあります。
    「図8-20 「センサー・アクションの選択」ダイアログ」の説明

  15. 「センサー・アクションの選択」で、「OK」 をクリックします。 「アクティビティ・センサーの作成」ダイアログに戻ります。このダイアログは次のように表示されます。

    図8-21 「アクティビティ・センサーの作成」ダイアログ

    図8-21の説明は次にあります。
    「図8-21 「アクティビティ・センサーの作成」ダイアログ」の説明

  16. 「アクティビティ・センサーの作成」ダイアログで、「OK」をクリックします。

    「Receive」ダイアログの「センサー」タブは、次のように表示されます。

    図8-22 「Receive」ダイアログ、「センサー」タブ

    図8-22の説明は次にあります。
    「図8-22 「Receive」ダイアログ、「センサー」タブ」の説明

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

  18. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

SOAOrderBookingページは次のように表示されます。

図8-23 receiveアクティビティが表示されたSOAOrderBooking.bpelページ

図8-23の説明は次にあります。
「図8-23 receiveアクティビティが表示されたSOAOrderBooking.bpelページ」の説明

センサー情報は、SOAOrderBooking¥bpelディレクトリ内の次のファイルに格納されます。

  • sensor.xml

  • sensorAction.xml

8.7 データベースへの注文情報の挿入(「InsertOrderIntoDB」スコープ)

このスコープでは、注文情報をデータベースに挿入するアクティビティを作成します。 図8-24に、「InsertOrderIntoDB」スコープ用に作成するアクティビティを示します。

図8-24 「InsertOrderIntoDB」スコープのアクティビティ

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

8.7.1 ORDERS表に書き込むためのデータベース・アダプタの作成

「InsertOrderIntoDB」スコープのアクティビティでは、データベース内のORDERS表に注文情報を書き込むために、データベース・アダプタが使用されます。 実行時に、データベース・アダプタは、第2.6.4項「データベース・アダプタのコネクション・ファクトリの作成」で設定したeis/DB/soademo接続を介して、データベースに接続します。

データベース・アダプタを作成する手順は、次のとおりです。

  1. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  2. コンポーネント・パレットから「Database Adapter」アイコンをドラッグして、「サービス」スイムレーンにドロップします。 「アダプタ構成ウィザード」が起動します。 ようこそページで、「次へ」をクリックして続行します。

  3. ステップ1のサービス名ページで、「サービス名」「Order」と入力し、「次へ」をクリックします。

    図8-25 アダプタ構成ウィザード、ステップ1、サービス名

    図8-25の説明は次にあります。
    「図8-25 アダプタ構成ウィザード、ステップ1、サービス名」の説明

  4. ステップ2のサービス接続ページで、次の操作を実行します。

    図8-26 アダプタ構成ウィザード、ステップ2、サービス接続

    図8-26の説明は次にあります。
    「図8-26 アダプタ構成ウィザード、ステップ2、サービス接続」の説明

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

  5. ステップ3の操作タイプ・ページで、「表に対して操作を実行」を選択し、「挿入または更新(マージ)」を選択します。 SOA Order Bookingアプリケーションで実行する必要があるのは、表の行の挿入のみです。

    図8-27 アダプタ構成ウィザード、ステップ3、操作タイプ

    図8-27の説明は次にあります。
    「図8-27 アダプタ構成ウィザード、ステップ3、操作タイプ」の説明

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

  6. ステップ4の表の選択ページで、「表のインポート」をクリックします。

    「表のインポート」ダイアログで、「問合せ」をクリックします。

    「ORDERS」「ITEMS」を選択し、右矢印ボタンをクリックして「選択済」ボックスに移動します。 データベース・アダプタによって、これらの表に情報が書き込まれます。

    図8-28 「FedexShipment」に関する「表のインポート」ダイアログ

    図8-28の説明は次にあります。
    「図8-28 「FedexShipment」に関する「表のインポート」ダイアログ」の説明

    「表のインポート」ダイアログで、「OK」をクリックします。 ステップ4の表の選択ページは、次のように表示されます。

    図8-29 アダプタ構成ウィザード、ステップ4、表の選択

    図8-29の説明は次にあります。
    「図8-29 アダプタ構成ウィザード、ステップ4、表の選択」の説明

  7. 「SOADEMO.ORDERS」を選択し、「次へ」をクリックします。

  8. ステップ5のリレーションシップ・ページで、「次へ」をクリックします。

    図8-30 アダプタ構成ウィザード、ステップ5、リレーションシップ

    図8-30の説明は次にあります。
    「図8-30 アダプタ構成ウィザード、ステップ5、リレーションシップ」の説明

  9. 終了ページで、「終了」をクリックします。

  10. 「パートナ・リンクの作成」ダイアログが表示され、各フィールドは次のように表示されます。

    図8-31 「Order」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ

    図8-31の説明は次にあります。
    「図8-31 「Order」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ」の説明

    「パートナ・リンクの作成」ダイアログで、「OK」をクリックします。 「サービス」スイムレーンに「Orders」データベース・アダプタが表示されていることを確認します。

  11. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

ウィザードによって、SOAOrderBookingディレクトリに次のファイルが作成されます。

  • bpel¥DBAdapterOutboundHeader.wsdl: このファイルには、データベースに接続するための汎用情報が格納されます。

  • bpel¥Order.wsdl: このファイルには、ウィザードで指定した情報が格納されます。

  • bpel¥Order_table.xsd: このファイルには、ORDERS表とITEMS表のスキーマ情報が格納されます。

  • bpel¥Order_toplink_mappings.xml: このファイルはTopLinkによって使用されます。

  • src¥Order¥Orders.java

  • src¥Order¥Items.java

  • database¥SOADEMO¥ORDERS.table

  • database¥SOADEMO¥ITEMS.table

  • toplink¥Order¥Order.mwp

8.7.2 データベースから注文IDを取得するためのデータベース・アダプタの作成

注文情報をデータベース内のORDERS表に挿入するには、そのデータベースから注文IDを取得する必要があります。 注文IDは、データベース順序から生成されます。

  1. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  2. コンポーネント・パレットから「Database Adapter」アイコンをドラッグして、「サービス」スイムレーンにドロップします。 「アダプタ構成ウィザード」が起動します。 ようこそページで、「次へ」をクリックして続行します。

  3. ステップ1のサービス名ページで、「サービス名」「OrderSequence」と入力し、「次へ」をクリックします。

    図8-32 アダプタ構成ウィザード、ステップ1、サービス名

    図8-32の説明は次にあります。
    「図8-32 アダプタ構成ウィザード、ステップ1、サービス名」の説明

  4. ステップ2のサービス接続ページで、次の操作を実行します。

    図8-33 アダプタ構成ウィザード、ステップ2、サービス接続

    図8-33の説明は次にあります。
    「図8-33 アダプタ構成ウィザード、ステップ2、サービス接続」の説明

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

  5. ステップ3の操作タイプ・ページで、「カスタムSQLの実行」を選択します。

    図8-34 アダプタ構成ウィザード、ステップ3、操作タイプ

    図8-34の説明は次にあります。
    「図8-34 アダプタ構成ウィザード、ステップ3、操作タイプ」の説明

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

  6. ステップ4のカスタムSQLページで、「SQL」ボックスに次のSQL文を入力します。

    select order_seq_id_gen.nextval from dual

    ウィザードによって、適切な文が「XSD」ボックスに表示されます。

    図8-35 アダプタ構成ウィザード、ステップ4、カスタムSQL

    図8-35の説明は次にあります。
    「図8-35 アダプタ構成ウィザード、ステップ4、カスタムSQL」の説明

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

  7. 終了ページで、「終了」をクリックします。

  8. 「パートナ・リンクの作成」ダイアログが表示され、各フィールドは次のように表示されます。

    図8-36 「OrderSequence」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ

    図8-36の説明は次にあります。
    「図8-36 「OrderSequence」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ」の説明

    「パートナ・リンクの作成」ダイアログで、「OK」をクリックします。 「サービス」スイムレーンに「OrderSequence」データベース・アダプタが表示されていることを確認します。

  9. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

ウィザードによって、SOAOrderBookingディレクトリに次のファイルが作成されます。

  • bpel¥OrderSequence.wsdl: このファイルには、ウィザードで指定した情報が格納されます。

  • bpel¥OrderSequence.xsd: このファイルには、順序の入力および出力のフォーマットが定義されます。

8.7.3 「InsertOrderIntoDB」スコープの作成

「InsertOrderIntoDB」という新規スコープを作成し、データベースに注文情報を書き込むためのアクティビティを含めます。

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、「receiveInput」アクティビティと「callbackClient」アクティビティの間にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「InsertOrderIntoDB」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープに対して、orderRequestorderSequenceInputorderSequenceOutputの3つの変数を作成する必要があります。

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

    1. 「変数」タブで、「作成」をクリックします。

    2. 「変数の作成」ダイアログで、次の操作を実行します。

      • 名前: 「orderRequest」と入力します。

      • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「Order」「Order.wsdl」「メッセージ・タイプ」「OrdersColllection_msg」の順に選択します。

        図8-37 orderRequest変数に関する「タイプの選択」ダイアログ

        図8-37の説明は次にあります。
        「図8-37 orderRequest変数に関する「タイプの選択」ダイアログ」の説明

        「タイプの選択」で、「OK」をクリックします。

        「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://xmlns.oracle.com/pcbpel/adapter/db/Order/}OrdersCollection_msg」に設定されます。

        図8-38 orderRequest変数に関する「変数の作成」ダイアログ

        図8-38の説明は次にあります。
        「図8-38 orderRequest変数に関する「変数の作成」ダイアログ」の説明

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

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

    1. 「変数」タブで、「作成」をクリックします。

    2. 「変数の作成」ダイアログで、次の操作を実行します。

      • 名前: 「orderSequenceInput」と入力します。

      • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「OrderSequence」「OrderSequence.wsdl」「メッセージ・タイプ」「OrderSequenceInput_msg」の順に選択します。

        図8-39 orderSequenceInput変数に関する「タイプの選択」ダイアログ

        図8-39の説明は次にあります。
        「図8-39 orderSequenceInput変数に関する「タイプの選択」ダイアログ」の説明

        「タイプの選択」で、「OK」をクリックします。

        「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://xmlns.oracle.com/pcbpel/adapter/db/OrderSequence/}OrderSequenceInput_msg」に設定されます。

        図8-40 orderSequenceInput変数に関する「変数の作成」ダイアログ

        図8-40の説明は次にあります。
        「図8-40 orderSequenceInput変数に関する「変数の作成」ダイアログ」の説明

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

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

    1. 「変数」タブで、「作成」をクリックします。

    2. 「変数の作成」ダイアログで、次の操作を実行します。

      • 名前: 「orderSequenceOutput」と入力します。

      • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「OrderSequence」「OrderSequence.wsdl」「メッセージ・タイプ」「OrderSequenceOutputCollection_msg」の順に選択します。

        図8-41 orderSequenceOutput変数に関する「タイプの選択」ダイアログ

        図8-41の説明は次にあります。
        「図8-41 orderSequenceOutput変数に関する「タイプの選択」ダイアログ」の説明

        「タイプの選択」で、「OK」をクリックします。

        「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://xmlns.oracle.com/pcbpel/adapter/db/OrderSequence/}OrderSequenceOutputCollection_msg」に設定されます。

        図8-42 orderSequenceOutput変数に関する「変数の作成」ダイアログ

        図8-42の説明は次にあります。
        「図8-42 orderSequenceOutput変数に関する「変数の作成」ダイアログ」の説明

    3. 「変数の作成」ダイアログで、「OK」をクリックします。 「Scope」ダイアログに戻ります。 ダイアログに3つの変数がすべて表示されていることを確認します。

      図8-43 InsertOrderIntoDBに関する「Scope」ダイアログ、「変数」タブ

      図8-43の説明は次にあります。
      「図8-43 InsertOrderIntoDBに関する「Scope」ダイアログ、「変数」タブ」の説明

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

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.7.4 データベース順序からの注文IDの取得(「GetOrderId」invokeアクティビティ)

このinvokeアクティビティでは、order_seq_id_genデータベース順序から次の順序の値が取得され、orderSequenceOutput変数に格納されます。

  1. 「InsertOrderIntoDB」スコープを開きます。

  2. コンポーネント・パレットから「Invoke」アイコンをドラッグして、「InsertOrderIntoDB」スコープにドロップします。

  3. 次のいずれかを実行して、「Invoke」ダイアログを表示します。

    • 「Invoke_1」アクティビティの横にある矢印のいずれかをドラッグして、「OrderSequence」データベース・アダプタにドロップします。 invokeアクティビティがデータベース・アダプタに関連付けられます。

    • 新規の「Invoke_1」アクティビティをダブルクリックします。

  4. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-47 「GetOrderId」invokeアクティビティに関する「Invoke」ダイアログ

    図8-47の説明は次にあります。
    「図8-47 「GetOrderId」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

SOAOrderBooking.bpelページが次のように表示されていることを確認します。

図8-48 SOAOrderBooking.bpelページ

図8-48の説明は次にあります。
「図8-48 SOAOrderBooking.bpelページ」の説明

8.7.5 注文IDおよび注文ステータス情報の準備(「AssignOrderStatus」assignアクティビティ)

このassignアクティビティでは、データベースに挿入する2つの値を準備します。

  • order_seq_id_genデータベース順序を起動して注文IDを取得します。

  • 注文ステータスを「pending」に設定します。

これらの値は、「InsertOrder」invokeアクティビティによって、注文情報がデータベースに書き込まれるときに使用されます。

このassignアクティビティを作成する手順は、次のとおりです。

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

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignOrderStatus」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックし、2つのコピー操作を作成します。1つは注文IDをコピーする操作、もう1つは注文ステータスをコピーする操作です。

  5. 注文IDをコピーするコピー操作を作成する手順は、次のとおりです。

    1. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    2. 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - InsertOrderIntoDB」「変数」「orderSequenceOutput」「OrderSequenceOutputCollection」「ns4:OrderSequenceOutputCollection」「ns4:OrderSequenceOutput」「ns4:order_seq_id_gen.nextval」の順に選択します。

    3. 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:ID」の順に選択します。

      図8-49 「AssignOrderStatus」assignアクティビティの注文IDをコピーする操作に関する「コピー操作の作成」ダイアログ

      図8-49の説明は次にあります。
      「図8-49 「AssignOrderStatus」assignアクティビティの注文IDをコピーする操作に関する「コピー操作の作成」ダイアログ」の説明

    4. 「コピー操作の作成」ダイアログで、「OK」をクリックします。

  6. 注文ステータスをコピーするコピー操作を作成する手順は、次のとおりです。

    1. 「作成」ドロップダウンから「コピー操作」を再度選択して、2番目のコピー操作を作成します。 「コピー操作の作成」ダイアログが表示されます。

    2. 「From」側で、「タイプ」「式」に設定し、「式」ボックスに次の行を入力します。

      string('pending')
      
      
    3. 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:OrderInfo」「ns1:OrderStatus」の順に選択します。

      図8-50 「AssignOrderStatus」assignアクティビティの注文ステータスをコピーする操作に関する「コピー操作の作成」ダイアログ

      図8-50の説明は次にあります。
      「図8-50 「AssignOrderStatus」assignアクティビティの注文ステータスをコピーする操作に関する「コピー操作の作成」ダイアログ」の説明

    4. 「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに2つのコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-51 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ

    図8-51の説明は次にあります。
    「図8-51 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ」の説明

  8. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

SOAOrderBooking.bpelページが次のように表示されていることを確認します。

図8-52 SOAOrderBooking.bpelページ

図8-52の説明は次にあります。
「図8-52 SOAOrderBooking.bpelページ」の説明

8.7.6 マッピング・ファイルの作成(「TransformOrder」BPELサービス)

この変換サービスでは、TransformOrder.xslというファイルを作成して、受信注文情報を、データベースへの挿入を準備するOrder_table.xsdに定義されているスキーマにマップします。 Order_table.xsdは、第8.7.1項「ORDERS表に書き込むためのデータベース・アダプタの作成」で実行したアダプタ構成ウィザードで作成されています。

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

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

  3. 新規のtransformアクティビティをダブルクリックして、「Transform」ダイアログを表示します。

  4. 「Transform」ダイアログで、「一般」タブをクリックし、「名前」「TransformOrder」に設定します。

  5. このダイアログの「トランスフォーメーション」タブをクリックし、次の値を設定します。

    • ソース変数: 「inputVariable」を選択します。 「ソース・パート」「payload」に設定されていることを確認します。

    • ターゲット変数: 「orderRequest」を選択します。 「ターゲット・パート」「OrdersCollection」に設定されていることを確認します。

    • マッパー・ファイル: 「TransformOrder.xsl」と入力し、「マッピングの作成」アイコン(中央のアイコン)をクリックします。 TransformOrder.xsl用のデータ・マッピング・ツールが表示されます。

      このデータ・マッピング・ツールで、表8-2に示す簡単なマッピングを作成します。 左の列はソース側、右の列はターゲット側を示します。 この簡単なマッピングは、ソース側のラベルをターゲット側にドラッグ・アンド・ドロップすることによって作成します。

      表8-2 簡単なマッピング

      ソース → client:SOAOrderBookingProcessRequest → po:PurchaseOrder ターゲット → OrdersCollection → Orders

      po:CustID

      custid

      po:ID

      ordid

      po:OrderInfo → po:OrderDate

      orderdate

      po:OrderInfo → po:OrderPrice

      price

      po:OrderInfo → po:OrderStatus

      status


      図8-53に、簡単なマッピングを実行したデータ・マッパーを示します。

      図8-53 「InsertOrderIntoDB」スコープのtransformアクティビティ用のデータ・マッパー

      図8-53の説明は次にあります。
      「図8-53 「InsertOrderIntoDB」スコープのtransformアクティビティ用のデータ・マッパー」の説明

      XSLファイルにfor-each要素を作成して、注文内のすべての品目を処理します。手順は次のとおりです。

      a. データ・マッパーのコンポーネント・パレットのドロップダウンから、XSLT Constructsを選択します。

      b. ターゲット側で、「itemsCollection」および「Items」を開きます。

      c. コンポーネント・パレットから「for-each」品目をドラッグして、「Items」にドロップします。 「for-each」ラベルが、ターゲット側の「itemsCollection」「Items」の間に表示されるようにします。

      d. ソース側の「po:OrderItems」を開いて、その下に「po:Item」が表示されるようにします。 同様に「po:Item」も開きます。

      e. ソース側の「po:Item」からの線を、ターゲット側の「for-each」品目までドラッグします。

      f. 次の各品目のフィールドをマップします。

      表8-3 「for-each」品目に対するマッピング

      ソース → client:SOAOrderBookingProcessRequest → po:PurchaseOrder → po:OrderItems→po:Item ターゲット → OrdersCollection → Orders → itemsCollection → for-each → Items

      po:ProductName

      productname

      po:partnum

      partnum

      po:price

      price

      po:Quantity

      quantity


      ターゲット側の「itemid」については、position()関数にマップする必要があります。 データ・マッパーでこのマップを実行する手順は、次のとおりです。

      コンポーネント・パレットのドロップダウンから、「Node-set Functions」を選択します。

      b. コンポーネント・パレットから「position」品目をドラッグして、中間の領域(ソース領域とターゲット領域の間)にドロップします。

      c. ターゲット側の「itemid」からの線を、中間の領域にある「position」品目までドラッグします。

      d. 「ファイル」→「保存」の順に選択してTransformOrder.xslを保存します。

      図8-54に、データ・マッパーの完了したトランスフォーメーションを示します。

      図8-54 transformationアクティビティの完了したマッピングが表示されたデータ・マッパー

      図8-54の説明は次にあります。
      「図8-54 transformationアクティビティの完了したマッピングが表示されたデータ・マッパー」の説明

      e. 「ファイル」→「閉じる」の順に選択して、TransformOrder.xslを閉じます。 JDeveloperのメイン・エディタに戻ります。

  6. メイン・エディタで「ファイル」→「保存」の順に選択して、SOAOrderBooking.bpelを保存します。

8.7.7 データベースへの注文情報の挿入(「InsertOrder」invokeアクティビティ)

このinvokeアクティビティでは、データがデータベースに挿入されます。

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

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

  3. 次のいずれかを実行して、「Invoke」ダイアログを表示します。

    • 「Invoke_1」アクティビティの横にある矢印のいずれかをドラッグして、「Order」データベース・アダプタにドロップします。 「Invoke_1」アクティビティがデータベース・アダプタに関連付けられます。

    • 新規の「Invoke_1」アクティビティをダブルクリックします。

  4. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-57 「InsertOrder」invokeアクティビティに関する「Invoke」ダイアログ

    図8-57の説明は次にあります。
    「図8-57 「InsertOrder」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

SOAOrderBooking.bpelプロジェクトが次のように表示されていることを確認します。

図8-58 SOAOrderBooking.bpelページ

図8-58の説明は次にあります。
「図8-58 SOAOrderBooking.bpelページ」の説明

8.7.8 「InsertOrderIntoDB」スコープの最小化

最小化するには、「InsertOrderIntoDB」スコープの「-」アイコンをクリックします。 最小化すると、最小化したスコープと同じレベルの新規スコープを作成しやすくなります。 最小化しないと、既存のスコープ内に誤って新規スコープをドラッグ・アンド・ドロップする可能性があります。 最小化したスコープがどのように表示されるかは、図8-1を参照してください。

 

8.8 顧客に関する情報の取得(「CustomerService」スコープ)

このスコープでは、顧客に関する情報を取得するCustomerServiceサービスが起動されます。 戻された情報を変数に移入するために、assignアクティビティが使用されます。

図8-59に、「CustomerService」スコープのアクティビティを示します。

図8-59 「CustomerService」スコープのアクティビティ

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

8.8.1 「CustomerService」パートナ・リンクの作成

「CustomerService」パートナ・リンクによって、SOAOrderBookingプロジェクトは、Oracle Application ServerにデプロイされているCustomerServiceサービスと通信できるようになります。 CustomerSvc.wsdlファイルには、CustomerServiceに対するWSDLを戻すURLが含まれています。

  1. 次のファイルを、soademo_101310_prod.zipファイルからSOAOrderBooking¥bpelディレクトリにコピーします。

    • CustomerSvc.wsdl

    soademo_101310_prod.zipファイルでは、CustomerSvc.wsdlファイルはSOAOrderBooking¥bpelディレクトリにあります。

  2. CustomerSvc.wsdlファイル内のURLを検証します。

    1. JDeveloperで、「ファイル」→「開く」の順に選択し、CustomerSvc.wsdlファイルを開きます。

    2. エディタの下部にある「ソース」タブをクリックし、ファイル内の行を表示します。

    3. ファイル内のhttp://localhost:8888参照は、Oracle Application ServerがJDeveloperと同じマシン上で実行され、そのOracle Application Serverがポート8888でリクエストをリスニングしていることを前提としています。

      必要に応じて、localhostをOracle Application Serverを実行しているマシンの名前に変更し、8888をOracle Application Serverインストールで使用する正しいポートに変更します(例: mypc.mydomain.com:8889)。

    4. ファイルを編集した場合は、そのファイルを保存して閉じます。

  3. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  4. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、「サービス」スイムレーンにドロップします。

  5. 「パートナ・リンクの作成」ダイアログで、次の操作を実行します。

    • 名前: 「CustomerService」と入力します。

    • WSDLファイル: 「サービス・エクスプローラ」アイコン(左から2番目)をクリックし、「サービス・エクスプローラ」ダイアログを表示します。 「サービス・エクスプローラ」ダイアログで、「プロジェクトのWSDLファイル」を開き、「CustomerSvc.wsdl」を選択します。

      図8-60 「CustomerService」パートナ・リンクに関する「サービス・エクスプローラ」

      図8-60の説明は次にあります。
      「図8-60 「CustomerService」パートナ・リンクに関する「サービス・エクスプローラ」」の説明

      「サービス・エクスプローラ」で、「OK」をクリックします。

    • パートナ・リンク・タイプ: 「CustomerService_PL」を選択します(自動的に表示されます)。

    • パートナ・ロール: 「CustomerService_Role」を選択します。

    • マイ・ロール: 空白のままにします。

    「パートナ・リンクの作成」ダイアログが次のように表示されていることを確認します。

    図8-61 「CustomerService」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ

    図8-61の説明は次にあります。
    「図8-61 「CustomerService」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ」の説明

    「OK」をクリックする前に、「名前」「CustomerService」であることを確認します。 JDeveloperによって「CustomerSvc」に変更されている場合があります。 「パートナ・リンクの作成」ダイアログで、「OK」をクリックします。

8.8.2 「CustomerService」スコープの作成

「CustomerService」という新規のスコープを作成します。

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、「InsertOrderIntoDB」スコープの下にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「CustomerService」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには1つの変数を作成する必要があります。

  6. 「変数」タブで、「作成」をクリックします。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「customerServiceRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「CustomerService」「CustomerSvc.wsdl」「インポートしたWSDL」「CustomerService」「メッセージ・タイプ」「CustomerService_findCustomerById」の順に選択します。

      図8-62 「customerServiceRequest」変数に関する「タイプの選択」ダイアログ

      図8-62の説明は次にあります。
      「図8-62 「customerServiceRequest」変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/customer}CustomerService_findCustomerById」に設定されます。

    図8-63 「customerServiceRequest」変数に関する「変数の作成」ダイアログ

    図8-63の説明は次にあります。
    「図8-63 「customerServiceRequest」変数に関する「変数の作成」ダイアログ」の説明

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

  10. 「Scope」ダイアログの「変数」タブに、customerServiceRequest変数が表示されます。

    図8-64 「変数」タブに「CustomerService」スコープが表示された「Scope」ダイアログ

    図8-64の説明は次にあります。
    「図8-64 「変数」タブに「CustomerService」スコープが表示された「Scope」ダイアログ」の説明

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

8.8.3 findCustomerById操作への顧客IDの割当て(「AssignRequest」assignアクティビティ)

このassignアクティビティでは、顧客ID情報がcustomerServiceRequest変数に割り当てられます。 割当て後、この変数は「GetCustInfo」invokeアクティビティの入力変数として使用されます。

  1. 「CustomerService」スコープを開きます。

  2. コンポーネント・パレットから「Assign」アイコンをドラッグして、「CustomerService」スコープにドロップします。

  3. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  4. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignRequest」に設定します。

  5. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。

  6. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:CustID」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - Customer Service」「変数」「customerServiceRequest」「parameters」「ns8:findCustomerById」「ns8:custid」の順に選択します。

    図8-65 「AssignRequest」アクティビティに関する「コピー操作の作成」ダイアログ

    図8-65の説明は次にあります。
    「図8-65 「AssignRequest」アクティビティに関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに、コピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-66 「AssignRequest」アクティビティに関する「Assign」ダイアログ

    図8-66の説明は次にあります。
    「図8-66 「AssignRequest」アクティビティに関する「Assign」ダイアログ」の説明

8.8.4 findCustomerByIdの結果を格納する変数の作成(「customerServiceResponse」プロセス変数)

customerServiceResponse変数は、findCustomerById操作の結果を格納するために使用されます。

customerServiceResponse変数を「SOAOrderBooking」スコープに作成します。 この変数は、このBPELプロセス内のすべてのアクティビティがアクセスできるように、このレベルで作成されます。

  1. 「SOAOrderBooking」スコープをダブルクリックします。 横に表示されている「SOAOrderBooking」テキストをダブルクリックすることもできます。 「Process」ダイアログが表示されます。

  2. 「Process」ダイアログの「変数」タブで、「作成」をクリックします。 「変数の作成」ダイアログが表示されます。

  3. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「customerServiceResponse」と入力します。

    • タイプ: 「メッセージ・タイプ」を選択して懐中電灯アイコンをクリックします。 「タイプの選択」ダイアログが表示されます。

      「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「CustomerService」「CustomerSvc.wsdl」「インポートしたWSDL」「Customer Service」「メッセージ・タイプ」「CustomerService_findCustomerByIdResponse」の順に選択します。

      図8-67 「customerServiceResponse」プロセス変数に関する「タイプの選択」ダイアログ

      図8-67の説明は次にあります。
      「図8-67 「customerServiceResponse」プロセス変数に関する「タイプの選択」ダイアログ」の説明

    「タイプの選択」で、「OK」 をクリックします。 「変数の作成」ダイアログは次のように表示されます。

    図8-68 「customerServiceResponse」プロセス変数に関する「変数の作成」ダイアログ

    図8-68の説明は次にあります。
    「図8-68 「customerServiceResponse」プロセス変数に関する「変数の作成」ダイアログ」の説明

  4. 「変数の作成」ダイアログで、「OK」をクリックします。 「Process」ダイアログにcustomerServiceResponse変数が表示されます。

    図8-69 customerServiceResponse変数が表示された「Process」ダイアログ

    図8-69の説明は次にあります。
    「図8-69 customerServiceResponse変数が表示された「Process」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.8.5 findCustomerByIdの起動(「GetCustInfo」invokeアクティビティ)

このinvokeアクティビティは、「CustomerService」パートナ・リンクにアクセスし、findCustomerById操作を起動します。 この操作は、「AssignRequest」アクティビティで割り当てられた顧客IDを使用して起動されます。 操作の結果はcustomerServiceResponse変数に格納されます。

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

  2. 次にいずれかを実行して、「Invoke」ダイアログを表示します。

    • 「Invoke_1」アクティビティの横にある矢印のいずれかをドラッグして、「CustomerService」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規の「Invoke_1」アクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-73 「GetCustInfo」invokeアクティビティに関する「Invoke」ダイアログ

    図8-73の説明は次にあります。
    「図8-73 「GetCustInfo」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.8.6 「AssignInitialCustomerResponse」assignアクティビティの作成

このassignアクティビティでは、顧客の姓名がinputVariableのペイロード部分に追加されます。 この追加操作の実行には、XMLフラグメントが使用されます。

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

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignInitialCustomerResponse」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 追加操作を作成します。

  5. 「作成」ドロップダウンから「追加操作」を選択します。 「追加操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」ドロップダウンから「XMLフラグメント」を選択し、「XMLフラグメント」ボックスに次の行を入力します。

      <nsx:ShipTo xmlns:nsx="http://www.globalcompany.com/ns/order">
         <nsx:Name>
            <nsx:First/>
            <nsx:Last/>
         </nsx:Name>
      </nsx:ShipTo>
      
      

      接頭辞nsxは、「http://www.globalcompany.com/ns/order」に対する接頭辞で置換する必要があります。 接頭辞を判別するには、SOAOrderBooking.bpelファイルの先頭までスクロールし、次の行を探します。

      xmlns:prefix="http://www.globalcompany.com/ns/order"

      たとえば、ファイル内の行が次のように記述されているとします。

      xmlns:ns1="http://www.globalcompany.com/ns/order"
      
      

      この場合は、XMLフラグメントで接頭辞をns1に変更する必要があります。

    • 「To」側で、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」の順に選択します。

    図8-74 「AssignInitialCustomerResponse」アクティビティに関する「追加操作の作成」ダイアログ

    図8-74の説明は次にあります。
    「図8-74 「AssignInitialCustomerResponse」アクティビティに関する「追加操作の作成」ダイアログ」の説明

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

  6. 「Assign」ダイアログに、追加操作が表示されていることを確認します。

    図8-75 「AssignInitialCustomerResponse」アクティビティに関する「Assign」ダイアログ

    図8-75の説明は次にあります。
    「図8-75 「AssignInitialCustomerResponse」アクティビティに関する「Assign」ダイアログ」の説明

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

  7. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.8.7 inputVariableへの顧客の姓名のコピー(「AssignCustomerResponse」assignアクティビティ)

このアクティビティでは、(データベースから取得された)顧客の姓名がinputVariableに割り当てられます。

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

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignCustomerResponse」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 2つのコピー操作を作成します。

  5. 1番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「customerServiceResponse」「parameters」「ns8:findCustomerByIdResponse」「ns8:return」「ns8:fname」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:ShipTo」「ns1:Name」「ns1:First」の順に選択します。

    図8-76 「AssignCustomerResponse」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作

    図8-76の説明は次にあります。
    「図8-76 「AssignCustomerResponse」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  6. 2番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を再度選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「customerServiceResponse」「parameters」「ns8:findCustomerByIdResponse」「ns8:return」「ns8:lname」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:ShipTo」「ns1:Name」「ns1:Last」の順に選択します。

    図8-77 「AssignCustomerResponse」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作

    図8-77の説明は次にあります。
    「図8-77 「AssignCustomerResponse」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに2つのコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-78 「AssignCustomerResponse」アクティビティに関する「Assign」ダイアログ

    図8-78の説明は次にあります。
    「図8-78 「AssignCustomerResponse」アクティビティに関する「Assign」ダイアログ」の説明

  8. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.8.8 「CustomerService」スコープの最小化

「CustomerService」スコープを最小化するには、「-」アイコンをクリックします。

 

8.9 顧客のクレジット・カードの検証(「CreditService」スコープ)

このスコープでは、顧客の与信が検証されます。 顧客が与信の審査に合格しなかった場合は、フォルトがスローされ、フローの残りの部分は続行されません。

図8-79に、「CreditService」スコープのアクティビティを示します。

図8-79 「CreditService」スコープのアクティビティ

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

8.9.1 「CreditValidatingService」パートナ・リンクの作成

「CreditService」スコープでは、第5章「CreditServiceプロジェクトの作成」で作成したCreditServiceが使用されます。 「CreditValidatingService」パートナ・リンクはCreditServiceへのインタフェースです。

  1. 次のファイルを、soademo_101310_prod.zipファイルからSOAOrderBooking¥bpelディレクトリにコピーします。

    • CreditValidatingService.wsdl

    soademo_101310_prod.zipファイルでは、CreditValidatingService.wsdlファイルはSOAOrderBooking¥bpelディレクトリにあります。

  2. CreditValidatingService.wsdlファイル内のURLを検証します。

    1. JDeveloperで、「ファイル」→「開く」の順に選択し、CreditValidatingService.wsdlファイルを開きます。

    2. エディタの下部にある「ソース」タブをクリックし、ファイル内の行を表示します。

    3. ファイル内のhttp://localhost:8888参照は、Oracle Application ServerがJDeveloperと同じマシン上で実行され、そのOracle Application Serverがポート8888でリクエストをリスニングしていることを前提としています。

      必要に応じて、localhostをOracle Application Serverを実行しているマシンの名前に変更し、8888をOracle Application Serverインストールで使用する正しいポートに変更します(例: mypc.mydomain.com:8889)。

    4. ファイルを編集した場合は、そのファイルを保存して閉じます。

  3. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  4. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、「サービス」スイムレーンにドロップします。

  5. 「パートナ・リンクの作成」ダイアログで、次の操作を実行します。

    • 名前: 「CreditValidatingService」と入力します。

    • WSDLファイル: 「サービス・エクスプローラ」アイコン(左から2番目)をクリックし、「サービス・エクスプローラ」ダイアログを表示します。 「サービス・エクスプローラ」ダイアログで、「プロジェクトのWSDLファイル」を開き、「CreditValidatingService.wsdl」を選択します。

      図8-80 「CreditValidatingService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ

      図8-80の説明は次にあります。
      「図8-80 「CreditValidatingService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ」の説明

      「サービス・エクスプローラ」で、「OK」をクリックします。

    • パートナ・リンク・タイプ: 「ValidateCreditCard_PL」を選択します(自動的に表示されます)。

    • パートナ・ロール: 「ValidateCreditCard_Role」を選択します。

    • マイ・ロール: 空白のままにします。

    「パートナ・リンクの作成」ダイアログが次のように表示されていることを確認します。

    図8-81 「CreditValidatingService」パートナ・リンクに関する「パートナ・リンクの作成」

    図8-81の説明は次にあります。
    「図8-81 「CreditValidatingService」パートナ・リンクに関する「パートナ・リンクの作成」」の説明

    「パートナ・リンクの作成」ダイアログで、「OK」をクリックします。

8.9.2 「CreditService」スコープの作成

「CreditService」という新規のスコープを作成します。

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、「CustomerService」スコープの下にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「CreditService」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには2つの変数を作成する必要があります。

  6. 「変数」タブで、「作成」をクリックします。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「validateRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「CreditValidatingService」「CreditValidatingService.wsdl」「インポートしたWSDL」「ValidateCreditCardServiceSoapHttp」「メッセージ・タイプ」「CreditCardValidationRequestMessage」の順に選択します。

      図8-82 「validateRequest」変数に関する「タイプの選択」ダイアログ

      図8-82の説明は次にあります。
      「図8-82 「validateRequest」変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」 をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/credit}CreditCardValidationRequestMessage」に設定されます。

    図8-83 「validateRequest」変数に関する「変数の作成」ダイアログ

    図8-83の説明は次にあります。
    「図8-83 「validateRequest」変数に関する「変数の作成」ダイアログ」の説明

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

  10. 「作成」を再度クリックして、2番目の変数を作成します。

  11. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「validateResponse」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「CreditValidatingService」「CreditValidatingService.wsdl」「インポートしたWSDL」「ValidateCreditCardServiceSoapHttp」「メッセージ・タイプ」「CreditCardValidationResponseMessage」の順に選択します。

      図8-84 「validateResponse」変数に関する「タイプの選択」ダイアログ

      図8-84の説明は次にあります。
      「図8-84 「validateResponse」変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」 をクリックします。

  12. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/credit}CreditCardValidationResponseMessage」に設定されます。

    図8-85 「validateResponse」変数に関する「変数の作成」ダイアログ

    図8-85の説明は次にあります。
    「図8-85 「validateResponse」変数に関する「変数の作成」ダイアログ」の説明

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

  14. 「Scope」ダイアログの「変数」タブに、validateRequestおよびvalidateResponse変数が表示されます。

    図8-86 「CreditService」スコープに関する「Scope」ダイアログ

    図8-86の説明は次にあります。
    「図8-86 「CreditService」スコープに関する「Scope」ダイアログ」の説明

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

  15. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.9.3 クレジット・カード番号およびクレジット・カード・タイプ情報の割当て(「InitializeRequest」assignアクティビティ)

このassignアクティビティでは、(CustomerServiceのfindCustomerById操作から取得された)クレジット・カード番号およびタイプがvalidateRequest変数にコピーされます。

  1. 「CreditService」スコープを開きます。

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

  3. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  4. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「InitializeRequest」に設定します。

  5. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 2つのコピー操作を作成します。

  6. 1番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「customerServiceResponse」「parameters」「ns8:findCustomerByIdResponse」「ns8:return」「ns8:creditcardnumber」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - Credit Service」「変数」「validateRequest」「CreditCard」「ns11:CreditCard」「ccNum」の順に選択します。

    図8-87 「InitializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作

    図8-87の説明は次にあります。
    「図8-87 「InitializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 2番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を再度選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「customerServiceResponse」「parameters」「ns8:findCustomerByIdResponse」「ns8:return」「ns8:creditcardtype」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - Credit Service」「変数」「validateRequest」「CreditCard」「ns11:CreditCard」「ccType」の順に選択します。

    図8-88 「InitializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作

    図8-88の説明は次にあります。
    「図8-88 「InitializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  8. 「Assign」ダイアログに、複数のコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-89 「InitializeRequest」アクティビティに関する「Assign」ダイアログ

    図8-89の説明は次にあります。
    「図8-89 「InitializeRequest」アクティビティに関する「Assign」ダイアログ」の説明

8.9.4 顧客のクレジット・カードの検証(「InvokeCreditService」invokeアクティビティ)

このinvokeアクティビティでは、顧客のクレジット・カードが有効であるかどうかが確認されます。 前述のassignアクティビティで割り当てた値が使用されます。

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

  2. 次にいずれかを実行して、「Invoke」ダイアログを表示します。

    • 「Invoke_1」アクティビティの横にある矢印矢印のいずれかをドラッグして、「CreditValidatingService」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規の「Invoke_1」アクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-93 「InvokeCreditService」アクティビティに関する「Invoke」ダイアログ

    図8-93の説明は次にあります。
    「図8-93 「InvokeCreditService」アクティビティに関する「Invoke」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.9.5 「OrderBookingFault」プロセス変数の作成

OrderBookingFault変数を「SOAOrderBooking」スコープに作成します。 この変数は、このBPELフロー内のすべてのアクティビティがアクセスできるように、このレベルで作成されます。

  1. ページの上部にスクロールし、「SOAOrderBooking」スコープをダブルクリックします。 横に表示されている「SOAOrderBooking」テキストをダブルクリックすることもできます。 「Process」ダイアログが表示されます。

  2. 「Process」ダイアログの「変数」タブで、「作成」をクリックします。 「変数の作成」ダイアログが表示されます。

  3. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「OrderBookingFault」と入力します。

    • タイプ: 「メッセージ・タイプ」を選択して懐中電灯アイコンをクリックします。 「タイプの選択」ダイアログが表示されます。

      「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「client」「SOAOrderBooking.wsdl」「メッセージ・タイプ」「SOAOrderBookingFaultMessage」の順に選択します。

      図8-94 「OrderBookingFault」プロセス変数に関する「タイプの選択」ダイアログ

      図8-94の説明は次にあります。
      「図8-94 「OrderBookingFault」プロセス変数に関する「タイプの選択」ダイアログ」の説明

    「タイプの選択」で、「OK」 をクリックします。 「変数の作成」ダイアログは次のように表示されます。

    図8-95 「OrderBookingFault」プロセス変数に関する「変数の作成」ダイアログ

    図8-95の説明は次にあります。
    「図8-95 「OrderBookingFault」プロセス変数に関する「変数の作成」ダイアログ」の説明

  4. 「変数の作成」ダイアログで、「OK」をクリックします。 「Process」ダイアログにOrderBookingFault変数が表示されます。

    図8-96 「Process」ダイアログ

    図8-96の説明は次にあります。
    「図8-96 「Process」ダイアログ」の説明

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.9.6 クレジット・カード検証結果の確認(switchアクティビティ)

このスイッチでは、「InvokeCreditService」invokeアクティビティの結果が確認されます。 顧客のクレジット・カードが有効な場合、フローは続行されます。 顧客のクレジット・カードが有効でない場合は、フォルトがスローされます。

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

  2. switchアクティビティを開きます。

  3. <otherwise>ケースを削除します。 このスイッチでは無効な与信レスポンスのみが処理され、この場合はフォルトがスローされます。 スイッチは有効なクレジット・カードに対しては適用されず、この場合はフローの次のステップが続行されます。

8.9.6.1 <case>に対する条件の指定

<case>ブランチについては、顧客の与信が有効でない場合を処理する必要があります。 この情報はvalidateResponse変数に格納されます。

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

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

  3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「変数」「プロセス」「Scope - CreditService」「変数」「validateResponse」「valid」「ns11:valid」の順に選択します。

    「コンテンツのプレビュー」ボックスに、「bpws:getVariableData('validateResponse', 'valid', 'ns11:valid')」が表示されていることを確認します。

    接頭辞ns11は、「http://www.globalcompany.com/ns/credit.xsd」ネームスペースにマップされます。 この接頭辞はシステムによって異なる場合があります。 接頭辞を確認するには、必要に応じて、ソース・ビューでSOAOrderBooking.bpelファイルの先頭までスクロールできます。

  4. 「式に挿入」をクリックします。 「式」ボックスに、関数が3つのパラメータとともに表示さていることを確認します。

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

    bpws:getVariableData('validateResponse','valid','/ns11:valid')='false'
    
    

    図8-97 <case>に対する完全な式が表示された「式ビルダー」ダイアログ

    図8-97の説明は次にあります。
    「図8-97 <case>に対する完全な式が表示された「式ビルダー」ダイアログ」の説明

  6. 「式ビルダー」ダイアログで、「OK」をクリックします。

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

8.9.6.2 OrderBookingFault変数の値の設定(「AssignFault」assignアクティビティ)

このassignアクティビティでは、OrderBookingFault変数の値が「credit problem」に設定されます。

  1. コンポーネント・パレットから「Assign」アクティビティ・アイコンをドラッグして、スイッチの<case>領域にドロップします。

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignFault」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 1つのコピー操作を作成します。

  5. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「式」に設定し、「式」ボックスに次の行を入力します。

      string('credit problem')

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「OrderBookingFault」「payload」「client:SOAOrderBookingProcessFault」「client:status」の順に選択します。

    図8-98 「AssignFault」アクティビティに関する「コピー操作の作成」ダイアログ

    図8-98の説明は次にあります。
    「図8-98 「AssignFault」アクティビティに関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  6. 「Assign」ダイアログに、コピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-99 「AssignFault」アクティビティに関する「Assign」ダイアログ

    図8-99の説明は次にあります。
    「図8-99 「AssignFault」アクティビティに関する「Assign」ダイアログ」の説明

8.9.6.3 「ThrowCreditFault」throwアクティビティの作成

このthrowアクティビティでは、OrderBookingFaultというフォルトがスローされます。 このフォルト値は、同じ名前のOrderBookingFaultという変数に格納されます。 SOAOrderBookingプロセスは、throwアクティビティの実行後に終了します。

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

  2. 新規のthrowアクティビティをダブルクリックして、「Throw」ダイアログを表示します。

  3. 「Throw」ダイアログで、次の操作を実行します。

    • 名前: 「ThrowCreditFault」と入力します。

    • ネームスペースURI: 「http://www.globalcompany.com/ns/OrderBooking」と入力します。 これは手動で入力する必要があります。

    • ローカル・パート: 「OrderBookingFault」と入力します。 これは手動で入力する必要があります。

    • フォルト変数: 懐中電灯アイコンをクリックして「OrderBookingFault」を選択します。

    図8-100 「ThrowCreditFault」throwアクティビティに関する「Throw」ダイアログ

    図8-100の説明は次にあります。
    「図8-100 「ThrowCreditFault」throwアクティビティに関する「Throw」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.9.7 「CreditService」スコープの最小化

「CreditService」スコープを最小化するには、「-」をクリックします。

 

8.10 Oracle Business Rulesの設定

Oracle Business Rulesのリポジトリには、Oracle BPEL Process Managerのデシジョン・サービスによって使用されるルールが格納されています。このルールによって、注文をマネージャが手動で承認する必要があるかどうかが判別されます。 このOracle Business Rulesのリポジトリは、SOA Order Bookingアプリケーションから分離されています。このため、SOA Order Bookingアプリケーションを変更および再デプロイせずにルールを編集できます。

リポジトリ内に作成するルールは、次のとおりです。

8.10.1 リポジトリ・ファイルの設定

Oracle Business Rulesのリポジトリ・ファイルを作成し、その中にルールを定義するには、Oracle Business Rules Rule Author(Rule Author)を使用します。このRule Authorは、Oracle Business Rulesのリポジトリを作成および管理できるWebベースのツールです。

リポジトリ・ファイルの位置

リポジトリ・ファイルはSOAOrderBooking¥bpel¥rules¥oracleディレクトリに作成します。

ただし、JDeveloperとOracle Application Serverを別々のマシンで実行している場合は、リポジトリ・ファイルをOracle Application Serverマシンに作成する必要があります(Rule AuthorではOracle Application Serverのマシンにファイルが作成されるため)。 リポジトリ・ファイルを作成し、その中にルールを移入した後は、そのリポジトリ・ファイルをOracle Application ServerマシンからJDeveloperマシンにコピーします。

  1. SOA Order Bookingアプリケーションを作成している場所に、次のディレクトリを作成します。

    SOADEMO¥SOAOrderBooking¥bpel¥rules¥oracle¥

    これは、Oracle Business Rulesのリポジトリ・ファイルを配置するディレクトリです。

  2. ブラウザで、Rule Authorのページを開きます。 Rule AuthorのURLは、次のとおりです。

    http://host:port/ruleauthor

    hostは、Oracle Application Serverを実行しているマシンを、portは、HTTPポート(例: 8888)を指定します。

  3. oc4jadminユーザーでログインします。

  4. 「リポジトリ」タブで、次の操作を実行します。

    • リポジトリ・タイプ: 「ファイル」を選択します。

    • ファイルの場所: 「SOADEMO¥SOAOrderBooking¥bpel¥rules¥oracle¥sample_repository」と入力します(SOADEMOは、SOA Order Bookingアプリケーションを作成しているディレクトリを表します)。 Rule Authorによってsample_repositoryファイルが作成されます。

      JDeveloperとOracle Application Serverを別々のマシンで実行している場合は、Oracle Application Serverマシンのパスを入力します(例: C:¥rules¥sample_repository)。 格納する場所はどこでもかまいません。これは、ファイルを作成し、その中にルールを定義した後で、そのファイルをOracle Application Serverマシンから、JDeveloperマシンのSOADEMO¥SOAOrderBooking¥bpel¥rules¥oracle¥ディレクトリにコピーするためです。

    図8-101 Rule Authorの接続ページ

    図8-101の説明は次にあります。
    「図8-101 Rule Authorの接続ページ」の説明

    「作成」をクリックします。 確認ページが表示されていることを確認します。 これで、Rule Authorが新規リポジトリに接続され、このリポジトリ内にルールを定義できます。

    図8-102 Rule Authorの確認ページ

    図8-102の説明は次にあります。
    「図8-102 Rule Authorの確認ページ」の説明

8.10.2 リポジトリへのディクショナリの作成

リポジトリには1つ以上のディクショナリが格納されます。 ディクショナリには複数のルールセットが含まれ、各ルールセットには複数のルールが含まれています。 通常、1つのディクショナリには、1つのアプリケーションに対する複数のルールセットが含まれています。

  1. 確認ページの「作成」セカンダリ・タブをクリックします。 ディクショナリを作成ページが表示されます。

  2. ディクショナリを作成ページで、ディクショナリ名として「OrderBookingRules」と入力します。

    図8-103 Rule Authorのディクショナリを作成ページ

    図8-103の説明は次にあります。
    「図8-103 Rule Authorのディクショナリを作成ページ」の説明

  3. 「作成」をクリックします。 確認ページが表示されていることを確認します。

    図8-104 Rule Authorのディクショナリを作成ページの確認

    図8-104の説明は次にあります。
    「図8-104 Rule Authorのディクショナリを作成ページの確認」の説明

8.10.3 Oracle Application ServerマシンへのOrderBookingRules.xsdのコピー

このステップは、JDeveloperとOracle Application Serverを別々のマシンで実行している場合のみ必要です。 両方を同じマシンで実行している場合、OrderBookingRules.xsdファイルは、(第8.3項「ファイルのコピー」でファイルをコピーした)Oracle Application Serverマシンにすでに存在しています。

soademo_101310_prod.zipファイル内のOrderBookingRules.xsdファイルには、Oracle Business Rulesに関するファクトを提供するXML要素が記述されています。 XSDファイルは、zipファイル内のSOAOrderBooking¥bpelディレクトリにあります。

JDeveloperとOracle Application Serverを別々のマシンで実行している場合は、このファイルをsoademo_101310_prod.zipファイルから、Oracle Application Serverマシンのリポジトリ・ファイルを格納したディレクトリ(例: C:¥rules)にコピーします。 手順4を参照してください。

第8.10.4項「XMLスキーマ内の要素に対するJAXBクラスの生成」で、Rule Authorを使用して、OrderBookingRules.xsdに定義されているXML要素に対してJavaクラスを生成します。

8.10.4 XMLスキーマ内の要素に対するJAXBクラスの生成

OrderBookingRules.xsdファイル内の要素に対してJavaオブジェクトを生成するには、Rule Authorを使用します。

  1. 「定義」タブをクリックして、左側の「XMLFact」をクリックします。 XMLファクト・サマリー・ページが表示されます。 この時点で、OrderBookingRulesディクショナリにXMLファクトは含まれていません。

    図8-105 XMLファクト・サマリー・ページ

    図8-105の説明は次にあります。
    「図8-105 XMLファクト・サマリー・ページ」の説明

  2. 「作成」をクリックします。

  3. XMLスキーマ・セレクタ・ページで、次の操作を実行します。

    • XMLスキーマ: OrderBookingRules.xsdファイルへのフルパスを入力します。

      JDeveloperとOracle Application Serverを同じマシンで実行している場合は、「SOADEMO¥SOAOrderBooking¥bpel¥OrderBookingRules.xsd」と入力します。

      JDeveloperとOracle Application Serverを別々のマシンで実行している場合は、「C:¥rules¥OrderBookingRules.xsd」と入力します。

    • JAXBクラス・ディレクトリ: Rule AuthorでJavaオブジェクト(.javaおよび.classファイル)を作成するディレクトリへのフルパスを入力します。

      JDeveloperとOracle Application Serverを同じマシンで実行している場合は、「SOADEMO¥SOAOrderBooking¥bpel¥rules」と入力します。

      JDeveloperとOracle Application Serverを別々のマシンで実行している場合は、「C:¥rules」と入力します。

    • ターゲット・パッケージ名: 「com.oracle.demos.orderbooking」と入力します。 作成されるクラスのパッケージ名を指定します。

    図8-106 XMLスキーマ・セレクタ・ページ

    図8-106の説明は次にあります。
    「図8-106 XMLスキーマ・セレクタ・ページ」の説明

  4. 「スキーマの追加」をクリックします。

    図8-107に、パッケージ階層を開いた状態の結果ページを示します。

    図8-107 生成したクラスが表示されたXMLスキーマ・セレクタ・ページ

    図8-107の説明は次にあります。
    「図8-107 生成したクラスが表示されたXMLスキーマ・セレクタ・ページ」の説明

「JAXBクラス・ディレクトリ」フィールドで指定したディレクトリに、次のファイルが存在していることを確認します。

  • Approve.javaおよびApprove.class

  • ApproveImpl.javaおよびApproveImpl.class

  • ApproveType.javaおよびApproveType.class

  • ApproveTypeImpl.javaおよびApproveTypeImpl.class

  • jaxb.properties

  • ObjectFactory.javaおよびObjectFactory.class

8.10.5 Oracle Business Rulesデータ・モデルへのJAXBクラスのインポート

JAXBクラスを生成した後は、そのクラスをOracle Business Rulesデータ・モデルにインポートできます。 これらのJAXBクラスは、ルールの作成時に使用できるXMLファクトになります。

  1. XMLスキーマ・セレクタ・ページが表示されていない場合は、「定義」タブをクリックし、左側の「XMLFact」をクリックします。次に、XMLファクト・サマリー・ページで「作成」をクリックします。

  2. 「com」の横にあるチェック・ボックスを選択します。

    図8-108 「com」が選択された状態のXMLスキーマ・セレクタ・ページ

    図8-108の説明は次にあります。
    「図8-108 「com」が選択された状態のXMLスキーマ・セレクタ・ページ」の説明

  3. 「インポート」をクリックします。 確認ページが表示されていることを確認します。 インポートしたクラスは太字で表示されます。 左側にも、現在3つのXMLファクトがあることに注意してください。

    図8-109 インポートしたクラスが表示されたXMLスキーマ・セレクタ・ページ

    図8-109の説明は次にあります。
    「図8-109 インポートしたクラスが表示されたXMLスキーマ・セレクタ・ページ」の説明

8.10.6 データ・モデルの変数の定義

データ・モデルに変数を定義すると、後で変更が必要な場合に、その変数の値を編集するのみで対応できます。 SOA Order Bookingアプリケーションの場合は、AUTOMATED_ORDER_LIMITという変数を作成して金額を定義します。この金額以上の注文にはマネージャによる手動の承認が必要であり、この金額未満の注文は自動的に承認されます。

  1. 「定義」タブで、左側の「変数」をクリックします。

  2. 変数サマリー・ページで、「作成」をクリックします。

  3. 変数ページで、次の操作を実行します。

    • 名前: 「AUTOMATED_ORDER_LIMIT」と入力します。

    • エイリアス: 「AUTOMATED_ORDER_LIMIT」と入力します。

    • ファイナル: このオプションを選択します。

    • : 「float」を選択します。

    • : 「1000.00」と入力します。

    図8-110 変数ページ

    図8-110の説明は次にあります。
    「図8-110 変数ページ」の説明

  4. 「OK」をクリックします。 変数サマリー・ページが表示されます。 変数名に接頭辞DM(データ・モデルの略)が付加されていることに注意してください。

    図8-111 変数サマリー・ページ

    図8-111の説明は次にあります。
    「図8-111 変数サマリー・ページ」の説明

8.10.7 ルールセットの作成

ルールセットには、複数のルールが含まれています。 ルールを作成するには、ルールセットが必要です。

  1. 「ルールセット」タブをクリックします。 ルールセット・サマリー・ページが表示されます。

  2. ルールセット・サマリー・ページで、「作成」をクリックします。 ルールセット・ページが表示されます。

  3. ルールセット・ページで、「名前」「ApproveOrderRequired」と入力します。 必要な場合は説明も入力できます。

    図8-112 ルールセット・ページ

    図8-112の説明は次にあります。
    「図8-112 ルールセット・ページ」の説明

  4. 「OK」をクリックします。 ルールセット・サマリー・ページに新規ルールセットが表示されていることを確認します。 新規ルールセットは左側にも表示されます。

    図8-113 ルールセット・サマリー・ページ

    図8-113の説明は次にあります。
    「図8-113 ルールセット・サマリー・ページ」の説明

8.10.8 ルールの作成

「ApproveOrderRequired」ルールセットにルールを定義できる状態になりました。 SOA Order Bookingアプリケーションの場合は、次の3つのルールを作成します。

表8-4 ルール

ルール名 説明

belowLimit

注文の合計価格がAUTOMATED_ORDER_LIMIT変数に設定された値未満の場合、その注文は自動的に承認されます。 第8.10.8.1項「「belowLimit」ルールの作成」を参照してください。

overLimit

注文の合計価格がAUTOMATED_ORDER_LIMIT変数に設定された値以上で、かつ顧客がプラチナ顧客でない場合、その注文はマネージャによる承認が必要です。 第8.10.8.2項「「overLimit」ルールの作成」を参照してください。

platinumMember

顧客がプラチナ顧客の場合、注文は金額に関係なく自動的に承認されます。 第8.10.8.3項「「platinumMember」ルールの作成」を参照してください。


8.10.8.1 「belowLimit」ルールの作成

「belowLimit」ルールは、注文の合計価格が、AUTOMATED_ORDER_LIMIT変数に設定された値未満の場合、その注文は自動的に承認されることを示します。

  1. 「ルールセット」タブをクリックします。

  2. 左側の「ApproveOrderRequired」ルールセットをクリックします。 ルールセット・ページが表示されます。

    図8-114 「ApproveOrderRequired」ルールセットに関するルールセット・ページ

    図8-114の説明は次にあります。
    「図8-114 「ApproveOrderRequired」ルールセットに関するルールセット・ページ」の説明

  3. 「ルール」セクションの「作成」をクリックします。 ルール・ページが表示されます。

  4. ルール・ページで、「名前」「belowLimit」と入力します。 「優先度」については、デフォルト値をそのまま使用します。

  5. 「if」セクションの「新規パターン」をクリックします。 「パターン定義」ウィンドウが表示されます。

  6. 「パターン定義」ウィンドウの「パターンの選択」セクションで、次の操作を実行します。

    • 1番目のフィールドからは何も選択しないでください(空白のままにしてください)。

    • 2番目のフィールドに「approve」と入力します。

    • ドロップダウンから「ApproveType」を選択します。

  7. 「パターンのテストを定義」セクションの「作成」をクリックします。 このセクションで、次の操作を実行します。

    • オペランド: 「approve.price」を選択します。

    • 演算子: 「<」(より小さい)を選択します。

    • オペランド(値またはフィールドを選択): 「フィールド」の下の「AUTOMATED_ORDER_LIMIT」を選択します。 ドロップダウンからFixedを選択します。

    「パターン定義」ウィンドウが次のように表示されていることを確認します。

    図8-115 「belowLimit」ルールに関する「パターン定義」ウィンドウ

    図8-115の説明は次にあります。
    「図8-115 「belowLimit」ルールに関する「パターン定義」ウィンドウ」の説明

  8. 「パターン定義」ウィンドウで、「適用」をクリックします。 「パターン定義」ウィンドウの上部に確認メッセージが表示されていることを確認します。

  9. 「OK」をクリックしてルール・ページに戻ります。このルール・ページは次のように表示されます。

    図8-116 「belowLimit」ルールに関するルール・ページ

    図8-116の説明は次にあります。
    「図8-116 「belowLimit」ルールに関するルール・ページ」の説明

  10. ルール・ページで「適用」をクリックします。 ルール・ページの上部に確認メッセージが表示されていることを確認します。

  11. ルール・ページの「then」セクションで、「新規アクション」をクリックします。 「アクションの追加」ウィンドウが表示されます。

  12. 「アクションの追加」ウィンドウで、次の操作を実行します。

    • アクション・タイプ: 「Assign」を選択します。

    • 名前: 「approve.approvalRequired」を選択します。

    • : 「false」と入力します。

    図8-117 「belowLimit」ルールに関する「アクションの追加」

    図8-117の説明は次にあります。
    「図8-117 「belowLimit」ルールに関する「アクションの追加」」の説明

  13. 「適用」をクリックします。

  14. 「OK」をクリックしてルール・ページに戻ります。このルール・ページは次のように表示されます。

    図8-118 「belowLimit」ルールに関するルール・ページ

    図8-118の説明は次にあります。
    「図8-118 「belowLimit」ルールに関するルール・ページ」の説明

  15. 「適用」をクリックします。

  16. 作業内容を保存します。 ページ上部にある「ディクショナリの保存」リンクをクリックし、ディクショナリの保存ページで「保存」をクリックします。

8.10.8.2 「overLimit」ルールの作成

「overLimit」ルールは、注文の合計価格がAUTOMATED_ORDER_LIMIT変数に設定された値以上で、かつ顧客がプラチナ顧客でない場合、その注文はマネージャによる承認が必要であることを示します。 顧客がプラチナ顧客の場合、注文は金額に関係なく自動的に承認されます。

  1. 「ルールセット」タブをクリックします。

  2. 左側の「ApproveOrderRequired」ルールセットをクリックします。 ルールセット・ページが表示されます。 「belowLimit」ルールはすでに作成されています。

    図8-119 「ApproveOrderRequired」ルールセットに関するルールセット・ページ

    図8-119の説明は次にあります。
    「図8-119 「ApproveOrderRequired」ルールセットに関するルールセット・ページ」の説明

  3. 「ルール」セクションの「作成」をクリックします。 ルール・ページが表示されます。

  4. ルール・ページで、「名前」「overLimit」と入力します。 「優先度」については、デフォルト値をそのまま使用します。

  5. 「if」セクションの「新規パターン」をクリックします。 「パターン定義」ウィンドウが表示されます。

  6. 「パターン定義」ウィンドウの「パターンの選択」セクションで、次の操作を実行します。

    • 1番目のフィールドからは何も選択しないでください(空白のままにしてください)。

    • 2番目のフィールドに「approve」と入力します。

    • ドロップダウンから「ApproveType」を選択します。

  7. 「パターンのテストを定義」セクションの「作成」をクリックします。 このセクションで、次の操作を実行します。

    • オペランド: 「approve.price」を選択します。

    • 演算子: 「>=」(以上)を選択します。

    • オペランド(値またはフィールドを選択): 「フィールド」の下の「AUTOMATED_ORDER_LIMIT」を選択します。 ドロップダウンからFixedを選択します。

    「パターン定義」ウィンドウが次のように表示されていることを確認します。

    図8-120 「overLimit」ルールに関する「パターン定義」(1/2)

    図8-120の説明は次にあります。
    「図8-120 「overLimit」ルールに関する「パターン定義」(1/2)」の説明

  8. 「作成」を再度クリックして、2番目のテストを定義します。 このセクションで、次の操作を実行します。

    • オペランド: 「approve.status」を選択します。

    • 演算子: 「!=」(等しくない)を選択します。

    • オペランド(値またはフィールドを選択): 「値」の下に「"Platinum"」(二重引用符も入力)と入力します。 ドロップダウンからFixedを選択します。

    「パターン定義」ウィンドウが次のように表示されていることを確認します。

    図8-121 「overLimit」ルールに関する「パターン定義」(2/2)

    図8-121の説明は次にあります。
    「図8-121 「overLimit」ルールに関する「パターン定義」(2/2)」の説明

  9. 「パターン定義」ウィンドウで、「適用」をクリックします。 「パターン定義」ウィンドウの上部に確認メッセージが表示されていることを確認します。

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

  11. ルール・ページは次のように表示されます。

    図8-122 「overLimit」ルールに関するルール・ページ

    図8-122の説明は次にあります。
    「図8-122 「overLimit」ルールに関するルール・ページ」の説明

  12. ルール・ページで「適用」をクリックします。 ルール・ページの上部に確認メッセージが表示されていることを確認します。

  13. ルール・ページの「then」セクションで、「新規アクション」をクリックします。 「アクションの追加」ウィンドウが表示されます。

  14. 「アクションの追加」ウィンドウで、次の操作を実行します。

    • アクション・タイプ: 「Assign」を選択します。

    • 名前: 「approve.approvalRequired」を選択します。

    • : 「true」と入力します。

    図8-123 「overLimit」ルールに関する「アクションの追加」

    図8-123の説明は次にあります。
    「図8-123 「overLimit」ルールに関する「アクションの追加」」の説明

  15. 「適用」をクリックします。

  16. 「OK」をクリックしてルール・ページに戻ります。このルール・ページは次のように表示されます。

    図8-124 「overLimit」ルールに関するルール・ページ

    図8-124の説明は次にあります。
    「図8-124 「overLimit」ルールに関するルール・ページ」の説明

  17. 「適用」をクリックします。

  18. 作業内容を保存します。 ページ上部にある「ディクショナリの保存」リンクをクリックし、ディクショナリの保存ページで「保存」をクリックします。

8.10.8.3 「platinumMember」ルールの作成

「platinumMember」ルールは、顧客がプラチナ顧客の場合は、注文が金額に関係なく自動的に承認されることを示します。

  1. 「ルールセット」タブをクリックします。

  2. 左側の「ApproveOrderRequired」ルールセットをクリックします。 ルールセット・ページが表示されます。 「belowLimit」および「overLimit」ルールはすでに作成されています。

    図8-125 「ApproveOrderRequired」ルールセットに関するルールセット・ページ

    図8-125の説明は次にあります。
    「図8-125 「ApproveOrderRequired」ルールセットに関するルールセット・ページ」の説明

  3. 「ルール」セクションの「作成」をクリックします。 ルール・ページが表示されます。

  4. ルール・ページで、「名前」「platinumMember」と入力します。 「優先度」については、デフォルト値をそのまま使用します。

  5. 「if」セクションの「新規パターン」をクリックします。 「パターン定義」ウィンドウが表示されます。

  6. 「パターン定義」ウィンドウの「パターンの選択」セクションで、次の操作を実行します。

    • 1番目のフィールドからは何も選択しないでください(空白のままにしてください)。

    • 2番目のフィールドに「approve」と入力します。

    • ドロップダウンから「ApproveType」を選択します。

  7. 「パターンのテストを定義」セクションの「作成」をクリックします。 このセクションで、次の操作を実行します。

    • オペランド: 「approve.status」を選択します。

    • 演算子: 「==」(等しい)を選択します。

    • オペランド(値またはフィールドを選択): 「値」の下に「"Platinum"」(二重引用符も入力)と入力します。 ドロップダウンからFixedを選択します。

    「パターン定義」ウィンドウが次のように表示されていることを確認します。

    図8-126 「platinumMember」ルールに関する「パターン定義」

    図8-126の説明は次にあります。
    「図8-126 「platinumMember」ルールに関する「パターン定義」」の説明

  8. 「パターン定義」ウィンドウで、「適用」をクリックします。 「パターン定義」ウィンドウの上部に確認メッセージが表示されていることを確認します。

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

  10. ルール・ページは次のように表示されます。

    図8-127 「platinumMember」ルールに関するルール・ページ

    図8-127の説明は次にあります。
    「図8-127 「platinumMember」ルールに関するルール・ページ」の説明

  11. ルール・ページで「適用」をクリックします。 ルール・ページの上部に確認メッセージが表示されていることを確認します。

  12. ルール・ページの「then」セクションで、「新規アクション」をクリックします。 「アクションの追加」ウィンドウが表示されます。

  13. 「アクションの追加」ウィンドウで、次の操作を実行します。

    • アクション・タイプ: 「Assign」を選択します。

    • 名前: 「approve.approvalRequired」を選択します。

    • : 「false」と入力します。

    図8-128 「platinumMember」ルールに関する「アクションの追加」

    図8-128の説明は次にあります。
    「図8-128 「platinumMember」ルールに関する「アクションの追加」」の説明

  14. 「適用」をクリックします。

  15. 「OK」をクリックしてルール・ページに戻ります。このルール・ページは次のように表示されます。

    図8-129 「platinumMember」ルールに関するルール・ページ

    図8-129の説明は次にあります。
    「図8-129 「platinumMember」ルールに関するルール・ページ」の説明

  16. 「適用」をクリックします。

  17. 作業内容を保存します。 ページ上部にある「ディクショナリの保存」リンクをクリックし、ディクショナリの保存ページで「保存」をクリックします。

8.10.9 Rule Authorからのログアウト

ページ上部にある「ログアウト」リンクをクリックします。

ログアウト確認ページで、「保存してログアウト」をクリックします。

8.10.10 JDeveloperマシンへのファイルのコピー

この項は、JDeveloperとOracle Application Serverを別々のマシンで実行している場合のみ適用されます。 両方を同じマシンで実行している場合、ファイルはすでにJDeveloperのマシンに存在しています。

Rule Authorで生成されたファイルを、Oracle Application ServerマシンからJDeveloperマシンにコピーします。

  • c:¥rules¥sample_repositoryファイルをSOADEMO¥SOAOrderBooking¥bpel¥rules¥oracleディレクトリにコピーします。

  • 各ファイルをc:¥rules¥com¥oracle¥demos¥orderbookingからSOADEMO¥SOAOrderBooking¥bpel¥rules¥com¥oracle¥demos¥orderbookingディレクトリにコピーします。

 

8.11 注文に対して手動による承認が必要かどうかの判断(「RequiresManualApproval」decideアクティビティ)

このdecideアクティビティは、注文に対してマネージャの承認が必要かどうかを確認します。 この判断は、Oracle Business Rulesリポジトリのルールを確認した上で実行されます。 このルールは、第8.10項「Oracle Business Rulesの設定」で作成したルールです。

図8-130に、「RequiresManualApproval」decideアクティビティ内のアクティビティを示します。

図8-130 「RequiresManualApproval」decideアクティビティ内のアクティビティ

図8-130の説明は次にあります。
「図8-130 「RequiresManualApproval」decideアクティビティ内のアクティビティ」の説明

8.11.1 「RequiresManualApproval」decideアクティビティ内のアクティビティの作成

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Decide」アイコンをドラッグして、「CreditService」スコープの下にドロップします。 デシジョンの編集ダイアログが表示されます。

  3. デシジョンの編集ダイアログで、「名前」フィールドに「RequiresManualApproval」と入力します。

  4. 「デシジョン・サービス」フィールドで、棒型アイコンをクリックします。 デシジョン・サービス・ウィザードが起動します。

  5. ステップ1のルールセットまたは関数の選択ページで、次の操作を実行します。

    • サービス名: 「DecisionService」(デフォルト名)と入力します。

    • ネームスペース: 「http://www.globalcompany.com/ns/OrderBooking/DecisionService」(デフォルト)と入力します。

    • 起動パターン: 「ルールセットの実行」を選択します。

    • ルールセット: 懐中電灯アイコンをクリックし、「ルール・エクスプローラ」を表示します。 「ルール・エクスプローラ」に「sample_repository」が表示されていることを確認します。 これを開き、次に「OrderBookingRules」(ディクショナリの名前)を開いて、「ApproveOrderRequired」(ルールセットの名前)を選択します。

      図8-131 ルール・エクスプローラ

      図8-131の説明は次にあります。
      「図8-131 ルール・エクスプローラ」の説明

      「ルール・エクスプローラ」で、「OK」をクリックします。

  6. ウィザードのステップ1に戻り、承認に対して「ファクトをアサートしますか。」および「ファクトを監視しますか。」を選択します。

    最上位レベル要素のすべての子をアサートするには、ここをクリックしてください。: 選択しません。

    図8-132 デシジョン・サービス・ウィザード、ステップ1、ルールセットまたは関数の選択

    図8-132の説明は次にあります。
    「図8-132 デシジョン・サービス・ウィザード、ステップ1、ルールセットまたは関数の選択」の説明

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

  7. ウィザードで、ファイルがみつからないことを示す画面が表示された場合は、ウィザードが指示するファイルを必要な場所にコピーします。 この画面は、JDeveloperとOracle Application Serverを異なるマシンで実行し、Oracle Business RulesリポジトリをOracle Application ServerマシンからJDeveloperマシンにコピーした場合に表示されることがあります。

    図8-133 デシジョン・サービス・ウィザード、ステップ2、XSDファイルのコピー

    図8-133の説明は次にあります。
    「図8-133 デシジョン・サービス・ウィザード、ステップ2、XSDファイルのコピー」の説明

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

  8. 終了ページで、「終了」をクリックします。

  9. デシジョンの編集ダイアログに戻って、次の操作を実行します。

    • デシジョン・サービス: 「DecisionService」に自動的に設定されます。

    • 操作: 「ファクトのアサート、ルールセットの実行、結果の取出し」を選択します。

    デシジョンの編集ダイアログは次のように表示されます。

    図8-134 デシジョンの編集ダイアログ

    図8-134の説明は次にあります。
    「図8-134 デシジョンの編集ダイアログ」の説明

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

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

JDeveloperでは、次の項目が作成されます。

  • SOAOrderBooking¥decisionservicesディレクトリ

  • 「DecisionServicePL」パートナ・リンク

  • 「RequiresManualApproval」decideアクティビティ内の次のアクティビティ(アクティビティを表示するには「RequiresManualApproval」を開きます)

    • assignアクティビティ: BPEL_Var_To_Rule_Facts

    • assignアクティビティ: Facts_To_Rule_Service

    • assignアクティビティ: BPEL_Header

    • invokeアクティビティ: Invoke

    • assignアクティビティ: Rule_Service_To_Facts

    • assignアクティビティ: Facts_To_BPEL_Var

    JDeveloperでアクティビティがこの順序で表示されない場合は、SOAOrderBooking.bpelファイルを保存して閉じます。 次に、このファイルを再度開きます。

  • 「RequiresManualApproval」decideアクティビティの変数は、次のとおりです。

    • com_oracle_demos_orderbooking_Approve_i

    • com_oracle_demos_orderbooking_Approve_o

    • dsIn

    • dsOut

    これらの変数を表示するには、「RequiresManualApproval」decideアクティビティの左側にある「(x)」アイコンをクリックします(図8-135)。 「変数」ダイアログが表示されます(図8-136)。

    図8-135 赤い円で囲まれた「RequiresManualApproval」decideアクティビティの「Variable」アイコン

    図8-135の説明は次にあります。
    「図8-135 赤い円で囲まれた「RequiresManualApproval」decideアクティビティの「Variable」アイコン」の説明

    変数が表示されていることを確認します。

    図8-136 「変数」ダイアログ

    図8-136の説明は次にあります。
    「図8-136 「変数」ダイアログ」の説明

8.11.2 注文合計および顧客ステータス情報のコピー(「BPEL_Var_To_Rule_Facts」assignアクティビティ)

デフォルトの「BPEL_Var_To_Rule_Facts」assignアクティビティには、操作が含まれていません。 操作はユーザーが定義する必要があります。 SOA Order Bookingアプリケーションの場合は、次の2つのコピー操作を定義します。

  • 注文合計金額をcom_oracle_demos_orderbooking_Approve_i変数にコピーします。 注文合計金額は、この変数のapprove/price要素にコピーします。

  • 顧客のステータス(findCustomerByIdから取得)をcom_oracle_demos_orderbooking_Approve_i変数にコピーします。 顧客のステータスは、この変数のapprove/status要素にコピーします。

  1. 「BPEL_Var_To_Rule_Facts」アクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  2. 「コピー操作」タブをクリックします。 2つのコピー操作を定義します。

  3. 1番目のコピー操作では、「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    1. 「To」側で、「タイプ」「式」に設定します。

    2. 「式」ボックスの上にある「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。 この式ビルダー使用して式を作成します。

    3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns4:PurchaseOrder」「ns4:OrderInfo」「ns4:OrderPrice」の順に選択します。

      「コンテンツのプレビュー」ボックスに、bpws:getVariableData('inputVariable', 'payload', '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:OrderInfo/ns4:OrderPrice')が表示されていることを確認します。

      接頭辞ns4は、「http://www.globalcompany.com/ns/order」ネームスペースにマップされます。 この接頭辞はシステムによって異なる場合があります。 接頭辞を確認するには、必要に応じて、ソース・ビューでSOAOrderBooking.bpelファイルの先頭までスクロールできます。

    4. 「式に挿入」をクリックします。 「式」ボックスに、関数が3つのパラメータとともに表示さていることを確認します。

    5. 「式」ボックスで、bpws:getVariableData関数全体をnumber()関数でラップします。 「式」ボックスの値が次のように表示されていることを確認します。

      number(bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/
      ns4:OrderInfo/ns4:OrderPrice'))
      
      

      図8-137 「式ビルダー」ダイアログ

      図8-137の説明は次にあります。
      「図8-137 「式ビルダー」ダイアログ」の説明

    6. 「式ビルダー」ダイアログで、「OK」をクリックします。

    7. 「From」側で、「タイプ」「Variable」に設定します。

    8. 「変数」「プロセス」「Scope - RequiresManualApproval」「変数」「com_oracle_demos_orderbooking_Approve_i」「ns13:approve」「ns13:price」の順に選択します。

      図8-138 「コピー操作の作成」ダイアログ

      図8-138の説明は次にあります。
      「図8-138 「コピー操作の作成」ダイアログ」の説明

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

  4. 「作成」ドロップダウンから「コピー操作」を再度選択して、2番目のコピー操作を作成します。

    1. 「To」側で、「タイプ」「式」に設定します。

    2. 「式」ボックスの上にある「XPath式ビルダー」アイコンをクリックし、「式ビルダー」ダイアログを表示します。 この式ビルダー使用して式を作成します。

    3. 「式ビルダー」ダイアログの「BPEL変数」ボックスで、「変数」「プロセス」「変数」「customerServiceResponse」「parameters」「ns8:findCustomerByIdResponse」「ns8:return」「ns8:status」の順に選択します。

      「コンテンツのプレビュー」ボックスに、bpws:getVariableData('customerServiceResponse','parameters','/ns8:findCustomerByIdResponse/ns8:return/ns8:status')が表示されていることを確認します。

      接頭辞ns8は、「http://www.globalcompany.com/ns/customer」ネームスペースにマップされます。 この接頭辞はシステムによって異なる場合があります。 接頭辞を確認するには、必要に応じて、ソース・ビューでSOAOrderBooking.bpelファイルの先頭までスクロールできます。

    4. 「式に挿入」をクリックします。 「式」ボックスに、関数が3つのパラメータとともに表示さていることを確認します。

    5. 「式」ボックスで、bpws:getVariableData関数全体をstring()関数でラップします。 「式」ボックスの値が次のように表示されていることを確認します。

      string(bpws:getVariableData('customerServiceResponse','parameters',
      '/ns8:findCustomerByIdResponse/ns8:return/ns8:status'))
      
      

      図8-139 「式ビルダー」ダイアログ

      図8-139の説明は次にあります。
      「図8-139 「式ビルダー」ダイアログ」の説明

    6. 「式ビルダー」ダイアログで、「OK」をクリックします。

    7. 「From」側で、「タイプ」「Variable」に設定します。

    8. 「変数」「プロセス」「Scope - RequiresManualApproval」「変数」「com_oracle_demos_orderbooking_Approve_i」「ns13:approve」「ns13:status」の順に選択します。

      図8-140 「コピー操作の作成」ダイアログ

      図8-140の説明は次にあります。
      「図8-140 「コピー操作の作成」ダイアログ」の説明

    9. 「コピー操作の作成」ダイアログで、「OK」をクリックします。

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.11.3 dsIn変数へのConversationIdのコピー(「BPEL_Header」assignアクティビティ)

デフォルトの「BPEL_Header」assignアクティビティには、7つのコピー操作が含まれています。 別のコピー操作を追加して、対話IDをdsIn変数にコピーします。

  1. 「BPEL_Header」アクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  2. 「コピー操作」タブをクリックします。

  3. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    1. 「From」側で、「タイプ」「式」に設定します。

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

      ora:getConversationId()
      
      
    3. 「To」側で、「タイプ」「Variable」に設定します。

    4. 「変数」「プロセス」「Scope - RequiresManualApproval」「変数」「dsIn」「payload」「ns12:assertExecuteWatchStateful」「ns12:bpelInstance」「ns14:conversationId」の順に選択します。

      図8-141 「コピー操作の作成」ダイアログ

      図8-141の説明は次にあります。
      「図8-141 「コピー操作の作成」ダイアログ」の説明

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

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.11.4 「requiresApproval」プロセス変数の作成

requiresApproval変数を「SOAOrderBooking」スコープに作成します。 この変数は、このBPELフロー内のすべてのアクティビティがアクセスできるように、このレベルで作成されます。

この変数は、後続の第8.12.2項「<case>に対する条件の設定」で作成するスイッチで使用します。

  1. ページの上部にスクロールし、「SOAOrderBooking」スコープをダブルクリックします。 横に表示されている「SOAOrderBooking」テキストをダブルクリックすることもできます。 「Process」ダイアログが表示されます。

  2. 「Process」ダイアログの「変数」タブで、「作成」をクリックします。 「変数の作成」ダイアログが表示されます。

  3. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「requiresApproval」と入力します。

    • タイプ: 「単純型」を選択し、懐中電灯アイコンをクリックします。 「タイプの選択」ダイアログが表示されます。

      「タイプの選択」で「boolean」を選択し、「OK」をクリックします。

    「変数の作成」ダイアログは次のように表示されます。

    図8-142 「requiresApproval」プロセス変数に関する「変数の作成」ダイアログ

    図8-142の説明は次にあります。
    「図8-142 「requiresApproval」プロセス変数に関する「変数の作成」ダイアログ」の説明

  4. 「変数の作成」ダイアログで、「OK」をクリックします。 「Process」ダイアログにrequiresApproval変数が表示されます。

    図8-143 requiresApproval変数が表示された「Process」ダイアログ

    図8-143の説明は次にあります。
    「図8-143 requiresApproval変数が表示された「Process」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.11.5 requiresApproval変数へのデシジョン・サービスの結果のコピー(「Facts_To_BPEL_Var」assignアクティビティ)

デフォルトの「Facts_To_BPEL_Var」assignアクティビティには、操作が含まれていません。 コピー操作を作成して、「DecisionService」パートナ・リンクから戻された結果をrequiresApprovalプロセス変数にコピーします。

  1. 「Facts_To_BPEL_Var」assignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  2. 「コピー操作」タブをクリックします。

  3. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

  4. 「From」側で、「タイプ」「Variable」に設定します。

  5. 「変数」「プロセス」「Scope - RequiresManualApproval」「変数」「dsOut」「payload」「ns12:assertExecuteWatchStatefulDecision」「ns12:resultList」「ns13:approve」「ns13:approvalRequired」の順に選択します。

  6. 「To」側で、「タイプ」「Variable」に設定します。

  7. 「変数」「プロセス」「変数」「requiresApproval」の順に選択します。

    図8-144 「コピー操作の作成」ダイアログ

    図8-144の説明は次にあります。
    「図8-144 「コピー操作の作成」ダイアログ」の説明

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

  9. 「Assign」ダイアログに、コピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-145 「Assign」ダイアログ

    図8-145の説明は次にあります。
    「図8-145 「Assign」ダイアログ」の説明

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.11.6 「RequiresManualApproval」decideアクティビティの最小化

「RequiresManualApproval」decideアクティビティを最小化するには、[-]アイコンをクリックします。

 

8.12 手動による承認が必要な注文を処理するためのフォームの設定(「requiresApproval」スイッチ)

手動による承認が必要な注文の場合、「requiresApproval」スイッチは、制御をhuman taskアクティビティに渡します。 これによって、マネージャは注文を承認または却下できます。

「requiresApproval」は<case>ブランチのみで構成されます。 <otherwise>ブランチはありません。 手動による承認が不要な注文の場合、このスイッチは適用されません。

<case>ブランチには、1つのhuman taskアクティビティと、もう1つのswitchアクティビティが含まれます(図8-146)。

図8-146 human taskアクティビティとswitchアクティビティが含まれた「requiresApproval」スイッチ(最小化ビュー)

図8-146の説明は次にあります。
「図8-146 human taskアクティビティとswitchアクティビティが含まれた「requiresApproval」スイッチ(最小化ビュー)」の説明

図8-147に、開いた状態のhuman taskアクティビティを示します。

図8-148に、開いた状態のswitchアクティビティを示します。

図8-147 switchアクティビティ、および開いた状態のhuman taskアクティビティが表示されている<case>ブランチ

図8-147の説明は次にあります。
「図8-147 switchアクティビティ、および開いた状態のhuman taskアクティビティが表示されている<case>ブランチ」の説明

図8-148 開いた状態の2番目のswitchアクティビティ

図8-148の説明は次にあります。
「図8-148 開いた状態の2番目のswitchアクティビティ」の説明

8.12.1 スイッチの作成

  1. コンポーネント・パレットで、ドロップダウン・リストから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Switch」アイコンをドラッグして、「RequiresManualApproval」decideアクティビティの下にドロップします。

  3. 新規のswitchアクティビティをダブルクリックし、「Switch」ダイアログで名前を「requiresApproval」に設定します。 「OK」をクリックします。

  4. switchアクティビティを開きます。

  5. <otherwise>ボックスを削除します。 このスイッチの場合、処理する必要があるのは、注文に対して手動による承認が必要なケースのみです。

8.12.2 <case>に対する条件の設定

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

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

  3. 「式ビルダー」ダイアログの「関数」ボックスで、「getVariableData」を選択します。

    「コンテンツのプレビュー」ボックスに、bpws:getVariableData()が表示されていることを確認します。

  4. 最初のパラメータを関数に追加します。「BPEL変数」ボックスで、「変数」「プロセス」「変数」「requiresApproval」の順に選択します。

    requiresApprovalは、第8.11.4項「「requiresApproval」プロセス変数の作成」で定義したプロセス変数です。

    「コンテンツのプレビュー」ボックスに、bpws:getVariableData('requiresApproval')が表示されていることを確認します。

  5. 「式に挿入」をクリックします。 「式」ボックスに、関数が1つのパラメータとともに表示されていることを確認します。

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

    bpws:getVariableData('requiresApproval')='true'
    
    
  7. 「式」ボックスで、bpws:getVariableData関数全体をstring()関数でラップします。 「式」ボックスの値が次のように表示されていることを確認します。

    string(bpws:getVariableData('requiresApproval')) = 'true'
    
    

    図8-149 <case>に対する完全な式が表示された「式ビルダー」ダイアログ

    図8-149の説明は次にあります。
    「図8-149 <case>に対する完全な式が表示された「式ビルダー」ダイアログ」の説明

  8. 「式ビルダー」ダイアログで、「OK」をクリックします。 「Switch Case」ダイアログに式が表示されます。

    図8-150 「Switch Case」ダイアログ

    図8-150の説明は次にあります。
    「図8-150 「Switch Case」ダイアログ」の説明

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

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.12.3 <case>ブランチへのシーケンスの作成

<case>ブランチには、human taskアクティビティとswitchアクティビティの2つのアクティビティが含まれます。 このため、sequenceアクティビティをこの2つのアクティビティのコンテナにする必要があります。

コンポーネント・パレットから「Sequence」アイコンをドラッグして、<case>ボックスにドロップします。 <case>ボックスは次のように表示されます。

図8-151 <case>ブランチのsequenceアクティビティ

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

8.12.4 ヒューマン・タスクの作成

human taskアクティビティは、<case>ブランチに作成します。

  1. コンポーネント・パレットで、ドロップダウン・リストから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Human Task」アイコンをドラッグして、<case>ボックスの「シーケンス」領域にドロップします。 「ヒューマン・タスクの追加」ダイアログが表示されます。

  3. 「ヒューマン・タスクの追加」ダイアログで、「タスク定義の作成」アイコン(「タスク定義」フィールドの2番目のアイコン)をクリックします。 別の「ヒューマン・タスクの追加」ダイアログが表示されます。

  4. 2番目の「ヒューマン・タスクの追加」ダイアログで、「ヒューマン・タスク名」「ApproveOrder」と入力します。 これによって、場所がSOADEMO¥SOAOrderBooking¥bpel¥ApproveOrder¥ApproveOrder.taskに設定されます。

    図8-152 「ヒューマン・タスクの追加」ダイアログ

    図8-152の説明は次にあります。
    「図8-152 「ヒューマン・タスクの追加」ダイアログ」の説明

  5. 「OK」をクリックします。 JDeveloperで「ヒューマン・タスクの追加」ダイアログを閉じると、ApproveOrder.taskページが表示されます。

  6. ApproveOrder.taskページでは、「タイトル」を空のままにします。

  7. 「パラメータ」で、次の操作を実行します。

    1. 緑の「+」アイコンをクリックし、「タスク・パラメータの追加」ダイアログを表示します。

    2. 「タスク・パラメータの追加」ダイアログで、「要素」を選択し、懐中電灯アイコンをクリックして「タイプの選択」ダイアログを表示します。 「タイプの選択」ダイアログで、「タイプ・エクスプローラ」「プロジェクトのスキーマ・ファイル」「OrderBookingPO.xsd」「PurchaseOrder」の順に選択します。

      図8-153 ApproveOrder.taskパラメータに関する「タイプの選択」ダイアログ

      図8-153の説明は次にあります。
      「図8-153 ApproveOrder.taskパラメータに関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」ダイアログで、「OK」をクリックします。 「タスク・パラメータの追加」ダイアログは次のように表示されます。

      図8-154 「タスク・パラメータの追加」ダイアログ

      図8-154の説明は次にあります。
      「図8-154 「タスク・パラメータの追加」ダイアログ」の説明

    3. 「タスク・パラメータの追加」ダイアログで、「OK」をクリックします。

  8. 「割当ておよびルーティング・ポリシー」で、次の操作を実行します。

    1. 緑の「+」アイコンをクリックします。 「参加者タイプの追加」ダイアログが表示されます。

      図8-155 「参加者タイプの追加」ダイアログ

      図8-155の説明は次にあります。
      「図8-155 「参加者タイプの追加」ダイアログ」の説明

    2. 「タイプ」に対して、「単一の承認者」を選択します。

    3. 「ラベル」に対して、「Manager」と入力します。

    4. 「名前別」を選択し、「グループID」の懐中電灯アイコンをクリックします。これは、承認の権限をグループに付与するために実行します。 「アイデンティティ・ルックアップ・ダイアログ」が表示されます。

    5. 「アイデンティティ・ルックアップ・ダイアログ」で、「ルックアップ」をクリックします。 「グループの検索」ボックスにグループ名のリストが表示されます。

    6. 「グループの検索」ボックスで「Supervisor」を選択し、「選択」をクリックします。 グループ名が「選択したグループ」ボックスに移動します。

      図8-156 選択した「Supervisor」が「選択したグループ」ボックスに移動した状態のアイデンティティ・ルックアップ・ダイアログ

      図8-156の説明は次にあります。
      「図8-156 選択した「Supervisor」が「選択したグループ」ボックスに移動した状態のアイデンティティ・ルックアップ・ダイアログ」の説明

    7. 「アイデンティティ・ルックアップ・ダイアログ」で、「OK」をクリックします。 「Supervisor」が「参加者タイプの追加」ダイアログに表示されます(図8-155)。

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

    ApproveOrder.taskページは次のように表示されます。

    図8-157 完了したApproveOrder.taskページ

    図8-157の説明は次にあります。
    「図8-157 完了したApproveOrder.taskページ」の説明

  10. 「ファイル」→「保存」の順に選択し、ApproveOrder.taskを保存します。

  11. ApproveOrder.taskを閉じます(ファイル」→「閉じる」の順に選択します)。

  12. SOAOrderBooking.bpelメイン・ページに戻り、「ApproveOrder_1」human taskアクティビティをダブルクリックします。 「Human Task」ダイアログが表示されます。

  13. 「タスクのタイトル」に、「Approve Order」と入力します。

  14. 「タスク・パラメータ」列には「PurchaseOrder」が表示されますが、「BPEL変数」列は空白です。 「BPEL変数」列の懐中電灯アイコンをクリックします。

  15. 「タスク・パラメータ」ダイアログで、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」の順に選択します。

    図8-158 「タスク・パラメータ」ダイアログ

    図8-158の説明は次にあります。
    「図8-158 「タスク・パラメータ」ダイアログ」の説明

    「タスク・パラメータ」ダイアログで、「OK」をクリックします。

  16. 「Human Task」ダイアログは次のように表示されます。

    図8-159 完了した「Human Task」ダイアログ

    図8-159の説明は次にあります。
    「図8-159 完了した「Human Task」ダイアログ」の説明

    「Human Task」ダイアログで、「OK」をクリックします。

JDeveloperでは、SOADEMO¥SOAOrderBooking¥bpel¥ApproveOrderディレクトリが作成され、このディレクトリ内に次のファイルが作成されます。

  • ApproveOrder.task

  • ApproveOrder_payload.xsd

  • WorkflowTask.xsd

8.12.5 ワークリスト・アプリケーションに対するフォームの作成

マネージャは、承認待ちの注文を確認するときに、ワークリスト・アプリケーションにログインします。 このアプリケーションには、Oracle Application Serverが実行されているマシンの「スタート」メニューからアクセスできます。「スタート」「プログラム」「Oracle - ORACLE_HOME_NAME」「Oracle BPEL Process Manager」「Worklist Application」の順に選択します。

ワークリスト・アプリケーションで使用できるフォームを作成する必要があります。 このフォームを使用すると、ワークリスト・アプリケーションでは、SOA Order Bookingアプリケーション固有のデータを表示できます。

このフォームを作成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、「ApproveOrder」フォルダ(「SOAOrderBooking」「インテグレーション・コンテンツ」の下にある)を右クリックし、「単純タスク・フォームの自動生成」を選択します。

  2. JDeveloperのエディタに、payload-body.jspファイルが表示されます。 このファイルは変更せずに閉じることができます。

JDeveloperでは、次のディレクトリとファイルが作成されます。

  • SOADEMO¥SOAOrderBooking¥bpel¥ApproveOrder¥ApproveOrder_Display.tform

  • SOADEMO¥SOAOrderBooking¥public_html¥

8.12.6 残りのhuman taskアクティビティに対するデフォルト設定の使用

「ApproveOrder_1」human taskアクティビティを開いて、このスコープに含まれるアクティビティを確認します(図8-147を参照)。 これらのアクティビティには、デフォルト設定をそのまま使用できます。

8.13 マネージャのレスポンスの処理(「requiresApproval」スイッチ)

JDeveloperでは、human taskアクティビティの後にスイッチが自動的に作成されます。 このスイッチを使用すると、マネージャが注文を承認したか、却下したか、または注文が期限切れかどうかに応じて実行するアクションを定義できます。

このスイッチは、次のケースを処理します。

8.13.1 却下ケースの処理

マネージャが注文を却下した場合は、次の2つのアクティビティを実行します。

  • ステータス品目を、注文が却下されたことを示す文字列に設定します。

  • throwアクティビティを作成します。

8.13.1.1 注文ステータスの設定(assignアクティビティ)

  1. switchアクティビティを開きます。

  2. <case Task outcome is REJECT>について、デフォルトの「CopyPayloadFromTask」assignアクティビティを削除します。 これで、REJECTケースに対するアクティビティがなくなります。

  3. コンポーネント・パレットで、ドロップダウン・リストから「Process Activities」を選択します。

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

  5. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  6. 「Assign」ダイアログで、「コピー操作」タブをクリックします。

  7. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

  8. 「From」側で、「タイプ」「式」に設定し、「式」ボックスに次の行を入力します。

    string('Order has been rejected by the manager')
    
    
  9. 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「OrderBookingFault」「payload」「client:SOAOrderBookingProcessFault」「client:status」の順に選択します。

    図8-160 REJECTケースに関する「コピー操作の作成」ダイアログ

    図8-160の説明は次にあります。
    「図8-160 REJECTケースに関する「コピー操作の作成」ダイアログ」の説明

  10. 「コピー操作の作成」ダイアログで、「OK」をクリックします。 「Assign」ダイアログに、コピー操作が表示されていることを確認します。

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

    図8-161 REJECTケースに対するコピー操作が表示された「Assign」ダイアログ

    図8-161の説明は次にあります。
    「図8-161 REJECTケースに対するコピー操作が表示された「Assign」ダイアログ」の説明

8.13.1.2 throwアクティビティの作成

フローの続行を停止するには、throwアクティビティを作成します。

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

  2. 新規のthrowアクティビティをダブルクリックして、「Throw」ダイアログを表示します。

  3. 「Throw」ダイアログで、次の操作を実行します。

    • 名前: 「Throw_1」と入力します(デフォルト名をそのまま使用)。

    • ネームスペースURI: 「http://www.globalcompany.com/ns/OrderBooking」と入力します。 これは手動で入力する必要があります。

    • ローカル・パート: 「OrderBookingFault」と入力します。 これは手動で入力する必要があります。

    • フォルト変数: 懐中電灯アイコンをクリックして「OrderBookingFault」を選択します。

    図8-162 REJECTケースに関する「Throw」ダイアログ

    図8-162の説明は次にあります。
    「図8-162 REJECTケースに関する「Throw」ダイアログ」の説明

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

8.13.2 承認ケースの処理

承認ケースで、デフォルトのassignアクティビティを削除し、「Empty」アイコンをコンポーネント・パレットからAPPROVEケースまでドラッグして、空のアクティビティを作成します。 ここでは処理が発生しないため、必要なのは空のアクティビティのみです。 フローは次のステップに進む必要があります。

8.13.3 期限切れケースの処理

期限切れ、失効、取消しまたはエラーの各ケースは、承認ケースと同じ方法で処理します。つまり、デフォルトのassignアクティビティを削除して空のアクティビティに置き換えます。 SOA Order Bookingアプリケーションでは注文に期限切れはなく、ユーザーがこのケースを処理することがないため、この方法を使用しても構いません。

8.13.4 各ケースに対するデフォルト設定の使用

JDeveloperでは、スイッチ内の各ブランチの条件も設定されます。 条件を確認するには、各ブランチのタイトル・バーをダブルクリックします。 条件を変更する必要はありません。

8.13.5 「requiresApproval」スイッチの最小化

「requiresApproval」スイッチを最小化するには、[-]アイコンをクリックします。

8.14 サプライヤの選択(「SelectSupplier」スコープ)

このスコープはSelect ManufacturerとRapid Serviceの2つのサプライヤに注文情報を送信し、サプライヤはその注文に対する見積りを戻します。 次に、このスコープは、低い見積り金額を提示したサプライヤを選択します。

図8-163に、高レベルでの「SelectSupplier」スコープのアクティビティを示します。 このスコープでは、flowアクティビティを使用して、注文情報を2つのサプライヤにパラレルに送信します。 flowアクティビティには、各サプライヤに1つずつ、2つのスコープが含まれます。 サプライヤが見積りを戻すと、switchアクティビティによって低い金額の見積りが選択されます。

図8-163 高レベルで表示された「SelectSupplier」スコープに対するアクティビティ

図8-163の説明は次にあります。
「図8-163 高レベルで表示された「SelectSupplier」スコープに対するアクティビティ」の説明

図8-164に、flowアクティビティ内のアクティビティ、およびflowアクティビティの後のswitchアクティビティを示します。

Select Manufacturerに対するスコープにはreceiveアクティビティが含まれます。このアクティビティはRapid Serviceに対するスコープには必要ありません。 これは、Select Manufacturerは非同期に起動するためです。 receiveアクティビティは、Select Manufacturerが見積りを戻したときにその見積りを受信するために必要です。 Rapid Serviceは同期に起動します。invokeアクティビティは、リクエストを起動し、レスポンス(つまり、見積り値)を受信します。

switchアクティビティには2つのブランチがあります。<case>ブランチはSelectManufacturerが低い金額の見積りを戻したケースを、<otherwise>ブランチはRapid Serviceが低い金額の見積りを戻したケースを処理します。

図8-164 flowアクティビティとswitchアクティビティが表示された「SelectSupplier」スコープ

図8-164の説明は次にあります。
「図8-164 flowアクティビティとswitchアクティビティが表示された「SelectSupplier」スコープ」の説明

スコープを作成する前に、次の操作を実行する必要があります。

8.14.1 「SelectManufacturer」パートナ・リンクの作成

  1. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  2. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、「サービス」スイムレーンにドロップします。

  3. 「パートナ・リンクの作成」ダイアログで、次の操作を実行します。

    • 名前: 「SelectService」と入力します。

    • WSDLファイル: 「サービス・エクスプローラ」(懐中電灯)アイコン(左から2番目)をクリックします。 「サービス・エクスプローラ」ダイアログが表示されます。

      「サービス・エクスプローラ」ダイアログで、「サービス・エクスプローラ」BPELサービス「soaDemoIntgServer」「processes」「default」「SelectManufacturer」の順に選択します。

      soaDemoIntgServerは、Select Manufacturerをデプロイした統合サーバーへの接続を参照します。

      図8-165 「SelectService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ

      図8-165の説明は次にあります。
      「図8-165 「SelectService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ」の説明

      「サービス・エクスプローラ」ダイアログで、「OK」をクリックします。

    • パートナ・リンク・タイプ: 「SelectService_PL」を選択します(自動的に表示されます)。

    • パートナ・ロール: 「SelectServiceProvider」を選択します。

    • マイ・ロール: 「SelectServiceRequester」を選択します。

    「パートナ・リンクの作成」ダイアログが次のように表示されていることを確認します。

    図8-166 「SelectService」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ

    図8-166の説明は次にあります。
    「図8-166 「SelectService」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.14.2 「RapidService」パートナ・リンクの作成

  1. 次のファイルを、soademo_101310_prod.zipファイルからSOAOrderBooking¥bpelディレクトリにコピーします。

    • RapidService.wsdl

    WSDLファイルは、soademo_101310_prod.zipファイルのSOAOrderBooking¥bpelディレクトリにあります。

  2. RapidService.wsdlファイルでURLを確認します。

    1. 「ファイル」→「開く」を順に選択してRapidService.wsdlファイルを開きます。

    2. エディタの下部にある「ソース」タブをクリックし、ファイル内の行を表示します。

    3. ファイル内のhttp://localhost:8888参照は、Oracle Application ServerがJDeveloperと同じマシン上で実行され、そのOracle Application Serverがポート8888でリクエストをリスニングしていることを前提としています。

      必要に応じて、localhostをOracle Application Serverを実行しているマシンの名前に変更し、8888をOracle Application Serverインストールで使用する正しいポートに変更します(例: mypc.mydomain.com:8889)。

    4. ファイルを編集した場合は、そのファイルを保存して閉じます。

  3. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、パートナ・リンク領域にドロップします。

  4. 「パートナ・リンクの作成」ダイアログで、次の操作を実行します。

    • 名前: 「RapidService」と入力します。

    • WSDLファイル: 「サービス・エクスプローラ」アイコン(左から2番目)をクリックし、「サービス・エクスプローラ」ダイアログを表示します。 「サービス・エクスプローラ」ダイアログで「プロジェクトのWSDLファイル」を開き、「RapidService.wsdl」を選択します。

      図8-167 「RapidService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ

      図8-167の説明は次にあります。
      「図8-167 「RapidService」パートナ・リンクに関する「サービス・エクスプローラ」ダイアログ」の説明

      「サービス・エクスプローラ」で、「OK」をクリックします。

    • パートナ・リンク・タイプ: 「RapidQuote_PL」を選択します(自動的に表示されます)。

    • パートナ・ロール: 「RapidQuote_Role」を選択します。

    • マイ・ロール: 空白のままにします。

    「パートナ・リンクの作成」ダイアログが次のように表示されていることを確認します。

    図8-168 RapidServiceに関する「パートナ・リンクの作成」ダイアログ

    図8-168の説明は次にあります。
    「図8-168 RapidServiceに関する「パートナ・リンクの作成」ダイアログ」の説明

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

  6. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.14.3 「SelectSupplier」スコープの作成

  1. コンポーネント・パレットで、ドロップダウン・リストから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして「requiresApproval」switchアクティビティの下にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「SelectSupplier」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには2つの変数を作成する必要があります。

  6. 「変数」タブで「作成」をクリックし、最初の変数を作成します。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「selectManufacturerResponse」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「SelectService」「SelectManufacturer」「メッセージ・タイプ」「RequestQuote_processRequestQuoteResponse」の順に選択します。

      図8-169 selectManufacturerResponse変数に関する「タイプの選択」ダイアログ

      図8-169の説明は次にあります。
      「図8-169 selectManufacturerResponse変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/selectservice}RequestQuote_processRequestQuoteResponse」に設定されます。

    図8-170 selectManufacturerResponse変数に関する「変数の作成」ダイアログ

    図8-170の説明は次にあります。
    「図8-170 selectManufacturerResponse変数に関する「変数の作成」ダイアログ」の説明

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

  10. 「変数」タブで「作成」を再度クリックし、2番目の変数を作成します。

  11. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「rapidManufacturerResponse」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「RapidService」「RapidService.wsdl」「インポートしたWSDL」「RequestQuoteSoapHttpPort」「メッセージ・タイプ」「RequestQuotePortType_POItemsQuoteResponse」の順に選択します。

      図8-171 rapidManufacturerResponse変数に関する「タイプの選択」ダイアログ

      図8-171の説明は次にあります。
      「図8-171 rapidManufacturerResponse変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  12. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/rapidservice}RequestQuotePortType_POItemsQuoteResponse」に設定されます。

    図8-172 rapidManufacturerResponse変数に関する「変数の作成」ダイアログ

    図8-172の説明は次にあります。
    「図8-172 rapidManufacturerResponse変数に関する「変数の作成」ダイアログ」の説明

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

  14. 「Scope」ダイアログの「変数」タブに、変数が表示されます。

    図8-173 「SelectSupplier」スコープに関する「Scope」ダイアログ

    図8-173の説明は次にあります。
    「図8-173 「SelectSupplier」スコープに関する「Scope」ダイアログ」の説明

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

8.14.4 flowアクティビティの作成

flowアクティビティは、リクエストを複数のサプライヤに同時に送信するために使用します。 このアプリケーションでは、リクエストがSelect ManufacturerとRapid Serviceの2つのサプライヤに送信されます。

  1. 新規の「SelectSupplier」スコープを開きます。

  2. コンポーネント・パレットから「Flow」アイコンをドラッグして、新規の「SelectSupplier」スコープにドロップします。

  3. 新規のflowインスタンスをダブルクリックし、「Flow」ダイアログで名前を「CallManufacturers」に設定します。

8.14.5 Select Manufacturerに対するアクティビティの設定

Select Manufacturerから見積りを取得するには、次のアクティビティを作成します。

8.14.5.1 SelectManufacturerに対するスコープの作成

  1. 「CallManufacturers」flowアクティビティを開きます。 このflowアクティビティには、アクティビティを定義できる2つのパラレル領域があります。

    図8-174 SOAOrderBooking.bpelページ内のflowアクティビティ

    図8-174の説明は次にあります。
    「図8-174 SOAOrderBooking.bpelページ内のflowアクティビティ」の説明

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、flowアクティビティの左側にドロップします。 flowアクティビティの左側では、Select Manufacturerとの間のリクエストとレスポンスが処理されます。

  3. 新規のscopeインスタンスをダブルクリックします。 「Scope」ダイアログが表示されます。

  4. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「GetSelectMfrQuote」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには1つの変数を作成する必要があります。

  6. 「変数」タブで、「作成」をクリックします。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「manufacturerRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「SelectService」「SelectManufacturer」「メッセージ・タイプ」「RequestQuote_processRequestQuote」の順に選択します。

      図8-175 manufacturerRequest変数に関する「タイプの選択」ダイアログ

      図8-175の説明は次にあります。
      「図8-175 manufacturerRequest変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/selectservice}RequestQuote_processRequestQuote」に設定されます。

    図8-176 manufacturerRequest変数に関する「変数の作成」ダイアログ

    図8-176の説明は次にあります。
    「図8-176 manufacturerRequest変数に関する「変数の作成」ダイアログ」の説明

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

  10. 「Scope」ダイアログの「変数」タブに、manufacturerRequest変数が表示されます。

    図8-177 「GetSelectMfrQuote」スコープに関する「Scope」ダイアログ

    図8-177の説明は次にあります。
    「図8-177 「GetSelectMfrQuote」スコープに関する「Scope」ダイアログ」の説明

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

8.14.5.2 transformアクティビティの作成(「TransformSelectRequest」transformアクティビティ)

  1. 「GetSelectMfrQuote」スコープを開きます。

  2. コンポーネント・パレットから「Transform」アイコンをドラッグして、「GetSelectMfrQuote」スコープにドロップします。

  3. transformアクティビティをダブルクリックして、「Transform」ダイアログを表示します。

  4. 「一般」タブで、名前を「TransformSelectRequest」に設定します。

  5. 「トランスフォーメーション」タブで、「ソース変数」「inputVariable」に、「ソース・パート」「payload」に設定します。

    「ターゲット変数」「manufacturerRequest」に、「ターゲット・パート」「parameters」に設定します。

  6. 「マッパー・ファイル」「SelectTransformation.xsl」に設定します。 このファイルはまだ存在していないため、データ・マッパーを使用して生成します。

  7. 「マッピングの作成」アイコン(左から2番目)をクリックします。 データ・マッパーが表示され、これを使用してSelectTransformation.xslファイルを生成します。

  8. データ・マッパーの「ソース」(左)側で、「po:PurchaseOrder」「po:OrderItems」「po:Item」の順に開きます。

  9. 「ターゲット」(右)側で、「tns:param0」を開きます。

  10. 「po:ProductName」「tns:itemId」までドラッグします。

  11. 「po:Quantity」「tns:quantity」までドラッグします。 データ・マッパーが次のように表示されていることを確認します。

    図8-178 Select Manufacturer用のデータ・マッパー(未完了の状態)

    図8-178の説明は次にあります。
    「図8-178 Select Manufacturer用のデータ・マッパー(未完了の状態)」の説明

  12. データ・マッパーのコンポーネント・パレットで、ドロップダウンからXSLT Constructsを選択します。

  13. コンポーネント・パレットから「for-each」アイコンをドラッグして、ターゲット側の「tns:param0」にドロップします。 for-each品目が「tns:processRequestQuoteElement」「tns:param0」の間に表示されます。

  14. 「po:Item」を、ターゲット側の「for-each」品目までドラッグします。 データ・マッパーが表示されていることを確認します。

    図8-179 Select Manufacturer用のデータ・マッパー

    図8-179の説明は次にあります。
    「図8-179 Select Manufacturer用のデータ・マッパー」の説明

  15. 「ファイル」→「保存」の順に選択し、SelectTransformation.xslを保存します。 このファイルは、SOAOrderBooking¥bpelディレクトリ内に作成されます。

  16. 「ファイル」→「閉じる」の順に選択し、SelectTransformation.xsl用のデータ・マッパーを閉じます。

  17. 「ファイル」→「保存」の順に選択し、SOAOrderBooking.bpelを保存します。

8.14.5.3 invokeアクティビティの作成

このinvokeアクティビティは、「SelectManufacturer」パートナ・リンクを起動します。

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

  2. 次のいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「SelectService」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、invokeアクティビティの名前を「InvokeSelectManufacturer」に設定します。

  4. 「パートナ・リンク」フィールドが「SelectService」に設定されていない場合は、懐中電灯アイコンをクリックします。 「パートナ・リンクの選択」で、「SelectService」を選択し、「OK」をクリックします。

    図8-180 「InvokeSelectManufacturer」invokeアクティビティに関する「パートナ・リンクの選択」ダイアログ

    図8-180の説明は次にあります。
    「図8-180 「InvokeSelectManufacturer」invokeアクティビティに関する「パートナ・リンクの選択」ダイアログ」の説明

  5. 「操作」に対して、「processRequestQuote」を選択します。 この値は自動的に表示されます。

  6. 「入力変数」について、「変数の参照」アイコンをクリックして「変数の選択」ダイアログを表示します。 このダイアログで、「変数」「プロセス」「Scope - SelectSupplier」「Scope - GetSelectMfrQuote」「変数」「manufacturerRequest」の順に選択します。

    図8-181 「InvokeSelectManufacturer」invokeアクティビティの入力変数に関する「変数の選択」

    図8-181の説明は次にあります。
    「図8-181 「InvokeSelectManufacturer」invokeアクティビティの入力変数に関する「変数の選択」」の説明

    「変数の選択」で、「OK」をクリックします。

  7. 「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-182 「InvokeSelectManufacturer」invokeアクティビティに関する「Invoke」ダイアログ

    図8-182の説明は次にあります。
    「図8-182 「InvokeSelectManufacturer」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

8.14.5.4 receiveアクティビティの作成

このreceiveアクティビティは、Select Manufacturerから見積りを受信します。

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

  2. 次のいずれかを実行して、「Receive」ダイアログを表示します。

    • 新規のreceiveアクティビティの横にある矢印のいずれかをドラッグして、「SelectService」パートナ・リンクにドロップします。 receiveアクティビティがパートナ・リンクに関連付けられます。

    • 新規のreceiveアクティビティをダブルクリックします。

  3. 「名前」に、「ReceiveSelectManufacturer」を設定します。

  4. 「パートナ・リンク」「SelectService」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして、「パートナ・リンクの選択」を表示します。 「SelectService」を選択し、「OK」をクリックします。

    図8-183 「ReceiveSelectManufacturer」receiveアクティビティに関する「パートナ・リンクの選択」ダイアログ

    図8-183の説明は次にあります。
    「図8-183 「ReceiveSelectManufacturer」receiveアクティビティに関する「パートナ・リンクの選択」ダイアログ」の説明

  5. 「操作」に、「processRequestQuoteResponse」を設定します。 この値は自動的に表示されます。

  6. 「Variable」について、「変数の参照」アイコンをクリックして「変数の選択」を表示します。 「変数」「プロセス」「Scope - SelectSupplier」「変数」「selectManufacturerResponse」の順に選択します。

    図8-184 「ReceiveSelectManufacturer」receiveアクティビティに関する「変数の選択」ダイアログ

    図8-184の説明は次にあります。
    「図8-184 「ReceiveSelectManufacturer」receiveアクティビティに関する「変数の選択」ダイアログ」の説明

    「変数の選択」で、「OK」をクリックします。

  7. 「インスタンスの作成」オプションは選択しません。

  8. 「Receive」ダイアログは図8-185のように表示されます。 「OK」をクリックします。

    図8-185 「Receive」ダイアログ

    図8-185の説明は次にあります。
    「図8-185 「Receive」ダイアログ」の説明

  9. 「ファイル」→「保存」の順に選択し、作業内容を保存します。

8.14.6 Rapid Manufacturerに対するアクティビティの設定

Rapid Manufacturerから見積りを取得するには、次のアクティビティを作成します。

8.14.6.1 Rapid Manufacturerに対するスコープの作成

Rapid Manufacturerに対するアクティビティは、flowアクティビティの右側を使用して定義します。

  1. コンポーネント・パレットから「Scope」アイコンをドラッグして、flowアクティビティの右側にドロップします。 このスコープにアクティビティを定義して、Rapid Manufacturerとの間で発生するリクエストとレスポンスを処理します。

  2. 新規のscopeアクティビティをダブルクリックして、「Scope」ダイアログを表示します。

  3. 「一般」タブで、スコープの名前を「CallRapidManufacturer」に設定します。

    「変数アクセスに関して直列化可能にする」は選択しません。

  4. 「変数」タブで「作成」をクリックし、「変数の作成」ダイアログを表示します。

  5. 「変数の作成」ダイアログで、変数名として「manufacturerRequest」と入力します。

  6. 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「RapidService」「RapidService.wsdl」「インポートしたWSDL」「RequestQuoteSoapHttpPort」「メッセージ・タイプ」「RequestQuotePortType_POItemsQuote」の順に選択します。

    図8-186 「CallRapidManufacturer」スコープに関する「タイプの選択」ダイアログ

    図8-186の説明は次にあります。
    「図8-186 「CallRapidManufacturer」スコープに関する「タイプの選択」ダイアログ」の説明

    「タイプの選択」で、「OK」をクリックします。

  7. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/rapidservice}RequestQuotePortType_POItemsQuote」に設定されます。

    図8-187 「CallRapidManufacturer」スコープに関する「変数の作成」ダイアログ

    図8-187の説明は次にあります。
    「図8-187 「CallRapidManufacturer」スコープに関する「変数の作成」ダイアログ」の説明

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

  9. 「Scope」ダイアログの「変数」タブに、manufacturerRequest変数が表示されます。

    図8-188 「CallRapidManufacturer」スコープに関する「Scope」ダイアログ

    図8-188の説明は次にあります。
    「図8-188 「CallRapidManufacturer」スコープに関する「Scope」ダイアログ」の説明

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

8.14.6.2 transformアクティビティの作成(「TransformRapidRequest」transformアクティビティ)

  1. 「CallRapidManufacturer」スコープを開きます。

  2. コンポーネント・パレットから「Transform」アイコンをドラッグして、「CallRapidManufacturer」スコープにドロップします。

  3. transformアクティビティをダブルクリックして、「Transform」ダイアログを表示します。

  4. 「一般」タブで、名前を「TransformRapidRequest」に設定します。

  5. 「トランスフォーメーション」タブで、「ソース変数」「inputVariable」に、「ソース・パート」「payload」に設定します。

    「ターゲット変数」「manufacturerRequest」に、「ターゲット・パート」「parameters」に設定します。

  6. 「マッパー・ファイル」「RapidTransformation.xsl」に設定します。 このファイルはまだ存在していないため、データ・マッパーを使用して生成します。

  7. 「マッピングの作成」アイコン(左から2番目)をクリックします。 データ・マッパーが表示され、これを使用してRapidTransformation.xslファイルを生成します。

  8. データ・マッパーの「ソース」(左)側で、「po:PurchaseOrder」「po:OrderItems」「po:Item」の順に開きます。

  9. 「ターゲット」(右)側で、「tns:items」を開きます。

  10. 「po:ProductName」「tns:itemId」までドラッグします。

  11. 「po:Quantity」「tns:quantity」までドラッグします。 データ・マッパーが次のように表示されていることを確認します。

    図8-189 Rapid Manufacturer用のデータ・マッパー(未完了の状態)

    図8-189の説明は次にあります。
    「図8-189 Rapid Manufacturer用のデータ・マッパー(未完了の状態)」の説明

  12. データ・マッパーのコンポーネント・パレットで、ドロップダウンからXSLT Constructsを選択します。

  13. コンポーネント・パレットから「for-each」アイコンをドラッグして、ターゲット側の「tns:items」にドロップします。 for-each品目がtns:POItemsQuotetns:itemsの間に表示されます。

  14. 「po:Item」を、ターゲット側の「for-each」品目までドラッグします。 データ・マッパーが表示されていることを確認します。

    図8-190 Rapid Manufacturer用のデータ・マッパー

    図8-190の説明は次にあります。
    「図8-190 Rapid Manufacturer用のデータ・マッパー」の説明

  15. 「ファイル」→「保存」の順に選択して、RapidTransformation.xslを保存します。 このファイルは、SOAOrderBooking¥bpelディレクトリ内に作成されます。

  16. 「ファイル」→「閉じる」の順に選択し、RapidTransformation.xsl用のデータ・マッパーを閉じます。

  17. 「ファイル」→「保存」の順に選択し、SOAOrderBooking.bpelを保存します。

8.14.6.3 invokeアクティビティの作成

このinvokeアクティビティは、「RapidService」パートナ・リンクを起動します。

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

  2. 次のいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「RapidService」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、invokeアクティビティの名前を「InvokeRapidManufacturer」に設定します。

  4. 「パートナ・リンク」フィールドが「RapidService」に設定されていることを確認します。 設定されていない場合は、懐中電灯アイコンをクリックして「パートナ・リンクの選択」を表示し、「RapidService」を選択して「OK」をクリックします。

    図8-191 「InvokeRapidManufacturer」アクティビティに関する「パートナ・リンクの選択」ダイアログ

    図8-191の説明は次にあります。
    「図8-191 「InvokeRapidManufacturer」アクティビティに関する「パートナ・リンクの選択」ダイアログ」の説明

  5. 「操作」で、「POItemsQuote」を選択します。 この値は自動的に表示されます。

  6. 「入力変数」で、「変数の参照」アイコンをクリックして「変数の選択」ダイアログを表示します。 このダイアログで、「変数」「プロセス」「Scope - SelectSupplier」「Scope - CallRapidManufacturer」「変数」「manufacturerRequest」の順に選択します。

    図8-192 「InvokeRapidManufacturer」アクティビティの入力変数に関する「変数の選択」ダイアログ

    図8-192の説明は次にあります。
    「図8-192 「InvokeRapidManufacturer」アクティビティの入力変数に関する「変数の選択」ダイアログ」の説明

    「変数の選択」で、「OK」をクリックします。

  7. 「出力変数」で、「変数の参照」アイコンをクリックして「変数の選択」ダイアログを表示します。 このダイアログで、「変数」「プロセス」「Scope - SelectSupplier」「変数」「rapidManufacturerResponse」の順に選択します。

    図8-193 「InvokeRapidManufacturer」アクティビティの出力変数に関する「変数の選択」ダイアログ

    図8-193の説明は次にあります。
    「図8-193 「InvokeRapidManufacturer」アクティビティの出力変数に関する「変数の選択」ダイアログ」の説明

    「変数の選択」で、「OK」をクリックします。

  8. 「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-194 「InvokeRapidManufacturer」アクティビティに関する「Invoke」ダイアログ

    図8-194の説明は次にあります。
    「図8-194 「InvokeRapidManufacturer」アクティビティに関する「Invoke」ダイアログ」の説明

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

  9. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.14.7 低い金額の見積りを選択するスイッチの作成

低い金額の見積りを提示したサプライヤを選択できるスイッチを作成します。

8.14.7.1 スイッチの作成

  1. 「SelectSupplier」スコープのflowアクティビティを最小化します (ただし、スコープは最小化しないでください)。 ページが次のように表示されていることを確認します。

    図8-195 flowアクティビティのみを最小化

    図8-195の説明は次にあります。
    「図8-195 flowアクティビティのみを最小化」の説明

  2. コンポーネント・パレットから「Switch」アイコンをドラッグして、「CallManufacturers」flowアクティビティの下(ただし、「SelectSupplier」スコープ内)にドロップします。

  3. switchアクティビティをダブルクリックして、「Switch」ダイアログを表示します。

  4. 「Switch」ダイアログで、名前を「SelectByPrice」に設定し、「OK」をクリックします。

8.14.7.2 スイッチに対する条件の設定

このswitchアクティビティについては、<case>ブランチに対する条件を指定する必要があります。 <otherwise>ブランチの場合、条件の設定は必要はありません。 <case>ブランチで条件が満たされない場合は、<otherwise>ブランチのアクティビティが実行されます。

  1. switchアクティビティを開きます。

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

  3. <case>ブランチは、Select ManufacturerがRapid Serviceより低い金額を戻したケースを処理します。 「式」領域に次の行を入力します。

    number(bpws:getVariableData('selectManufacturerResponse','parameters',
    '/ns15:processRequestQuoteResponseElement/ns15:return/ns15:supplierPrice')) <
    number(bpws:getVariableData('rapidManufacturerResponse','parameters',
    '/ns16:POItemsQuoteResponse/ns30:return/ns30:supplierPrice'))
    
    

    ネームスペースの接頭辞は、次のように置き換える必要があります。

    • ns15は、http://www.globalcompany.com/ns/selectserviceの接頭辞です。

    • ns16は、http://www.globalcompany.com/ns/rapidserviceの接頭辞です。

    式ビルダーを使用して条件を作成することもできます。

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

    2. 「式ビルダー」ダイアログで、「変数」「プロセス」「Scope - SelectSupplier」「変数」「selectManufacturerResponse」「parameters」「ns15:processRequestQuoteResponseElement」「ns15:return」「ns15:supplierPrice」の順に選択します。

      ダイアログの「コンテンツのプレビュー」ボックスに、supplierPriceデータを取得するためのbpws:getVariableData関数がパラメータとともに表示されます。

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

      「式ビルダー」ダイアログが次のように表示されていることを確認します。

      図8-196 「式ビルダー」ダイアログ

      図8-196の説明は次にあります。
      「図8-196 「式ビルダー」ダイアログ」の説明

    4. 「式ビルダー」ダイアログの「式」ボックスに、<(より小さい)文字を入力します。 図8-197に、「式ビルダー」ダイアログの「式」ボックスを示します。

      図8-197 条件の前半が表示された「式ビルダー」

      図8-197の説明は次にあります。
      「図8-197 条件の前半が表示された「式ビルダー」」の説明

    5. 「式ビルダー」ダイアログで、「変数」「プロセス」「Scope - SelectSupplier」「変数」「rapidManufacturerResponse」「parameters」「ns16:POItemsQuoteResponse」「ns16:return」「ns16:supplierPrice」の順に選択します。

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

      「式ビルダー」ダイアログが次のように表示されていることを確認します。

      図8-198 条件の全部が表示された「式ビルダー」ダイアログ

      図8-198の説明は次にあります。
      「図8-198 条件の全部が表示された「式ビルダー」ダイアログ」の説明

    7. 次のような式になるように、各bpws:getVariableData関数をnumber関数でラップします。

      number(bpws:getVariableData(....)) < number(bpws:getVariableData(....))
      
      

      bpws:getVariableData関数の前にnumber(を、関数の後に閉じカッコの)を手動で入力する必要があります。

      完成した式が次のように表示されていることを確認します。

      図8-199 完成した式が表示された「式ビルダー」ダイアログ

      図8-199の説明は次にあります。
      「図8-199 完成した式が表示された「式ビルダー」ダイアログ」の説明

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

    図8-200 <case>に関する「Switch Case」ダイアログ

    図8-200の説明は次にあります。
    「図8-200 <case>に関する「Switch Case」ダイアログ」の説明

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

8.14.7.3 Select Manufacturerに対するアクティビティの設定

低い金額の見積りが提示された場合のSelect Manufacturerに対するアクティビティを定義します。 この場合は、見積り値をinputVariablesupplierPriceフィールドに割り当てます。

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

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignSelectManufacturer」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 2つのコピー操作を作成します。

  5. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SelectSupplier」「変数」「selectManufacturerResponse」「parameters」「ns15:processRequestQuoteResponseElement」「ns15:return」「ns15:supplierPrice」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:SupplierInfo」「ns1:SupplierPrice」の順に選択します。

    図8-201 「AssignSelectManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作

    図8-201の説明は次にあります。
    「図8-201 「AssignSelectManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  6. 「作成」ドロップダウンから「コピー操作」を再度選択して、2番目のコピー操作を作成します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SelectSupplier」「変数」「selectManufacturerResponse」「parameters」「ns15:processRequestQuoteResponseElement」「ns15:return」「ns15:supplierName」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:SupplierInfo」「ns1:SupplierName」の順に選択します。

    図8-202 「AssignSelectManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作

    図8-202の説明は次にあります。
    「図8-202 「AssignSelectManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに2つのコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-203 「AssignSelectManufacturer」アクティビティに関する「Assign」ダイアログ

    図8-203の説明は次にあります。
    「図8-203 「AssignSelectManufacturer」アクティビティに関する「Assign」ダイアログ」の説明

8.14.7.4 Rapid Distributorに対するアクティビティの設定

低い金額の見積りが提示された場合のRapid Manufacturerに対するアクティビティを定義します。 この場合は、見積り値をinputVariablesupplierPriceフィールドに割り当てます。

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

  2. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  3. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignRapidManufacturer」に設定します。

  4. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 2つのコピー操作を作成します。

  5. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SelectSupplier」「変数」「rapidManufacturerResponse」「parameters」「ns16:POItemsQuoteResponse」「ns16:return」「ns16:supplierPrice」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:SupplierInfo」「ns1:SupplierPrice」の順に選択します。

    図8-204 「AssignRapidManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作

    図8-204の説明は次にあります。
    「図8-204 「AssignRapidManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、1番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  6. 「作成」ドロップダウンから「コピー操作」を再度選択して、2番目のコピー操作を作成します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SelectSupplier」「変数」「rapidManufacturerResponse」「parameters」「ns16:POItemsQuoteResponse」「ns16:return」「ns16:supplierName」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:SupplierInfo」「ns1:SupplierName」の順に選択します。

    図8-205 「AssignRapidManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作

    図8-205の説明は次にあります。
    「図8-205 「AssignRapidManufacturer」アクティビティに関する「コピー操作の作成」ダイアログ、2番目のコピー操作」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに2つのコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-206 「AssignRapidManufacturer」アクティビティに関する「Assign」ダイアログ

    図8-206の説明は次にあります。
    「図8-206 「AssignRapidManufacturer」アクティビティに関する「Assign」ダイアログ」の説明

  8. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.14.8 「SelectSupplier」スコープの最小化

「SelectSupplier」スコープを最小化するには、[-]アイコンをクリックします。

 

8.15 出荷方法の判断(「PostFulfillmentReq」スコープ)

このスコープは、注文の出荷方法を判断するFulfillmentESBプロジェクトを起動します。 $500以上の注文では、Fedexが出荷方法になります。 $500未満の注文では、USPSが出荷方法になります。 このルールは、第4章「FulfillmentESBプロジェクトの作成」で説明したFulfillmentESBプロジェクトで定義されています。

「PostFulfillmentReq」スコープを作成には、FulfillmentESBプロジェクトをOracle Application Serverに登録する必要があります。

図8-207に、「PostFulfillmentReq」スコープのアクティビティを示します。

図8-207 「PostFulfillmentReq」スコープのアクティビティ

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

8.15.1 「OrderFulfillment」パートナ・リンクの作成

  1. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  2. コンポーネント・パレットから「Partner Link」アイコンをドラッグして、「サービス」スイムレーンにドロップします。 「パートナ・リンクの作成」ダイアログが表示されます。

  3. 「名前」「OrderFulfillment」と入力します。

  4. 「WSDLファイル」で、「サービス・エクスプローラ」アイコン(左から2番目)をクリックし、「サービス・エクスプローラ」ダイアログを表示します。 「サービス・エクスプローラ」ダイアログで、「サービス・エクスプローラ」「Registered ESB Services」「soademoIntegServer」「Fulfillment」「OrderFulfillment」の順に選択します。soademoIntegServerは統合サーバー接続の名前を参照します。

    図8-208 「OrderFulfillment」パートナ・リンクに関する「サービス・エクスプローラ」

    図8-208の説明は次にあります。
    「図8-208 「OrderFulfillment」パートナ・リンクに関する「サービス・エクスプローラ」」の説明

    「サービス・エクスプローラ」で、「OK」をクリックします。

  5. java.net.UnknownHostExceptionエラーが発生した場合は、「パートナ・リンクの作成」ダイアログに戻ります。

    • プロキシ設定が正しく設定されていることを確認します。 JDeveloperのプロキシ設定を表示するには、「ツール」→「設定」の順に選択します。 「設定」ダイアログで、左側にある「Webブラウザとプロキシ」を選択します。

    • プロキシ設定が正しい場合は、URLのIPアドレスをホスト名に置き換えます。 次に例を示します。

      http://pc1.mydomain.com:8888/esb/wsil/Fulfillment/OrderFulfillment?wsdl

      ホスト名を入力した後に[Tab]キーを押します。

  6. 「パートナ・リンク・タイプ」で、「execute_pptLT」を選択します。 これは自動的に表示されます。

  7. 「パートナ・ロール」で、「execute_pptProvider」を選択します。

  8. 「マイ・ロール」は空白のままにします。

    「パートナ・リンクの作成」ダイアログが次のように表示されていることを確認します。

    図8-209 「OrderFulfillment」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ

    図8-209の説明は次にあります。
    「図8-209 「OrderFulfillment」パートナ・リンクに関する「パートナ・リンクの作成」ダイアログ」の説明

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

8.15.2 「PostFulfillmentReq」スコープの作成

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、「SelectSupplier」スコープの下にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「一般」タブで、次の操作を実行します。

    • 名前: 「PostFulfillmentReq」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには1つの変数を作成する必要があります。

  6. 「変数」タブで、「作成」をクリックします。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「orderFulfillmentRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。

      「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「OrderFulfillment」「インポートしたWSDL」「Fulfillment_OrderFulfillment.wsdl」「メッセージ・タイプ」「PurchaseOrder_request」の順に選択します。

      図8-210 「PostFulfillmentReq」スコープに関する「タイプの選択」ダイアログ

      図8-210の説明は次にあります。
      「図8-210 「PostFulfillmentReq」スコープに関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://www.globalcompany.com/ns/Fulfillment}PurchaseOrder_request」に設定されます。

    図8-211 「PostFulfillmentReq」スコープに関する「変数の作成」ダイアログ

    図8-211の説明は次にあります。
    「図8-211 「PostFulfillmentReq」スコープに関する「変数の作成」ダイアログ」の説明

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

  10. 「Scope」ダイアログの「変数」タブに、orderFulfillmentRequest変数が表示されます。

    図8-212 「PostFulfillmentReq」スコープに関する「Scope」ダイアログ

    図8-212の説明は次にあります。
    「図8-212 「PostFulfillmentReq」スコープに関する「Scope」ダイアログ」の説明

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

  11. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.15.3 スコープ変数への注文情報のコピー(「initializeRequest」assignアクティビティ)

  1. 「PostFulfillmentReq」スコープを開きます。

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

  3. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  4. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「initializeRequest」に設定します。

  5. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 1つのコピー操作を作成します。

  6. 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」の順に選択します。

    図8-213 「initializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ

    図8-213の説明は次にあります。
    「図8-213 「initializeRequest」アクティビティに関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 「Assign」ダイアログに、コピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-214 「initializeRequest」アクティビティに関する「Assign」ダイアログ

    図8-214の説明は次にあります。
    「図8-214 「initializeRequest」アクティビティに関する「Assign」ダイアログ」の説明

8.15.4 OrderFulfillmentESBの起動(「PostFulfillmentReq」invokeアクティビティ)

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

  2. 次のいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「OrderFulfillment」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-217 「PostFulfillmentReq」invokeアクティビティに関する「Invoke」ダイアログ

    図8-217の説明は次にあります。
    「図8-217 「PostFulfillmentReq」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.15.5 スコープに対するCatchAllブランチの作成

すべての例外を捕捉するには、CatchAllブランチを作成します。

  1. 「PostFulfillmentReq」スコープの横にある「CatchAllブランチの追加」アイコンをクリックします。

    図8-218 「PostFulfillmentReq」スコープの横にあるCatchAllアイコン

    図8-218の説明は次にあります。
    「図8-218 「PostFulfillmentReq」スコープの横にあるCatchAllアイコン」の説明

    この図では、CatchAllブランチがスコープの外側に表示されています。

    図8-219 「PostFulfillmentReq」スコープの外側に表示されたCatchAllブランチ

    図8-219の説明は次にあります。
    「図8-219 「PostFulfillmentReq」スコープの外側に表示されたCatchAllブランチ」の説明

  2. CatchAllブランチを開きます。

  3. コンポーネント・パレットから「Empty」アイコンをドラッグして、CatchAllブランチにドロップします。 このCatchは例外を捕捉するのみで処理は実行しません。

  4. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.15.6 「PostFulfillmentReq」スコープの最小化

「PostFulfillmentReq」スコープを最小化するには、[-]アイコンをクリックします。

 

8.16 「完了」への注文ステータスの設定(「SetFinalOrderStatus」スコープ)

このスコープでは、データベース・アダプタを使用して、データベース内の注文ステータスを更新します。

図8-220に、スコープのアクティビティを示します。

図8-220 「SetFinalOrderStatus」スコープのアクティビティ

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

8.16.1 「OrderStatus」データベース・アダプタの作成

  1. コンポーネント・パレットで、ドロップダウンから「Services」を選択します。

  2. コンポーネント・パレットから「Database Adapter」アイコンをドラッグして、「サービス」スイムレーンにドロップします。 アダプタ構成ウィザードが起動します。 「次へ」をクリックして開始します。

  3. ステップ1のサービス名ページで、「サービス名」「OrderStatus」に設定します。 説明は空白のままにします。

    図8-221 アダプタ構成ウィザード: ステップ1、サービス名

    図8-221の説明は次にあります。
    「図8-221 アダプタ構成ウィザード: ステップ1、サービス名」の説明

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

  4. ステップ2のサービス接続ページで、「接続」に対してデータベース接続の名前を選択します。 JNDI名が「eis/DB/soademo」に自動的に設定されていることを確認します。

    図8-222 アダプタ構成ウィザード: ステップ2、サービス接続

    図8-222の説明は次にあります。
    「図8-222 アダプタ構成ウィザード: ステップ2、サービス接続」の説明

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

  5. ステップ3の操作タイプ・ページで、「表に対して操作を実行」を選択し、「更新のみ」を選択します。

    図8-223 アダプタ構成ウィザード: ステップ3、操作タイプ

    図8-223の説明は次にあります。
    「図8-223 アダプタ構成ウィザード: ステップ3、操作タイプ」の説明

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

  6. 「表の選択」で、「表のインポート」をクリックします。 「表のインポート」ダイアログが表示されます。

  7. 「表のインポート」ダイアログで、次の操作を実行します。

    • スキーマ: 「SOADEMO」を選択します。

    • 名前フィルタ: 「%」と入力します。

    「問合せ」をクリックします。

    左側にあるORDERS表を選択し、右矢印をクリックして「選択済」ボックスに移動します。

    図8-224 アダプタ構成ウィザード - 「表のインポート」

    図8-224の説明は次にあります。
    「図8-224 アダプタ構成ウィザード - 「表のインポート」」の説明

    「表のインポート」ダイアログで、「OK」をクリックします。

  8. 表の選択ページに戻って、「SOADEMO.ORDERS」を選択します。

    図8-225 アダプタ構成ウィザード: ステップ4、表の選択

    図8-225の説明は次にあります。
    「図8-225 アダプタ構成ウィザード: ステップ4、表の選択」の説明

    「終了」をクリックして、残りの画面にデフォルト値を受け入れます。

    ウィザードにより次のファイルが作成されます。

    • SOAOrderBooking¥bpel¥OrderStatus.wsdl

    • SOAOrderBooking¥bpel¥OrderStatus_table.xsd

    • SOAOrderBooking¥bpel¥OrderStatus_toplink_mappings.xml

    • SOAOrderBooking¥src¥OrderStatus¥Orders.java

    • SOAOrderBooking¥toplink¥OrderStatus¥OrderStatus.mwp

  9. Oracle JDeveloperにパートナ・リンクのダイアログが表示されます。次のフィールドが入力済になっています。

    名前: OrderStatus

    WSDLファイル: SOAOrderBooking/bpel/OrderStatus.wsdl

    パートナ・リンク・タイプ: OrderStatus_plt

    パートナ・ロール: OrderStatus_role

    図8-226 「OrderStatus」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ

    図8-226の説明は次にあります。
    「図8-226 「OrderStatus」データベース・アダプタに関する「パートナ・リンクの作成」ダイアログ」の説明

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

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.16.2 「SetFinalOrderStatus」スコープの作成

  1. コンポーネント・パレットで、ドロップダウンから「Process Activities」を選択します。

  2. コンポーネント・パレットから「Scope」アイコンをドラッグして、「PostFulfillmentReq」スコープの下にドロップします。

  3. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  4. 「一般」タブで、

    • 名前: 「SetFinalOrderStatus」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  5. 「変数」タブをクリックします。 このスコープには1つの変数を作成する必要があります。

  6. 「変数」タブで、「作成」をクリックします。

  7. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「orderStatusRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。

      「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「OrderStatus」「OrderStatus.wsdl」「メッセージ・タイプ」「OrdersCollection_msg」の順に選択します。

      図8-227 「SetFinalOrderStatus」スコープ内の「orderStatusRequest」変数に関する「タイプの選択」ダイアログ

      図8-227の説明は次にあります。
      「図8-227 「SetFinalOrderStatus」スコープ内の「orderStatusRequest」変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」をクリックします。

  8. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://xmlns.oracle.com/pcbpel/adapter/db/OrderStatus/}OrdersCollection_msg」に設定されます。

    図8-228 「SetFinalOrderStatus」スコープ内の「orderStatusRequest」変数に関する「変数の作成」ダイアログ

    図8-228の説明は次にあります。
    「図8-228 「SetFinalOrderStatus」スコープ内の「orderStatusRequest」変数に関する「変数の作成」ダイアログ」の説明

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

  10. 「Scope」ダイアログの「変数」タブに、orderStatusRequest変数が表示されます。

    図8-229 「SetFinalOrderStatus」スコープに関する「Scope」ダイアログ

    図8-229の説明は次にあります。
    「図8-229 「SetFinalOrderStatus」スコープに関する「Scope」ダイアログ」の説明

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

  11. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.16.3 注文IDおよびステータス(「AssignOrderStatus」assignアクティビティ)の準備

  1. 「SetFinalOrderStatus」スコープを開きます。

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

  3. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  4. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignOrderStatus」に設定します。

  5. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 2つのコピー操作を作成します。

  6. 1番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:ID」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SetFinalOrderStatus」「変数」「orderStatusRequest」「OrdersCollection」「ns19:OrdersCollection」「ns19:Orders」「ns19:ordid」の順に選択します。

    図8-230 「AssignOrderStatus」アクティビティの1番目のコピー操作に関する「コピー操作の作成」ダイアログ

    図8-230の説明は次にあります。
    「図8-230 「AssignOrderStatus」アクティビティの1番目のコピー操作に関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 2番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を再度選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「式」に設定し、「式」ボックスに次の行を入力します。

      string('completed')

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SetFinalOrderStatus」「変数」「orderStatusRequest」「OrdersCollection」「ns19:OrdersCollection」「ns19:Orders」「ns19:status」の順に選択します。

    図8-231 「AssignOrderStatus」アクティビティの2番目のコピー操作に関する「コピー操作の作成」ダイアログ

    図8-231の説明は次にあります。
    「図8-231 「AssignOrderStatus」アクティビティの2番目のコピー操作に関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  8. 「Assign」ダイアログに、複数のコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-232 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ

    図8-232の説明は次にあります。
    「図8-232 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ」の説明

8.16.4 データベース内の注文ステータスの更新(「UpdateOrderStatus」invokeアクティビティ)

データベース内のORDERS表にある注文ステータスを更新するには、「UpdateOrderStatus」invokeアクティビティを作成します。

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

  2. 次にいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「OrderStatus」データベース・アダプタにドロップします。 invokeアクティビティがデータベース・アダプタに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-235 「UpdateOrderStatus」invokeアクティビティに関する「Invoke」ダイアログ

    図8-235の説明は次にあります。
    「図8-235 「UpdateOrderStatus」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.16.5 「SetFinalOrderStatus」スコープの最小化

最小化するには、「SetFinalOrderStatus」スコープで、[-]をクリックします。

 

8.17 顧客への電子メール通知の送信(「NotifyCustomer」スコープ)

このスコープでは、通知サービスを使用して、注文の履行時に、顧客に電子メールを送信します。

図8-236に、「NotifyCustomer」スコープのアクティビティを示します。

図8-236 「NotifyCustomer」スコープのアクティビティ

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

8.17.1 通知スコープの作成

  1. コンポーネント・パレットから「Email」アイコンをドラッグして、「SetFinalOrderStatus」スコープの下にドロップします。 電子メールの編集ダイアログが表示されます。

  2. 電子メールの編集ダイアログの各フィールドに、任意の情報を入力します。 図8-237に例を示します。

    図8-237 電子メールの編集ダイアログ

    図8-237の説明は次にあります。
    「図8-237 電子メールの編集ダイアログ」の説明

    ほとんどのフィールドで、「XPath式ビルダー」アイコンをクリックして式ビルダーを表示できます。 これによって、フィールドのデータをカスタマイズできます。

    例1: 顧客の電子メール・アドレスを「To」フィールドに入力する場合

    1. 「To」フィールドで、「XPath式ビルダー」アイコン(右にあるアイコン)をクリックします。

    2. 「式ビルダー」ダイアログで、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns4:PurchaseOrder」「ns4:UserContact」「ns4:EmailAddress」の順に選択します。

    3. 「式に挿入」をクリックします。 ダイアログが次のように表示されていることを確認します。

      図8-238 EmailAddressフィールドが表示されている「式ビルダー」ダイアログ

      図8-238の説明は次にあります。
      「図8-238 EmailAddressフィールドが表示されている「式ビルダー」ダイアログ」の説明

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

     

    例2: 電子メールの「本文」に、顧客名、注文IDおよび注文ステータスを含める場合。 次に、入力するテキストの例を示します。

    Dear firstName
    
    This is to inform you that your order number, orderID, has been
    orderStatus
    If you have a question about your order, please contact customer service or
    send an email to customerservice@globalcompany.com
    
    Thank you for doing business with Global Company. We appreciate your business!
    Global Company Customer Service
    
    

    firstNameorderIDおよびorderStatusは、動的に取得されるデータに対するプレースホルダです。

    1. 「本文」の「XPath式ビルダー」アイコンをクリックします。

    2. concat関数を使用して、本文テキストの各部を連結します。

      最初に、次の行を「式」ボックスに入力します。

      concat(string('Dear '), )
      
      
    3. 最後のカッコの前に挿入ポイントを置きます。

    4. 名に対する変数の追加: 「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns4:PurchaseOrder」「ns4:ShipTo」「ns4:Name」「ns4:First」の順に選択します。

    5. 「式に挿入」をクリックします。 式は次のように表示されます。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'))
      
      
    6. メッセージの次の部分(注文IDまで)の追加: 最後の閉じカッコの前に挿入ポイントを置いて、メッセージの次の部分(太字で表示)を入力します。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'), string('This is to inform you that your order number '), )
      
      

      「式」ボックスでは改行を挿入できませんが、電子メールの編集ダイアログでは挿入できます。

    7. 最後のカッコの前に挿入ポイントを置きます。

    8. 注文IDに対する変数の追加: 「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns4:PurchaseOrder」「ns4:ID」の順に選択します。

    9. 「式に挿入」をクリックします。 式は次のように表示されます。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'), string('This is to inform you that your order
      number '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ID'))
      
      
    10. メッセージに、文字列「has been」を追加します。 新しい部分は太字で表示されます。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'), string('This is to inform you that your order
      number '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ID')
      , string('has been '), )
      
      
    11. 最後のカッコの前に挿入ポイントを置きます。

    12. 注文ステータスに対する変数の追加: 「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns4:PurchaseOrder」「ns4:OrderInfo」「ns4:OrderStatus」の順に選択します。

    13. 「式に挿入」をクリックします。 式は次のように表示されます。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'), string('This is to inform you that your order
      number '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ID')
      , string('has been '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:OrderInfo/
      ns4:OrderStatus'))
      
      
    14. メッセージの最終部分を追加します。この部分は太字で表示されます。

      concat(string('Dear '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ShipTo/
      ns4:Name/ns4:First'), string('This is to inform you that your order
      number '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ID')
      , string('has been '), bpws:getVariableData('inputVariable','payload',
      '/client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:OrderInfo/
      ns4:OrderStatus'), string('If you have a question about your order, please
      contact customer service or send an email to
      customerservice@globalcompany.com
      Thank you for doing business with Global Company. We appreciate your
      business!
      Global Company Customer Service'))
      
      
    15. 「式ビルダー」で、「OK」をクリックします。 電子メールの編集ダイアログは次のように表示されます。 複数の改行が本文に追加され、読みやすくなりました。

      図8-239 電子メールの編集ダイアログ

      図8-239の説明は次にあります。
      「図8-239 電子メールの編集ダイアログ」の説明

  3. 電子メールの編集ダイアログで、「OK」をクリックします。

  4. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

「Email_1」アクティビティを開くと、2つのアクティビティ(assignアクティビティとinvokeアクティビティ)が含まれていることを確認できます。 これらのアクティビティを編集する必要はありません。

assignアクティビティの「EmailParamsAssign」には、電子メールの編集ダイアログで指定した情報が含まれています。

invokeアクティビティの「InvokeNotificationService」は、通知サービスをコールして、電子メールを送信します。

8.17.2 「Email_1」スコープの最小化

最小化するには、「Email_1」スコープで、[-]をクリックします。

8.17.3 「Email_1」スコープの名前変更

「Email_1」スコープの名前を変更するには、最小化されたスコープを右クリックして「名前の変更」を選択します。 次に、新しい名前、「NotifyCustomer」を入力して、[Return]キーを押します。

 

8.18 クライアントのコールバック(「callbackClient」invokeアクティビティ)

このinvokeアクティビティは、クライアントにステータスを戻します。

図8-240 「callbackClient」invokeアクティビティ

図8-240の説明は次にあります。
「図8-240 「callbackClient」invokeアクティビティ」の説明

8.18.1 invokeアクティビティの作成

  1. コンポーネント・パレットから「Invoke」アイコンをドラッグして、「NotifyCustomer」(これは「Email_1」スコープです)スコープの下にドロップします。

  2. 次にいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「client」パートナ・リンクにドロップします。 invokeアクティビティがパートナ・リンクに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-243 「callbackClient」invokeアクティビティに関する「Invoke」ダイアログ

    図8-243の説明は次にあります。
    「図8-243 「callbackClient」invokeアクティビティに関する「Invoke」ダイアログ」の説明

  4. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.18.2 センサーの追加

センサーを「callbackClient」invokeアクティビティに追加すると、完了した注文の情報をデータベース、ファイル、JMSなどの異なる宛先タイプに書き込むことができます。

このプロジェクトの最初の部分にある第8.6項「clientからの入力の受信(receiveアクティビティ)」で説明した「receiveInput」receiveアクティビティに対しても、センサーを作成したことを思い出してください。

  1. 「callbackClient」invokeアクティビティをダブルクリックします。 「Invoke」ダイアログが表示されます。

  2. 「Invoke」ダイアログで、「センサー」をクリックします。

  3. 「作成」をクリックして、新規のセンサーを作成します。 「アクティビティ・センサーの作成」ダイアログが表示されます。

  4. 「アクティビティ・センサーの作成」ダイアログで、「名前」「InstanceCompleted」に設定します。

  5. 「評価時間」「完了」に設定します。 センサーの起動時間が指定されます。 「完了」は、このアクティビティの実行後にセンサーが起動されることを示します。

  6. 「アクティビティ変数センサー」セクションで、「作成」をクリックし、「アクティビティ変数センサーの作成」ダイアログを表示します。

    図8-244 「アクティビティ変数センサーの作成」ダイアログ

    図8-244の説明は次にあります。
    「図8-244 「アクティビティ変数センサーの作成」ダイアログ」の説明

  7. 「アクティビティ変数センサーの作成」ダイアログで、「変数XPath」の鉛筆アイコンをクリックします。 「変数XPathビルダー」ダイアログが表示されます。

    図8-245 「変数XPathビルダー」ダイアログ

    図8-245の説明は次にあります。
    「図8-245 「変数XPathビルダー」ダイアログ」の説明

  8. 「変数」「プロセス」「変数」「inputVariable」の順に選択します。

  9. 「変数XPathビルダー」ダイアログで、「OK」をクリックします。 「アクティビティ変数センサーの作成」ダイアログには、次の値が表示されます(図8-244を参照)。

    変数XPath: $inputVariable

    出力ネームスペース: http://www.globalcompany.com/ns/OrderBooking

    出力データ型: SOAOrderBookingRequestMessage

  10. 「アクティビティ変数センサーの作成」ダイアログで、「OK」をクリックします。 「アクティビティ・センサーの作成」ダイアログに戻ります。このダイアログは次のように表示されます。

    図8-246 「アクティビティ・センサーの作成」ダイアログ

    図8-246の説明は次にあります。
    「図8-246 「アクティビティ・センサーの作成」ダイアログ」の説明

  11. 「アクティビティ・センサーの作成」ダイアログの「センサー・アクション」セクションで、「追加」アイコンをクリックします。 「センサー・アクションの選択」ダイアログが表示されます。 このダイアログには、InstanceStartという既存のセンサーが表示されます。これは、第8.6.2項「receiveアクティビティ用のセンサーの作成」で作成したセンサーです。

    図8-247 「センサー・アクションの選択」ダイアログ

    図8-247の説明は次にあります。
    「図8-247 「センサー・アクションの選択」ダイアログ」の説明

  12. 「センサー・アクションの選択」ダイアログで、「センサー・アクション」を選択し、棒型アイコンから「センサー・アクション」を選択します。 「センサー・アクションの作成」ダイアログが表示されます。

  13. 「センサー・アクションの作成」ダイアログで、次の操作を実行します。

    • 名前: 「InstanceCompleted」と入力します。

    • パブリッシュ・タイプ: 「JMSトピック」を選択します。

    • JMSコネクション・ファクトリ: 「jms/TopicConnectionFactory」と入力します。

    • パブリッシュ・ターゲット: 「jms/demoTopic」と入力します。

    • フィルタ: 空白のままにします。

    • 有効化: このオプションを選択します。

    図8-248 「センサー・アクションの作成」ダイアログ

    図8-248の説明は次にあります。
    「図8-248 「センサー・アクションの作成」ダイアログ」の説明

  14. 「センサー・アクションの作成」ダイアログで、「OK」をクリックします。 「センサー・アクションの選択」ダイアログに、「InstanceCompleted」センサー・アクションが表示されます。

    図8-249 「センサー・アクションの選択」ダイアログ

    図8-249の説明は次にあります。
    「図8-249 「センサー・アクションの選択」ダイアログ」の説明

  15. 「センサー・アクションの選択」で、「OK」 をクリックします。 「アクティビティ・センサーの作成」ダイアログに戻ります。このダイアログは次のように表示されます。

    図8-250 「アクティビティ・センサーの作成」ダイアログ

    図8-250の説明は次にあります。
    「図8-250 「アクティビティ・センサーの作成」ダイアログ」の説明

  16. 「アクティビティ・センサーの作成」ダイアログで、「OK」をクリックします。

    「Invoke」ダイアログの「センサー」タブは、次のように表示されます。

    図8-251 「Invoke」ダイアログ、「センサー」タブ

    図8-251の説明は次にあります。
    「図8-251 「Invoke」ダイアログ、「センサー」タブ」の説明

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

  18. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

 

8.19 プロジェクトへのCatchブランチの追加

プロジェクト全体にCatchブランチを追加すると、そのプロジェクト内でエラーが発生した場合に、データベース内の注文ステータスを更新できます。

図8-252に、Catch内のアクティビティを示します。

図8-252 「client:OrderBookingFault」Catch内のアクティビティ

図8-252の説明は次にあります。
「図8-252 「client:OrderBookingFault」Catch内のアクティビティ」の説明

8.19.1 「client:OrderBookingFault」Catchの追加

  1. 「SOAOrderBooking」スコープで、三角形に感嘆符が重なったアイコンをクリックして、Catchブランチをプロジェクトに追加します。 このレベルでの追加によって、このCatchは、プロジェクト内のすべてのアクティビティで使用できます。

    図8-253 「SOAOrderBooking」スコープの「Catchブランチの追加」アイコン

    図8-253の説明は次にあります。
    「図8-253 「SOAOrderBooking」スコープの「Catchブランチの追加」アイコン」の説明

  2. 右にスクロールし、新規のCatchブランチを確認して開きます。 新規のブランチには、アクティビティがありません。

    図8-254 新規のCatchブランチ

    図8-254の説明は次にあります。
    「図8-254 新規のCatchブランチ」の説明

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

  4. 「Catch」ダイアログで、次の操作を実行します。

    • ネームスペースURI: 「http://www.globalcompany.com/ns/OrderBooking」と入力します。

    • ローカル・パート: 「OrderBookingFault」と入力します。

    • フォルト変数: 「OrderBookingFault」と入力します。

    図8-255 「Catch」ダイアログ

    図8-255の説明は次にあります。
    「図8-255 「Catch」ダイアログ」の説明

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

8.19.2 スコープの作成

スコープは、Catch領域に作成します。これは、アクティビティに対する変数はこのCatch領域に定義する必要があるためです。

  1. コンポーネント・パレットから「Scope」アイコンをドラッグして、Catch領域にドロップします。

  2. 新規のスコープをダブルクリックして、「Scope」ダイアログを表示します。

  3. 「Scope」ダイアログの「一般」タブで、次の操作を実行します。

    • 名前: 「SetOrderStatus」と入力します。

    • 変数アクセスに関して直列化可能にする: 選択しません。

  4. 「変数」タブをクリックします。 このスコープには1つの変数を作成する必要があります。

  5. 「変数」タブで、「作成」をクリックします。

  6. 「変数の作成」ダイアログで、次の操作を実行します。

    • 名前: 「orderStatusRequest」と入力します。

    • 「メッセージ・タイプ」を選択し、懐中電灯アイコンをクリックして「タイプの選択」を表示します。 「タイプの選択」で、「タイプ・エクスプローラ」「メッセージ・タイプ」「パートナ・リンク」「OrderStatus」「OrderStatus.wsdl」「メッセージ・タイプ」「OrdersColllection_msg」の順に選択します。

      図8-256 orderStatusRequest変数に関する「タイプの選択」ダイアログ

      図8-256の説明は次にあります。
      「図8-256 orderStatusRequest変数に関する「タイプの選択」ダイアログ」の説明

      「タイプの選択」で、「OK」 をクリックします。

  7. 「変数の作成」ダイアログで、「メッセージ・タイプ」が「{http://xmlns.oracle.com/pcbpel/adapter/db/OrderStatus/}OrdersCollection_msg」に設定されます。

    図8-257 orderStatusRequest変数に関する「変数の作成」ダイアログ

    図8-257の説明は次にあります。
    「図8-257 orderStatusRequest変数に関する「変数の作成」ダイアログ」の説明

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

  9. 「Scope」ダイアログの「変数」タブに、orderStatusRequest変数が表示されます。

    図8-258 Catchに関する「Scope」ダイアログ、「変数」タブ

    図8-258の説明は次にあります。
    「図8-258 Catchに関する「Scope」ダイアログ、「変数」タブ」の説明

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

8.19.3 assignアクティビティの作成

  1. 「SetOrderStatus」スコープを開きます。

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

  3. 新規のassignアクティビティをダブルクリックして、「Assign」ダイアログを表示します。

  4. 「Assign」ダイアログで、「一般」タブをクリックし、「名前」「AssignOrderStatus」に設定します。

  5. さらに「Assign」ダイアログで、「コピー操作」タブをクリックします。 3つのコピー操作を作成します。

  6. 1番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「inputVariable」「payload」「client:SOAOrderBookingProcessRequest」「ns1:PurchaseOrder」「ns1:ID」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SetOrderStatus」「変数」「orderStatusRequest」「OrdersCollection」「ns19:OrdersCollection」「ns19:Orders」「ns19:ordid」の順に選択します。

    図8-259 「AssignOrderStatus」assignアクティビティの1番目のコピー操作に関する「コピー操作の作成」ダイアログ

    図8-259の説明は次にあります。
    「図8-259 「AssignOrderStatus」assignアクティビティの1番目のコピー操作に関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  7. 2番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を再度選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「式」に設定し、「式」ボックスに次の行を入力します。

      string('canceled')
      
      
    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SetOrderStatus」「変数」「orderStatusRequest」「OrdersCollection」「ns19:OrdersCollection」「ns19:Orders」「ns19:status」の順に選択します。

    図8-260 「AssignOrderStatus」assignアクティビティの2番目のコピー操作に関する「コピー操作の作成」ダイアログ

    図8-260の説明は次にあります。
    「図8-260 「AssignOrderStatus」assignアクティビティの2番目のコピー操作に関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  8. 3番目のコピー操作の作成: 「作成」ドロップダウンから「コピー操作」を再度選択します。 「コピー操作の作成」ダイアログが表示されます。

    • 「From」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「変数」「OrderBookingFault」「payload」「client:SOAOrderBookingProcessFault」「client:status」の順に選択します。

    • 「To」側で、「タイプ」「Variable」に設定し、「変数」「プロセス」「Scope - SetOrderStatus」「変数」「orderStatusRequest」「OrdersCollection」「ns19:OrdersCollection」「ns19:Orders」「ns19:comments」の順に選択します。

    図8-261 「AssignOrderStatus」assignアクティビティの3番目のコピー操作に関する「コピー操作の作成」ダイアログ

    図8-261の説明は次にあります。
    「図8-261 「AssignOrderStatus」assignアクティビティの3番目のコピー操作に関する「コピー操作の作成」ダイアログ」の説明

    「コピー操作の作成」ダイアログで、「OK」をクリックします。

  9. 「Assign」ダイアログに、3つのコピー操作が表示されていることを確認します。 「OK」をクリックします。

    図8-262 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ

    図8-262の説明は次にあります。
    「図8-262 「AssignOrderStatus」アクティビティに関する「Assign」ダイアログ」の説明

  10. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.19.4 invokeアクティビティの作成

  1. コンポーネント・パレットから「Invoke」アイコンをドラッグして、Catch領域にある「AssignOrderStatus」assignアクティビティの下にドロップします。

  2. 次にいずれかを実行して、「Invoke」ダイアログを表示します。

    • 新規のinvokeアクティビティの横にある矢印のいずれかをドラッグして、「OrderStatus」データベース・アダプタにドロップします。 invokeアクティビティがデータベース・アダプタに関連付けられます。

    • 新規のinvokeアクティビティをダブルクリックします。

  3. 「Invoke」ダイアログで、次の値を設定します。

    「Invoke」ダイアログが次のように表示されていることを確認します。

    図8-265 「SetFaultedOrderStatus」invokeアクティビティに関する「Invoke」ダイアログ

    図8-265の説明は次にあります。
    「図8-265 「SetFaultedOrderStatus」invokeアクティビティに関する「Invoke」ダイアログ」の説明

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

  5. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.19.5 invokeアクティビティへのセンサーの作成

なんらかの理由で完了しなかった注文の情報をデータベース、ファイル、JMSなどの異なる宛先に書き込むには、「SetFaultedOrderStatus」invokeアクティビティにセンサーを作成します。 ここでは、JMSトピックを書き込みます。

  1. 「SetFaultedOrderStatus」invokeアクティビティをダブルクリックして、「Invoke」ダイアログを起動します。

  2. 「Invoke」ダイアログで、「センサー」をクリックします。

  3. 「作成」をクリックして、新規のセンサーを作成します。 「アクティビティ・センサーの作成」ダイアログが表示されます。

  4. 「アクティビティ・センサーの作成」ダイアログで、「名前」「InstanceFaulted」に設定します。

  5. 「評価時間」「完了」に設定します。 センサーの起動時間が指定されます。 「完了」は、このアクティビティの実行後にセンサーが起動されることを示します。

  6. 「アクティビティ変数センサー」セクションで、「作成」をクリックし、「アクティビティ変数センサーの作成」ダイアログを表示します。

    図8-266 「アクティビティ変数センサーの作成」ダイアログ

    図8-266の説明は次にあります。
    「図8-266 「アクティビティ変数センサーの作成」ダイアログ」の説明

  7. 「アクティビティ変数センサーの作成」ダイアログで、「変数XPath」の鉛筆アイコンをクリックします。 「変数XPathビルダー」ダイアログが表示されます。

    図8-267 「変数XPathビルダー」ダイアログ

    図8-267の説明は次にあります。
    「図8-267 「変数XPathビルダー」ダイアログ」の説明

  8. 「変数」「プロセス」「変数」「OrderBookingFault」の順に選択します。

  9. 「変数XPathビルダー」で、「OK」をクリックします。 「アクティビティ変数センサーの作成」ダイアログには、次の値が表示されます(図8-266を参照)。

    変数XPath: $OrderBookingFault

    出力ネームスペース: http://www.globalcompany.com/ns/OrderBooking

    出力データ型: SOAOrderBookingFaultMessage

  10. 「アクティビティ変数センサーの作成」ダイアログで、「OK」をクリックします。 「アクティビティ・センサーの作成」ダイアログに戻ります。このダイアログは次のように表示されます。

    図8-268 「アクティビティ・センサーの作成」ダイアログ

    図8-268の説明は次にあります。
    「図8-268 「アクティビティ・センサーの作成」ダイアログ」の説明

  11. 「アクティビティ・センサーの作成」ダイアログの「センサー・アクション」セクションで、「追加」アイコンをクリックします。 「センサー・アクションの選択」ダイアログが表示されます。 このダイアログには、InstanceStartおよびInstanceCompletedという既存のセンサーが表示されます。これらは、それぞれ第8.6.2項「receiveアクティビティ用のセンサーの作成」および第8.18.2項「センサーの追加」で作成したセンサーです。

    図8-269 「センサー・アクションの選択」ダイアログ

    図8-269の説明は次にあります。
    「図8-269 「センサー・アクションの選択」ダイアログ」の説明

  12. 「センサー・アクションの選択」ダイアログで、「センサー・アクション」を選択し、棒型アイコンから「センサー・アクション」を選択します。 「センサー・アクションの作成」ダイアログが表示されます。

  13. 「センサー・アクションの作成」ダイアログで、次の操作を実行します。

    • 名前: 「InstanceFaulted」と入力します。

    • パブリッシュ・タイプ: 「JMSトピック」を選択します。

    • JMSコネクション・ファクトリ: 「jms/TopicConnectionFactory」と入力します。

    • パブリッシュ・ターゲット: 「jms/demoTopic」と入力します。

    • フィルタ: 空白のままにします。

    • 有効化: このオプションを選択します。

    図8-270 「センサー・アクションの作成」ダイアログ

    図8-270の説明は次にあります。
    「図8-270 「センサー・アクションの作成」ダイアログ」の説明

  14. 「センサー・アクションの作成」ダイアログで、「OK」をクリックします。 「センサー・アクションの選択」ダイアログに、「InstanceFaulted」センサー・アクションが表示されます。

    図8-271 「センサー・アクションの選択」ダイアログ

    図8-271の説明は次にあります。
    「図8-271 「センサー・アクションの選択」ダイアログ」の説明

  15. 「センサー・アクションの選択」で、「OK」 をクリックします。 「アクティビティ・センサーの作成」ダイアログに戻ります。このダイアログは次のように表示されます。

    図8-272 「アクティビティ・センサーの作成」ダイアログ

    図8-272の説明は次にあります。
    「図8-272 「アクティビティ・センサーの作成」ダイアログ」の説明

  16. 「アクティビティ・センサーの作成」ダイアログで、「OK」をクリックします。

    「Invoke」ダイアログの「センサー」タブは、次のように表示されます。

    図8-273 「Invoke」ダイアログ、「センサー」タブ

    図8-273の説明は次にあります。
    「図8-273 「Invoke」ダイアログ、「センサー」タブ」の説明

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

  18. 「ファイル」→「保存」の順に選択して、作業内容を保存します。

8.20 プロジェクトのデプロイ

  1. アプリケーション・ナビゲータで、「SOAOrderBooking」「リソース」の下にある「build.properties」をダブルクリックします。 このファイルには、BPELプロジェクトをデプロイするときに、build.xmlで使用する値が定義されています。

  2. build.propertiesファイルにある次の行を(#文字を削除して)非コメント化します。

    platform=ias_10g
    domain=default
    rev=1.0
    admin.user=oc4jadmin
    admin.password=welcome99
    http.hostname=myAppServerMachine.mydomain.com
    http.port=8888
    j2ee.hostname=myAppServerMachine.mydomain.com
    rmi.port=23793
    opmn.requestport=6005
    oc4jinstancename=home
    
    
  3. 必要に応じて編集します。 太字イタリック体の値は一般的な値であり、変更が必要です。

    rmi.portの値を確認するには、次のコマンドを実行します。

    ORACLE_HOME¥opmn¥bin¥opmnctl status -l
    
    

    ORACLE_HOMEには、Oracle Application ServerのOracleホームを指定します。

    opmn.requestportの値を確認するには、手順6を参照してください。

  4. 「ファイル」→「保存」の順に選択して、変更内容をbuild.propertiesに保存します。

  5. 「build.xml」を右クリックし、「Antを実行」を選択します。

  6. 「Antを実行」ダイアログで、「プロパティ」タブをクリックします。

  7. 「プロパティ・ファイル」セクションで、「追加」をクリックします。 「Antプロパティ・ファイルの追加」ダイアログで、SOAOrderBookingディレクトリの「build.properties」ファイルを選択し、「開く」をクリックします。

    「Antを実行」ダイアログが次のように表示されていることを確認します。

    図8-274 「プロパティ」タブに、ロードされたbuild.propertiesファイルが表示された「Antを実行」ダイアログ

    図8-274の説明は次にあります。
    「図8-274 「プロパティ」タブに、ロードされたbuild.propertiesファイルが表示された「Antを実行」ダイアログ」の説明

  8. 「OK」をクリックします。 JDeveloperによってAntが実行され、プロジェクトがコンパイルおよびデプロイされます。 エラーが発生した場合は、次の項第8.20.1項「Antを使用したDeveloper Promptからのデプロイ」を参照してください。

8.20.1 Antを使用したDeveloper Promptからのデプロイ

エラーが発生した場合は、build.propertiesファイルに入力した値が正しいことを確認します。

値は正しいが、エラーが発生する場合は、Developer Promptからantを実行してプロジェクトをデプロイできます。

  1. 「スタート」「プログラム」「Oracle - instanceName」→「Oracle BPEL Process Manager」「Developer Prompt」の順に選択します。 Oracle BPEL Process Manager用に構成されたシェル・ウィンドウが表示されます。

    SOAOrderBookingプロジェクトをデプロイするには、Developer Promptのシェル・ウィンドウからantを実行する必要があることに注意してください。 プロジェクトをデプロイするために、通常のオペレーティング・システム・シェルからantを実行することは、サポートされていません。

  2. Developer Promptウィンドウで、ディレクトリをSOADEMO¥SOAOrderBookingディレクトリに変更します。SOADEMOは、SOA Order Bookingアプリケーションを作成したディレクトリを表します。

    > cd SOADEMO
    > cd SOAOrderBooking
    
    

    JDeveloperとOracle Application Serverを異なるマシンで実行している場合は、JDeveloperマシンからOracle Application ServerマシンにSOAOrderBookingディレクトリをコピーできます。 このディレクトリは、Oracle Application Serverマシンの任意の場所に配置できます。 Developer Promptでは、このディレクトリに簡単に移動できます。

  3. antを実行します。

    > ant
    
    

8.20.2 Oracle BPEL ControlでのSOAOrderBookingの表示

デプロイした後のSOAOrderBookingは、Oracle BPEL Controlに表示されます。 Oracle BPEL Controlは、ブラウザに次のURLを入力して表示します。

http://hostname:port/BPELConsole

oc4jadminユーザーでログインします。

Oracle BPEL Controlの「ダッシュボード」タブに、SOAOrderBookingが表示されます。

図8-275 SOAOrderBookingが表示されたOracle BPEL Control

図8-275の説明は次にあります。
「図8-275 SOAOrderBookingが表示されたOracle BPEL Control」の説明

SOAOrderBookingに対するWSDLは、ブラウザで次のURLを入力すると参照できます。

http://hostname:port/orabpel/default/SOAOrderBooking/1.0/SOAOrderBooking?wsdl