この章では、BPELプロセスに変換ロジックを追加する方法について説明します。
この章の内容は次のとおりです。
チュートリアルのこのフェーズでは、第6章「フォルト処理および例外管理の作成」で設計したプロセスに処理を追加します。このフェーズを実行する前に、前のフェーズが正常に完了したことを確認してください。チュートリアルのこのフェーズでは、新規BPELプロセスに変換ロジックを追加します。次の主要タスクを実行します。
POAcknowledgeという名前の新規BPELプロセスを作成します。
このBPELプロセスに、受信した注文データを送信用の注文確認データに変換する変換ロジックを追加します。
変換ロジックをテストします。これはスタンドアロン・テストで、完全なプロセスの設計とデプロイは行いません。 単に、Oracle JDeveloperから変換ロジックを作成しテストします。
この項では次のタスクを実行します。
Oracle JDeveloperから、次の手順に従ってPOAcknowledgeプロジェクトを作成しスキーマをインポートします。
「OrderBookapplication」を右クリックして「新規プロジェクト」を選択します。
「カテゴリ」の下で、「General」を開いて「Projects」をクリックします。
「項目」の下で、「BPELプロセス・プロジェクト」をクリックして「OK」をクリックします。
BPELプロジェクト作成ウィザード - プロジェクトの設定ウィンドウで、次の詳細を入力して「次へ」をクリックします。
| フィールド | 値 |
|---|---|
| 名前 | POAcknowledge |
| ネームスペース | デフォルト・パスを使用します。 |
| デフォルトのプロジェクト設定を使用 | BPELプロセスとBPELプロジェクトに同じ名前を使用し、デフォルトのプロジェクト・ディレクトリを使用するために、選択した状態にしておきます。 |
| テンプレート | 非同期BPELプロセス |
「入力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。
スキーマの選択ウィンドウで、SOA_Oracle_Home\bpel\samples\tutorials\127.OrderBookingTutorial\PracticeFilesディレクトリからOrderBookingPO.xsdを選択し、「開く」をクリックします。
これで注文スキーマがプロジェクトにインポートされます。
タイプの選択ウィンドウが表示されます。
「インポートしたスキーマ」→「OrderBookingPO.xsd」→「PurchaseOrder」の順に開いて選択します。
「OK」をクリックします。
POAcknowledgeRequestMessageメッセージ・タイプに、入力メッセージ・パート名のpayloadとメッセージ・パート要素のPurchaseOrderが自動的に割り当てられます。
「出力スキーマ要素」フィールドの右側にある懐中電灯アイコンをクリックします。
タイプの選択ウィンドウが表示されます。
右上隅にある最初のアイコン(「スキーマ・ファイルのインポート」)をクリックします。
スキーマのインポート・ウィンドウが表示されます。
「URL」フィールドの右側にある懐中電灯アイコンをクリックします。
スキーマの選択ウィンドウで、SOA_Oracle_Home\bpel\samples\tutorials\127.OrderBookingTutorial\PracticeFilesディレクトリからPOAcknowledge.xsdを選択し、「開く」をクリックします。
スキーマ・ファイルのインポート・ウィンドウで「OK」をクリックします。
これで注文スキーマがプロジェクトにインポートされます。
タイプの選択ウィンドウが表示されます。
2番目の「インポートしたスキーマ」→POAcknowledge.xsd→POAcknowledgeを開いて選択します。
「OK」をクリックします。
POAcknowledgeResponseMessageメッセージ・タイプに、出力メッセージ・パート名のpayloadとメッセージ・パート要素のPOAcknowledgeが自動的に割り当てられます。
「終了」をクリックします。
次のファイルが「アプリケーション・ナビゲータ」に表示されます。
bpel.xml、POAcknowledge.bpelおよびPOAcknowledge.wsdlファイルが、「POAcknowledge」→「インテグレーション・コンテンツ」の下に表示されます。
POAcknowledge.xsdおよびOrderBookingPO.xsdファイルが、「POAcknowledge」→「インテグレーション・コンテンツ」→「スキーマ」の下に表示されます。
「ファイル」メイン・メニューから「保存」を選択します。
BPELプロジェクトの作成時にメッセージ・タイプに自動的に割り当てられたメッセージ・パートの名前と要素を確認する場合は、POAcknowledge.bpelが表示されていることを確認し、次の手順を実行します。
「構造」セクションで「メッセージ・タイプ」→「プロセスWSDL - POAcknowledge.wsdl」→「POAcknowledgeRequestMessage」→「ペイロード」の順に開きます。
「payload」を右クリックし、「編集 メッセージ・パート」を選択して、メッセージ・パートの編集ウィンドウを表示します。
ここで、PurchaseOrder要素タイプの(入力パラメータ)メッセージ・パート名(「ペイロード」)が定義されます。
「取消」をクリックします。
「構造」セクションで「メッセージ・タイプ」→「プロセスWSDL - POAcknowledge.wsdl」→「POAcknowledgeResponseMessage」→「ペイロード」の順に開きます。
「payload」を右クリックし、「編集 メッセージ・パート」を選択して、メッセージ・パートの編集ウィンドウを表示します。
ここで、POAcknowledge要素タイプの(出力パラメータ)メッセージ・パート名(「ペイロード」)が定義されます。
「取消」をクリックします。
|
概要: ここでは、Transformアクティビティを使用して、受信した注文データを送信用の注文確認データにマップする変換ロジックを作成します。 |
「receiveInput」Receiveアクティビティと「callbackClient」Invokeアクティビティの間にTransformアクティビティをドラッグ・アンド・ドロップします。
Transformアクティビティをダブルクリックします。
「一般」タブをクリックします。
「名前」フィールドにtransformPOと入力します。
「トランスフォーメーション」タブをクリックして、トランスフォーメーション・ウィンドウを表示します。
「ソース変数」フィールドで「inputVariable」を選択します(自動的に「ソース・パート」フィールドで「payload」が選択されます)。
「ターゲット変数」フィールドで「outputVariable」を選択します(自動的に「ターゲット・パート」フィールドで「payload」が選択されます)。
「マッパー・ファイル」フィールドの右側にある2番目のアイコン(「マッピングの作成」アイコン)をクリックします。
ソース要素とターゲット要素をグラフィカルにマッピングするウィンドウが表示されます。このウィンドウでは、ソース要素をターゲット要素にドラッグ(マップ)できます。ファイルがすでに存在することを知らせるメッセージを受け取った場合は、3番目のアイコンをクリックしてトランスフォーメーション・ウィンドウにアクセスします。
ソース・スキーマおよびターゲット・スキーマ(両方のリストの一番上にある要素)を右クリックし、「すべて開く」を選択します。
次のソース要素を次のターゲット要素にドラッグ・アンド・ドロップします。このタスクを実行すると、各ソースとターゲットが線で接続されます。
|
注意: ソースに表示されるネームスペース値(ns1、poなど)は一定ではありません。自動的に表示されるネームスペース値を使用してください。 |
| ドラッグするソース | ターゲット |
|---|---|
| po:CustID | CustomerID |
| po:ID | ID |
| po:ShipTo | ShippingAddress
注意: マッピングの確認を求めるプロンプトが表示されたら「OK」をクリックします。このソースとターゲットの接続によって、すべてのサブ要素が自動的に接続されます。 |
トランスフォーメーション・ウィンドウには次のように表示されます。
|
注意: ソース要素を間違ったターゲット要素にドラッグ・アンド・ドロップした場合は、接続線を右クリックして「削除」を選択してください。 |
「コンポーネント・パレット」セクションから「String Functions」を選択します。
「po:ShipTo」→「po:Name」ソース・セクションに移動します。
「po:ShipTo」→「po:Name」の下にある「po:First」および「po:Last」ソース要素をconcat関数の左側にドラッグします。これで、concat関数に2本のソース・ラインが接続されます。
「ShippingAddress」ターゲット・セクションに移動します。
「Name」ターゲット要素をconcat関数の右側にドラッグします。これにより、concat関数にターゲット・ラインが引かれ、ソース要素の姓と名が連結されて、ターゲット要素内に1つの名前として表示されます。
別のconcat関数を、トランスフォーメーション・ウィンドウの中央にドラッグ・アンド・ドロップし、ソースの「BillTo」をターゲットの「BillingAddress」にマップします。
「po:BillTo」→「po:Name」ソース・セクションに移動します。
「po:BillTo」→「po:Name」の下にある「po:First」および「po:Last」ソース要素をconcat関数の左側にドラッグします。これで、concat関数に2本のソース・ラインが接続されます。
「BillingAddress」ターゲット・セクションに移動します。
「Name」ターゲット要素をconcat関数の右側にドラッグします。これにより、concat関数にターゲット・ラインが引かれ、ソース要素の姓と名が連結されて、ターゲット要素内に1つの名前として表示されます。
ターゲットの「項目」を選択し、右クリックします。XSL関数のリストが表示されます。
「XSLノードの追加」→「for-each」を選択します。
ソースの「po:OrderItems」セクションに移動します。
ソースの「po:Item」をfor-eachリンクにドラッグ・アンド・ドロップします。
ソースの「po:Item」をターゲットの「項目」(for-eachリンクの下)にドラッグ・アンド・ドロップします。
マッピングの確認を求めるプロンプトが表示されたら、「OK」をクリックします。自動的にすべてのサブ要素がマップされます。
これにより、ソースとターゲット間の1対多(1:M)のマッピングを指定する関係が定義されます。
残りのソースの注文要素を、ターゲットの注文確認要素にドラッグ・アンド・ドロップします。
| ドラッグするソース | ターゲット |
|---|---|
| po:SupplierPrice | SupplierPrice |
| po:SupplierName | SupplierName |
| po:OrderDate | OrderDate |
| po:OrderPrice | OrderPrice |
| po:OrderStatus | OrderStatus |
「ファイル」メイン・メニューから「保存」を選択します。
変換マッピング・ウィンドウを右クリックし、「テスト」を選択します。
XSLマップのテスト・ウィンドウが表示されます。
「ソースXMLファイルの生成」が選択されていることを確認します。
これでサンプルのXMLテスト・ファイルが作成されます。
すべてのデフォルト設定を使用します。
「OK」をクリックして変換ロジックをテストします。
サンプルのテスト結果が表示されます。 ソースXMLとターゲットXMLが並んでデータを表示し、その下にXSLのマップ・データが一緒に表示されます。 これがテスト結果のデフォルトのレイアウトです。
結果を確認します。
「ファイル」メイン・メニューから「保存」を選択します。
Transformation_1-Source.xml、Transformation_1-Target.xmlおよびTransformation_1.xslファイルを、それぞれのタイトル・タブの「x」ボタンをクリックして閉じます。
Transformation_1.xslという名前の変換ファイルが、「アプリケーション・ナビゲータ」セクションの「POAcknowledge」→「インテグレーション・コンテンツ」の下に表示されます。