6. 起動アクティビティの左側にある矢印を使用して、起動アクティビティで OrderSequence サービスを指します。
6.4.6 データベースへの「 Order 」情報の挿入
次の手順では、データベースに「Order」情報を挿入する起動アクティビティを作成します。
起動アクティビティを作成するには、次の手順を実行します。
1. 「コンポーネント・パレット」の「BPELサービス」メニューから「set_order_id」割当 てアクティビティの下に「起動」をドラッグアンドドロップします。
2. 「起動」スコープをダブルクリックします。
「起動」ダイアログボックスが表示されます。
3. 起動アクティビティでOrder_Processing_Service Partner Linkを指します。
「起動の編集」ダイアログボックスが表示されます。
4. 「名前」フィールドにCreate_Orderと入力します。
5. 「パートナ・リンク」フィールドには、自動的にOrder_Processing_Serviceと入力さ れます。デフォルト値をそのまま使用します。
6. 「操作」フィールドには、デフォルトでMergeと入力されます。デフォルト値をそのまま 使用します。
7. 「入力」フィールドの末尾にある「入力変数の自動作成」アイコンをクリックします。
「変数の作成」ダイアログボックスが表示されます。
8. 図6-27に示すように、「名前」フィールドにCreate_Order_merge_InputVariableと 入力してから、「OK」をクリックします。
図6-27 「変数の作成」ダイアログ ボックス
「起動の編集」ダイアログボックスが再度表示されます。
9. 「起動の編集」ダイアログボックスで「OK」をクリックします。
これで、データベースに「Order」情報を挿入する起動アクティビティが作成されました。
図6-28に、すべての詳細を入力した後の「起動の編集」ダイアログボックスを示します。
図6-28 「起動の編集」ダイアログ ボックス
6.4.7 変換アクティビティの作成
受信する「Purchase Order」の詳細を「Order」レコードにマッピングする必要があります。作 成されたこの注文に関するデータが、データベースに書き込まれる必要があります。データ ベースに書き込まれるデータは、特定の形式である必要があります(たとえば、フィールドの 名前はデータベース列と同じ名前である必要があります)。ただし、BPELプロセスのデータは 形式が異なっています。このため、変換を実行して、既存のデータをデータベースで要求され る形式に変更する必要があります。
変換は一般的な処理です。様々なサービスを起動してそれらのサービス間でデータを移動する 場合、ほとんどのデータのデータ形式は異なっているためです。この変換アクティビティでは、
TransformOrder.xslというファイルを作成して、受信注文情報をスキーマにマッピングし ます。
変換アクティビティを作成するには、次の手順を実行します。
1. 「コンポーネント・パレット」から「set_order_id」割当てアクティビティと
「Create_Order」起動アクティビティの間の空のスコープに「変換」アクティビティを ドラッグアンドドロップします。
2. 「変換」アクティビティをダブルクリックします。
「変換」ダイアログボックスが表示されます。
3. 図6-29に示すように、「一般」タブの「名前」フィールドにAssign_Create_Order_
Inputと入力します。
図6-29 「変換」ダイアログ ボックスの「一般」タブ
4. 「トランスフォーメーション」タブで、次の詳細を指定します。
a. 「作成」ボタンをクリックして、ソース変数を指定します。
「ソース変数」ダイアログボックスが表示されます。
b. 「ソース変数」メニューでは、デフォルトで「inputvariable」が選択されています。
ここでは、選択されているデフォルトをそのまま使用します。
c. デフォルトでは、「ソース・パート」フィールドの値はPayloadです。ここでは、デ フォルト値をそのまま使用します。
d. 「OK」をクリックします。
「変換」ダイアログボックスの「変換」タブが、ソースの詳細が入力された状態で再 度表示されます。
e. 「ターゲット変数」メニューで、「Create_Order_merge_InputVariable」を選択しま す。
f. 「ターゲット・パート」フィールドには、自動的にOrdersCollectionと入力されます。
g. 「マッピングの参照」ボタンをクリックして、Transformation_1.xslファイルを検索し ます。
「SOAリソース・ブラウザ」ダイアログボックスが表示されます。
h. 図6-30に示すように、「Transformation_1.xsl」を選択して、「OK」をクリック
図6-30 「SOAリソース・ブラウザ」ダイアログ ボックス
「マッパー・ファイル」フィールドには、マッパーファイル名が入力されます。
i. 「変換」ダイアログボックスで「OK」をクリックします。
「Oracle JDeveloper」ウィンドウでデータマッピングツールが開きます。
図6-31に、すべての詳細を指定した後の「変換」ダイアログボックスを示します。
図6-31 「変換」ダイアログ ボックスの「トランスフォーメーション」タブ
5. データマッピングツールで、ソース側の「OrderInfo」およびターゲット側の
「Orders」を展開して、表6-1に示す単純なマッピングを作成します。
Oracle JDeveloperのデータマッピングツールでは、左の列にソース側、右の列にター
ゲット側が示されます。ソース側からターゲット側にラベルをドラッグアンドドロップし て、単純なマッピングを作成します。
図6-32に、「OrderInfo」から「Orders」へのマッピングを完了した後の「Oracle
JDeveloper」ウィンドウのデータマッピングツールを示します。
図6-32 「OrderInfo」から「Orders」へのデータのマッピング 表6-1 「OrderInfo」から「Orders」へのデータのマッピング ソース client:SOAOrderBookingProcessRequest >
po:PurchaseOrder ターゲット > OrdersCollection > Orders
po:CustID custid
po:ID ordid
po:OrderItems itemsCollection
po:OrderInfo > po:OrderDate orderdate
po:OrderInfo > po:OrderPrice price
po:OrderInfo > po:OrderStatus status po:OrderInfo > po:OrderComments comments
図6-33 「コンポーネント・パレット」の「XSLTコンストラクト」
c. 「XSLTコンストラクト」メニューの「for-each」をターゲット側の「項目」にドラッ グアンドドロップします。
図6-34に示すように、ターゲット側の「itemsCollection」と「項目」の間に
「for-each」ラベルが表示されます。
図6-34 「for-each」ラベル
d. データマッピングツールのソース側で、「po:OrderItems」および「po: Item」を展開 します。
e. ソース側の「po:Item」をターゲット側の「for-each」にドラッグします。
ソース側の「po:Item」とターゲット側の「for-each」項目を結ぶ線が表示されます。
f. 表6-2に従って、項目フィールドをマッピングします。
7. ターゲット側の「itemid」をposition()関数にマッピングします。
8. 「ファイル」をクリックしてから、「すべて保存」をクリックしてTransformation_
1.xslファイルを保存します。
これで、ソースとターゲットの間でのデータのマッピングが完了しました。
図6-35に、変換アクティビティのマッピングが完了したデータマッパーを示します。
図6-35 変換アクティビティのマッピング
表6-2 詳細のマッピング
ソース >
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
6.5 「Get Customer Information」プロセスの BPEL 実装の理解
ここでは、「Get_Customer_Information」プロセスのBPEL実装について説明します。
この「Get_Customer_Information」スコープは、CustomerSvcサービスを起動して、顧 客に関する情報を取得します。このプロセスの入力の一部には、「CustID」と呼ばれるフィー ルドがあり、購入を行った顧客のIDが入力されます。ただし、購入商品の発送先、購入代金請 求のためのクレジットカード情報などの顧客に関するその他の情報も必要となります。クレ ジットカードの詳細は、データベース内の顧客のアカウント情報の一部です。この情報はプロ セスには渡されませんが、受信する「Purchase Order」レコードのCustIDがあるため、この 情報を取得できます。クレジットカード情報を取得するには、顧客IDを入力するとその顧客に 関する情報を戻すサービスCustomerSvcを起動します。BPELプロセスでは、このデータが 後で使用されます。
図6-36に、「Order_Booking_To_Process」サンプルの完了した「Get_Customer_
Information」プロセスを示します。
図6-36 「Get Customer Information」プロセス
「Get_Customer_Information」プロセスのBPEL実装には、次の項で説明するアクティビ ティが含まれています。
■ 6.5.1項「「Invoke_Get_Customer_Information」起動アクティビティ」
■ 6.5.2項「「Assign_Get_Customer_Information_Input」割当てアクティビティ」
6.5.1 「 Invoke_Get_Customer_Information 」起動アクティビティ
「Invoke_Get_Customer_Information」起動アクティビティの設計を参照するには、この アクティビティをダブルクリックします。
図6-37に、「Invoke_Get_Customer_Information」起動アクティビティを示します。
図6-37 「Invoke_Get_Customer_Information」起動アクティビティ
「Invoke_Get_Customer_Information」起動アクティビティは、CustomerService
Partner Linkにアクセスし、findCustomerById操作を起動します。この操作は、「Assign_
Get_Customer_Information_Input」割当てアクティビティで割り当てられている顧客ID を使用して起動されます。操作の結果は、GetCustomerOutput変数に格納されます。
6.5.2 「 Assign_Get_Customer_Information_Input 」割当てアクティビティ
「Assign_Get_Customer_Information_Input」割当てアクティビティの設計を参照する には、このアクティビティをダブルクリックします。この割当てアクティビティでは、
findCustomerById操作に顧客IDが割り当てられます。
「Assign_Get_Customer_Information_Input」割当てアクティビティでは、
GetCustomerInput変数に顧客ID情報が割り当てられます。この変数は、Invoke_Get_
Customer_Information起動アクティビティの入力変数として使用されます。
注意: Oracle JDeveloperの「デザイナ」ページでは、割当てアクティビ
ティは起動アクティビティの前に配置されていますが、最初に起動アクティ ビティが作成されてから割当てアクティビティが作成されます。
図6-38 「Get_Credit_Information」プロセス
「Get_Credit_Information」プロセスには、次の項で説明するアクティビティが含まれて います。
■ 6.6.1項「「Invoke_Get_Credit_Information」起動アクティビティ」
■ 6.6.2項「「Assign_GetCredit_Input」割当てアクティビティ」
6.6.1 「 Invoke_Get_Credit_Information 」起動アクティビティ
「Invoke_Get_Credit_Information」起動アクティビティの設計を参照するには、このア クティビティをダブルクリックします。
図6-39に、「Invoke_Get_Credit_Information」起動アクティビティを示します。
図6-39 「Invoke_Get_Credit_Information」起動アクティビティ
「Invoke_Get_Credit_Information」起動アクティビティは、ValidateCredit Partner Linkにアクセスし、VerifyCC操作を起動します。VerifyCC操作は、クレジットカードの種 類および番号を使用して信用格付けを取得する場合に使用します。