この章では、Oracle SOA Suiteの相互参照機能を使用して、別のアプリケーションで作成された同等のエンティティの識別子を関連付ける方法を説明します。
項目は次のとおりです。
相互参照を使用すると、別のアプリケーションで作成された同等のエンティティの値を動的にマップできます。
注意: 相互参照機能ではアプリケーション間の値を動的に統合できるのに対し、ドメイン値マップでは設計時に値を指定して実行時に値を編集できます。ドメイン値マップの詳細は、第44章「ドメイン値マップの使用」および第45章「ドメイン値マップでのOracle SOAコンポーザの使用」を参照してください。 |
あるアプリケーションでオブジェクトを作成または更新した場合は、その変更内容を別のアプリケーションにも伝播させる必要があります。たとえば、SAPアプリケーションで新規顧客が作成された場合、同じ顧客に関する新規エントリをOracle E-Business Suiteアプリケーション(EBS)でも作成する必要があります。ただし、統合対象の各アプリケーションでは、同じ情報の表現に異なるエンティティを使用している可能性があります。たとえば、SAPアプリケーションでの新規顧客の場合、Customer
データベースにはSAP_001
などの一意IDとともに新規の1行が挿入されます。この情報がOracle E-Business SuiteアプリケーションとSiebelアプリケーションに伝播するときには、EBS_1001
やSBL001
などの異なるIDとともに新規の1行が挿入される必要があります。このような場合、異なるアプリケーションで同一エンティティを参照するIDとして解釈できるように、各IDを相互にマップするなんらかの機能が必要になります。相互参照を使用すると、このマッピングを実行できます。
相互参照は表形式で保存されます。表46-1に、様々なアプリケーションの顧客IDに関する情報を含む相互参照表を示します。
あるアプリケーションで顧客情報が更新され、変更内容を他のアプリケーションに伝播させる必要がある場合にも、IDマッピングが必要になります。異なるIDを統合するには、相互参照表の全IDにマップする共通値統合パターンを使用する方法があります。たとえば、表46-1の相互参照表に、さらにCommon
という1列を追加できます。相互参照表を更新すると、表46-2のように表示されます。
表46-2 Common列が追加された相互参照表
SAP | EBS | SBL | Common |
---|---|---|---|
|
|
|
|
|
|
|
|
図46-1に、共通値統合パターンを使用して様々なアプリケーションのIDをマップする方法を示します。
相互参照表は、メタデータと実際のデータという2つの部分で構成されています。メタデータはOracle JDeveloperで作成された.xref
ファイルとして保存され、XMLファイルとしてメタデータ・サービス(MDS)リポジトリに格納されています。実際のデータは、デフォルトでSOAインフラストラクチャ・データベース・スキーマにあるデータベースのXREF_DATA
表に格納されます。相互参照エンティティごとにカスタム・データベース表を生成することもできます。データベース表は、相互参照エンティティのメタデータによって異なります。
次の2つの相互参照エンティティを考えてみます。
1つの汎用表にすべてのランタイム・データを保存するように選択すると、表46-5に示すように、データはXREF_DATA
コード表に保存されます。
表46-5 XREF_DATA表
XREF_TABLE_NAME | XREF_COLUMN_NAME | ROW_NUMBER | VALUE | IS_DELETED |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
このアプローチには、次のメリットがあります。
相互参照エンティティの列を追加、削除および変更するプロセスが単純です。
アプリケーションに対して相互参照エンティティを作成および削除するプロセスが明快です。
一方、このアプローチには次のデメリットがあります。
各相互参照セルはデータベースの異なる行にマップされるため、データベースに多数の行が生成されます。そのため、問合せのパフォーマンスが低下します。
汎用表では、XREF_TABLE_NAME
列およびXREF_COLUMN_NAME
列のデータが多数の行で繰り返されます。
これらの問題を解決するために、相互参照エンティティごとにカスタム・データベース表を生成できます。カスタム・データベース表は、相互参照エンティティのメタデータによって異なります。たとえば、XREF_ORDER
表およびXREF_CUSTOMER
表には、表46-6および表46-7に示すようなカスタム・データベース表を生成できます。
表46-6 XREF_ORDER表
ROW_ID | SIEBEL | COMMON | EBS |
---|---|---|---|
|
|
|
|
|
|
|
このアプローチでは、データ定義言語(DDL)スクリプトを実行してカスタム・データベース表を生成する必要があります。カスタム・データベース表の詳細は、第46.3.3項「カスタム・データベース表の作成方法」を参照してください。
相互参照表はSOAコンポジット・アプリケーションで作成し、トランスフォーメーション中にBPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントで使用できます。
相互参照メタデータを作成する手順は、次のとおりです。
Oracle JDeveloperで、相互参照を作成するSOAプロジェクトを選択します。
プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「カテゴリ」セクションから「SOA層」を選択し、次に「トランスフォーメーション」を選択します。
「項目」セクションから、「相互参照(XREF)」を選択します。
「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。
「ファイル名」フィールドに、相互参照ファイルの名前を指定します。たとえば、Customer
を指定します。
相互参照名は相互参照表を一意に識別するために使用します。相互参照リポジトリで2つの相互参照表に同じ名前を指定することはできません。相互参照ファイル名は、相互参照表の名前に拡張子.xref
が付いたものとなります。
「説明」フィールドに、相互参照の説明を入力します。例:
Cross reference of Customer identifiers.
「エンド・システム」フィールドで、エンド・システム名を入力します。
エンド・システムを相互参照表の相互参照列にマップします。たとえば、最初のエンド・システム名をSAP
、2番目のエンド・システム名をEBS
に変更できます。各エンド・システム名は相互参照内で一意であることが必要です。
「相互参照(XREF)の作成」ダイアログのサンプルは、図46-2に表示されています。
「OK」をクリックします。
図46-3に示すように、相互参照エディタが表示されます。このエディタを使用して相互参照を変更できます。
拡張子.xref
の付いたファイルが作成され、「アプリケーション・ナビゲータ」に表示されます。すべての.xref
ファイルは、例46-1に示すスキーマ定義(XSD)ファイルに基づいています。
例46-1 相互参照XSDファイル
<?xml version="1.0" encoding="UTF-8" ?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xmlns.oracle.com/xref" xmlns:tns="http://xmlns.oracle.com/xref" elementFormDefault="qualified"> <element name="xref" type="tns:xrefType"/> <complexType name="xrefType"> <sequence> <element name="table"> <complexType> <sequence> <element name="description" type="string" minOccurs="0" maxOccurs="1"/> <element name="columns" type="tns:columnsType" minOccurs="0" maxOccurs="1"/> <element name="rows" type="tns:rowsType" maxOccurs="1" minOccurs="0"/> </sequence> <attribute name="name" type="string" use="required"/> </complexType> </element> </sequence> </complexType> <complexType name="columnsType"> <sequence> <element name="column" minOccurs="1" maxOccurs="unbounded"> <complexType> <attribute name="name" type="string" use="required"/> </complexType> </element> </sequence> </complexType> <complexType name="rowsType"> <sequence> <element name="row" minOccurs="1" maxOccurs="unbounded"> <complexType> <sequence> <element name="cell" minOccurs="1" maxOccurs="unbounded"> <complexType> <attribute name="colName" type="string" use="required"/> </complexType> </element> </sequence> </complexType> </element> </sequence> </complexType> </schema>
前述されているように、すべてのランタイム・データはデフォルトでXREF_DATA
表に格納されます。カスタム・データベース表を作成する場合は、次の手順を実行します。
カスタム・データベース表を作成する手順は、次のとおりです。
相互参照エディタの「最適化」リストで「はい」を選択します。
図46-4に示すように、生成するカスタム・データベース表の名前が「表名」フィールドに表示されます。
「表名」フィールドは編集可能で、カスタム表の名前を変更できます。カスタム・データベース表の名前には、xref_
の接頭辞を付けてください。表名にxref_
接頭辞を付けないと、表を生成する際に次のエラー・メッセージが表示されます。
Table name should begin with 'xref_' and cannot be 'xref_data' or 'xref_deleted_data' which are reserved table names for XREF runtime.
「表DDLの生成」をクリックします。「XREFの最適化」ダイアログが表示されます。
同じ名前の表がすでに存在している場合、その表と関連する索引を削除するには、「削除DDLの生成」チェック・ボックスを選択します。このオプションを選択して「実行」をクリックすると、「削除DDLの実行の警告」ダイアログに、次のメッセージが表示されます。
Running the Drop DDL will remove the table and indexes, do you want to continue?
「実行」をクリックします。「表DDLの実行」ダイアログが表示されます。
「接続」リストから、使用するデータベース接続を選択します。
使用可能な接続がない場合は、「新規データベース接続を作成します。」をクリックし、図46-5に示すように、「データベース接続の作成」ダイアログを開きます。既存の接続を編集する場合は、その接続を選択して「選択したデータベース接続の編集」をクリックし、「データベース接続の編集」ダイアログを開きます。
必要な詳細をすべて入力し、「OK」をクリックします。「表DDLの実行」ダイアログの「接続」リストに値が移入されます。
「表DDLの実行」ダイアログで「OK」をクリックし、DDLスクリプトを実行します。
「表DDL実行結果」ダイアログに、DDLスクリプトの実行ステータスが表示されます。
カスタム・データベース表では、mode
およびdbtable
の2つの追加の属性が、第46.3.2項「相互参照作成時の処理内容」に記載されているスキーマ定義に追加されます。これらの属性は、次のように記述されてtable
要素に追加されます。
<attribute name="mode" type="string" default="generic" /> <attribute name="dbtable" type="string" default="xref_data"/>
Oracle JDeveloperのSOAコンポジット・アプリケーションで相互参照表を作成し、これを使用して実行時に列の値を参照できます。ただし、相互参照を使用して特定の値を参照するには、実行時に相互参照を移入する必要があります。相互参照表は、相互参照XPath関数を使用して移入できます。XPath関数を使用すると、相互参照列の移入、参照の実行および列の値の削除ができます。これらのXPath関数を「式ビルダー」ダイアログで使用して式を作成するか、またはXSLTマッパーで使用してトランスフォーメーションを作成できます。たとえば、xref:populateXRefRow
関数を使用して1つの値を相互参照列に移入するか、またはxref:populateXRefRow1M
関数を使用して複数の値を相互参照列に移入できます。
「式ビルダー」ダイアログには、BPELプロセス・サービス・コンポーネントまたはOracle Mediatorサービス・コンポーネントのassignアクティビティ、XSLトランスフォーメーションまたはフィルタ機能からアクセスできます。図46-6に、「式ビルダー」ダイアログで相互参照関数を選択する様子を示します。
XSLTマッパーは、XSLファイルを作成してXMLスキーマ間でデータを変換するときに表示されます。図46-7に、XSLTマッパーで相互参照関数を選択する様子を示します。
相互参照表を使用するには、実行時に相互参照表を移入する必要があります。データは、デフォルトでSOAインフラストラクチャ・データベース・スキーマにあるXREF_DATA
表に格納されます。xref:populateXRefRow
関数を使用して1つの値を相互参照列に移入するか、またはxref:populateXRefRow1M
関数を使用して複数の値を相互参照列に移入できます。
注意: 次の方法でデータ・ソースを構成することで、データを異なるデータベース・スキーマに格納することもできます。
|
xref:populateXRefRow
関数では、1つの値が相互参照列に移入されます。このxref:populateXRefRow
関数では、移入対象の相互参照値である文字列値が返されます。たとえば、表46-8に示すOrder
表には、EBS
、Common
およびSBL
という列があり、各列の値はそれぞれE100
、100
およびSBL_001
です。
例46-2に、xref:populateXRefRow
関数の構文を示します。
例46-2 xref:populateXRefRow関数
xref:populateXRefRow(xrefLocation as string, xrefReferenceColumnName as string, xrefReferenceValue as string, xrefColumnName as string, xrefValue as string, mode as string) as string
xrefLocation
: 相互参照表URI。
xrefReferenceColumnName
: 参照列の名前。
xrefReferenceValue
: 参照列名に対応する値。
xrefColumnName
: 移入される列の名前。
xrefValue
: 列に移入される値。
mode
: xref:populateXRefRow
関数の列移入モード。値ADD
、LINK
またはUPDATE
を指定できます。表46-9に、これらのモードを示します。
表46-9 xref:populateXRefRow関数のモード
モード | 説明 | 例外の原因 |
---|---|---|
|
参照値と追加対象の値を追加します。 たとえば、次のモードを考えてみます。 xref:populateXRefRow("customers.xref" ,"EBS","EBS100", "Common","CM001", "ADD") この場合、E |
次の理由により、例外が発生する可能性があります。
|
|
既存の参照値に対応する相互参照値を追加します。 たとえば、次のモードを考えてみます。 xref:populateXRefRow("customers.xref" ,"Common","CM001","SBL","SBL_ 001","LINK") この場合、 |
次の理由により、例外が発生する可能性があります。
|
|
既存の参照列と値のペアに対応する相互参照値を更新します。 たとえば、次のモードを考えてみます。 xref:populateXRefRow("customers.xref" ,"SBL","SBL_001", "SBL","SBL_ 1001","UPDATE") この場合、 |
次の理由により、例外が発生する可能性があります。
|
表46-10に、xref:populateXRefRow
関数のモードと各モードの例外条件を示します。
あるエンド・システム内の2つの値を、別のシステム内の1つの値に対応付けることができます。このようなシナリオでは、xref:populateXRefRow1M
関数を使用して相互参照列に値を移入する必要があります。たとえば、表46-11に示すように、SAP_001
およびSAP_0011
の値でEBS
およびSBL
アプリケーションの1つの値を参照します。SAP
などの列を移入するには、xref:populateXRefRow1M
関数を使用できます。
例46-3に、xref:populateXRefRow1M
関数の構文を示します。
例46-3 xref:populateXRefRow1M関数
xref:populateXRefRow1M(xrefLocation as string, xrefReferenceColumnName as string, xrefReferenceValue as string, xrefColumnName as string, xrefValue as string, mode as string) as string
xrefLocation
: 相互参照URI。
xrefReferenceColumnName
: 参照列の名前。
xrefReferenceValue
: 参照列名に対応する値。
xrefColumnName
: 移入される列の名前。
xrefValue
: 列に移入される値。
mode
: xref:populateXRefRow
関数の列移入モード。ADD
またはLINK
のいずれかの値を指定できます。表46-12に、これらのモードを示します。
表46-12 xref:populateXRefRow1M関数のモード
モード | 説明 | 例外の原因 |
---|---|---|
|
参照値と追加対象の値を追加します。 たとえば、次のモードを考えてみます。 xref:populateXRefRow1M("customers.xref"," EBS","EBS_1002", "SAP","SAP_0011","ADD") この場合、 |
次の理由により、例外が発生する可能性があります。
|
|
既存の参照値に対応する相互参照値を追加します。 たとえば、次のモードを考えてみます。 xref:populateXRefRow1M("customers.xref"," EBS","EBS_1002", "SAP","SAP_002","LINK") この場合、 |
次の理由により、例外が発生する可能性があります。
|
表46-13に、xref:populateXRefRow1M
関数のモードと各モードの例外条件を示します。
相互参照表に1列を移入する手順は、次のとおりです。
XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。
ソース要素をターゲット要素にドラッグ・アンド・ドロップします。
「コンポーネント・パレット」で、「拡張」を選択します。
「XREF Functions」を選択します。
ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「populateXRefRow」関数をドラッグ・アンド・ドロップします。
接続線上に「populateXRefRow」アイコンが表示されます。
「populateXRefRow」アイコンをダブルクリックします。
図46-8に示すように、「関数の編集 – populateXRefRow」ダイアログが表示されます。
「関数の編集 – populateXRefRow」ダイアログの各フィールドで、次の値を指定します。
「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「参照」をクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイした相互参照を選択できます。
「referenceColumnName」フィールドに、相互参照列の名前を入力します。
「referenceColumnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。
「referenceValue」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動できます。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。
「columnName」フィールドに、相互参照列の名前を入力します。
「columnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。
「value」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動できます。
「mode」フィールドに、相互参照表の列を移入する際のモードを入力します。たとえば、ADD
と入力します。
「参照」をクリックしてモードを選択することもできます。モードを選択できる「移入モードの選択」ダイアログが表示されます。
「OK」をクリックします。
図46-9に、移入後の「関数の編集 – populateXRefRow」ダイアログを示します。
移入後の相互参照表を使用して、値を参照できます。xref:lookupXRef
およびxref:lookupXRef1M
関数を使用すると、1つおよび複数の値の相互参照をそれぞれ参照できます。
xref:lookupXRef
関数を使用すると、参照列の値に対応する値を相互参照列で参照できます。たとえば、次の関数では、表46-2で説明した相互参照表のCommon
列で、SAP
列のSAP_001
値に対応する値を参照します。
xref:lookupXRef("customers.xref","SAP","SAP_001","Common",true())
例46-4に、xref:lookupXRef
関数の構文を示します。
例46-4 xref:lookupXRef関数
xref:lookupXRef(xrefLocation as string, xrefReferenceColumnName as string, xrefReferenceValue as string, xrefColumnName as string, needAnException as boolean) as string
xrefLocation
: 相互参照URI。
xrefReferenceColumnName
: 参照列の名前。
xrefReferenceValue
: 参照列名に対応する値。
xrefColumnName
: 値が参照される列の名前。
needAnException
: 値がtrue
に設定されると、値が見つからない場合に例外がスローされます。そうでない場合は、空の値が返されます。
実行時に、次の理由により例外が発生する可能性があります。
指定した名前の相互参照表が見つからない場合。
指定した列名が見つからない場合。
指定した参照値が空の場合。
複数の値が見つかった場合。
xref:lookupXRef1M
関数を使用すると、参照列の値に対応する複数の値を相互参照列で参照できます。xref:lookupXRef1M
関数では、複数のノードを含んだノードセットが返されます。ノードセット内の各ノードに値が含まれています。
たとえば、次の関数では、表46-11のSAP
列で、EBS
列のEBS_1001
値に対応する複数の値を参照します。
xref:lookupXRef1M("customers.xref","EBS","EBS_1001","SAP",true())
例46-5に、xref:lookupXRefRow1M
関数の構文を示します。
例46-5 xref:lookupXRefRow1M関数
xref:lookupXRef1M(xrefLocation as String, xrefReferenceColumnName as String, xrefReferenceValue as String, xrefColumnName as String, needAnException as boolean) as node-set
xrefLocation
: 相互参照URI。
xrefReferenceColumnName
: 参照列の名前。
xrefReferenceValue
: 参照列名に対応する値。
xrefColumnName
: 値が参照される列の名前。
needAnException
: 値がtrue
に設定されると、参照値が見つからない場合に例外がスローされます。そうでない場合は、空のノードセットが返されます。
xref:lookupXRefRow1M関数の例
表46-14に示すように、Siebel
、Billing1
およびBilling2
の3つの列があるOrder
表について考えてみます。
1対1マッピングの場合、xref:lookupPopulatedColumns("Order","Siebel","100","false")
メソッドは、例46-6に示す値を返します。
例46-6 xref:lookupPopulatedColumnsメソッド
<column name="BILLING1">101</column> <column name="BILLING2">102</column>
この場合は、Billing1
とBilling2
の両方の列が移入されます。
1対多マッピングの場合、xref:lookupPopulatedColumns("Order","Siebel","110","false")
メソッドは、例46-7に示す値を返します。
例46-7 xref:lookupPopulatedColumns
<column name="BILLING2">111</column> <column name="BILLING2">112</column>
この場合、Billing1
列は移入されません。
次の理由により、例外が発生する可能性があります。
指定した名前の相互参照表が見つからない場合。
指定した列名が見つからない場合。
指定した参照値が空の場合。
xref:lookupPopulatedColumns
関数を使用すると、特定の相互参照表、相互参照列および値に対して移入されたすべての列を参照できます。xref:lookupPopulatedColumns
関数では、各ノードに列名と対応する値が含まれたノードセットが返されます。
例46-8に、xref:LookupPopulatedColumns
関数の構文を示します。
例46-8 xref:LookupPopulatedColumns関数
xref:LookupPopulatedColumns(xrefTableName as String,xrefColumnName as String,xrefValue as String,needAnException as boolean)as node-set
xrefTableName
: 参照表の名前。
xrefColumnName
: 参照列の名前。
xrefValue
: 参照列名に対応する値。
needAnException
: 値がtrue
に設定されると、参照列に値が見つからない場合に例外がスローされます。そうでない場合は、空のノードセットが返されます。
次の理由により、例外が発生する可能性があります。
指定した名前の相互参照表が見つからない場合。
指定した列名が見つからない場合。
指定した参照値が空の場合。
相互参照表列を参照する手順は、次のとおりです。
XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。
ソース要素をターゲット要素にドラッグ・アンド・ドロップします。
「コンポーネント・パレット」で、「拡張」を選択します。
「XREF Functions」を選択します。
ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「lookupXRef」関数をドラッグ・アンド・ドロップします。
接続線上に「lookupXRef」アイコンが表示されます。
「lookupXRef」アイコンをダブルクリックします。
図46-10に示すように、「関数の編集 – lookupXRef」ダイアログが表示されます。
「関数の編集 – lookupXRef」ダイアログのフィールドで、次の値を指定します。
「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「参照」をクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイされた相互参照を選択できます。
「referenceColumnName」フィールドに、相互参照列の名前を入力します。
「referenceColumnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。
「referenceValue」フィールドでは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを使用できます。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。
「columnName」フィールドに、相互参照列の名前を入力します。
「columnName」フィールドの右側にある「参照」をクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。
「needException」フィールドの右側にある「参照」をクリックします。「needException」ダイアログが表示されます。値が見つからない場合に例外が発生するように指定するには、「はい」を選択します。それ以外の場合は「いいえ」を選択します。
「OK」をクリックします。
図46-11に、移入後の「関数の編集 – lookupXRef」ダイアログを示します。
xref:markForDelete
関数を使用すると、相互参照表の値を削除できます。列の値には、削除済のマークが付きます。この関数では、削除に成功した場合はtrue
が返されます。それ以外の場合はfalse
が返されます。
削除マークが付いている列値は、値が存在しないものとして処理されます。したがって、xref:populateXRefRow
関数をADD
モードで使用して同じ列を移入できます。
注意: 削除マークが付いた列値をxref:populateXRefRow 関数のLINK モードで参照値として使用すると、エラーが発生します。 |
相互参照表行には最低2つのマッピングが必要です。1行に存在するマッピングが2つのみの場合、一方の値に削除マークを付けると、他方の列の値も削除されます。
例46-9に、xref:markForDelete
関数の構文を示します。
例46-9 xref:markForDelete関数
xref:markForDelete(xrefTableName as string, xrefColumnName as string, xrefValueToDelete as string) return as boolean
xrefTableName
: 相互参照表の名前。
xrefColumnName
: 値を削除する列の名前。
xrefValueToDelete
: 削除する値。
次の理由により、例外が発生する可能性があります。
指定した名前の相互参照表が見つからない場合。
指定した列名が見つからない場合。
指定した値が空の場合。
指定した値が列内で見つからない場合。
複数の値が見つかった場合。
相互参照表の値を削除する手順は、次のとおりです。
XSLTマッパーで、「ソース」および「ターゲット」ペインのツリーを開きます。
ソース要素をターゲット要素にドラッグ・アンド・ドロップします。
「コンポーネント・パレット」で、「拡張」を選択します。
「XREF Functions」を選択します。
ソース・オブジェクトをターゲット・オブジェクトに接続している線に、「markForDelete」関数をドラッグ・アンド・ドロップします。
接続線上に「markForDelete」アイコンが表示されます。
「markForDelete」アイコンをダブルクリックします。
図46-12に示すように、「関数の編集 – markForDelete」ダイアログが表示されます。
「関数の編集 – markForDelete」ダイアログの各フィールドで次の値を指定します。
「xrefLocation」フィールドに、相互参照ファイルのロケーションURIを入力します。
「xrefLocation」フィールドの右側にある「検索」アイコンをクリックして、相互参照ファイルを選択します。「リソース・パレット」を使用して、MDSおよびMDSの共有ロケーションからもすでにデプロイされた相互参照を選択できます。
「columnName」フィールドに、相互参照表列の名前を入力します。
「columnName」フィールドの右側にある「検索」アイコンをクリックして、以前に選択した相互参照に定義されている列から列名を選択できます。
「value」フィールドは、値を手動で入力するか、[Ctrl]キーを押しながら[Space]キーを押してXPathビルディング・アシスタントを起動します。上へ移動および下へ移動するキーを押して、リスト内のオブジェクトを配置し、[Enter]キーを押してそのオブジェクトを選択します。
図46-13に、移入後の「関数の編集 – markForDelete」ダイアログを示します。
「OK」をクリックします。
この相互参照ユースケースは、Oracle EBS、SAPおよびSiebelインスタンス間の統合シナリオを実装します。このユースケースでは、SAP_01
表で挿入、更新または削除操作を実行すると、EBS
およびSBL
表で対応するデータが挿入または更新されます。図46-14に、このユースケースの概要を示します。
この項で説明するサンプル・ファイルをダウンロードするには、次のURLを参照してください。
https://soasamples.samplecode.oracle.com/#mediator
この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを示します。これらのタスクは、表示されている順番で実行する必要があります。
Oracle Databaseおよびデータベース・アダプタを構成する手順は、次のとおりです。
このユースケースには、SCOTT
データベース・アカウントとパスワードTIGER
が必要です。SCOTT
アカウントのロックが解除されている必要があります。
SYSDBA
でログインしてから、XrefOrderApp1M/sql
ディレクトリにあるsetup_user.sql
スクリプトを実行してアカウントのロックを解除できます。
XrefOrderApp1M/sql
ディレクトリにあるcreate_schema.sql
スクリプトを実行して、このユースケースに必要な表を作成します。
XrefOrderApp1M/sql
ディレクトリにあるcreate_app_procedure.sql
スクリプトを実行して、この統合に組み込む様々なアプリケーションをシミュレートするプロシージャを作成します。
OH/rcu/integration/soainfra/sql/xref/
ディレクトリにあるcreateschema_xref_oracle.sql
スクリプトを実行し、ランタイムの相互参照データを格納する相互参照表を作成します。
ra.xml
ファイルとweblogic-ra.xml
ファイルを、$BEAHOME/META-INF
から、使用しているコンピュータで新規作成したMETA-INF
ディレクトリにコピーします。
次のとおり、$BEAHOME/META-INF
ディレクトリにあるweblogic-ra.xml
ファイルを編集します。
次のように、プロパティをxADataSourceName
に変更します。
<property> <name>xADataSourceName</name> <value>jdbc/DBConnection1</value> </property>
jndi-name
を次のように変更します。
<jndi-name> eis/DB/DBConnection1</jndi-name>
このサンプルではeis/DB/DBConnection1
を使用して新規メッセージのSAP表をポーリングし、Oracle EBSおよびSiebelインスタンスをシミュレートするプロシージャに接続します。
ra.xml
ファイルとweblogic-ra.xml
ファイルをRARファイルとしてパッケージ化し、Oracle WebLogic Server管理コンソールを使用してそのRARファイルをデプロイします。
Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。
jndi-name=jdbc/DBConnection1
user=scott
password=tiger
url=jdbc:oracle:thin:@host:port:service
connection-factory factory-class=oracle.jdbc.pool.OracleDataSource
Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。
jndi-name=jdbc/xref
user=scott
password=tiger
url=jdbc:oracle:thin:@host:port:service
connection-factory factory-class=oracle.jdbc.pool.OracleDataSource
Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。
「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。
「アプリケーション名」フィールドでXrefCustApp
と入力し、「次へ」をクリックします。
「SOAプロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにXrefCustApp
と入力し、「次へ」をクリックします。
SOA設定の構成ページが表示されます。
「コンポジット・テンプレート」リストから「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」は新規のアプリケーションやプロジェクトで更新され、「SOAコンポジット・エディタ」には空白のコンポジットがあります。
「ファイル」メニューから「すべて保存」を選択します。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、相互参照表を作成する必要があります。
相互参照表を作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「XrefCustApp」プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。
「項目」リストで「相互参照(XREF)」を選択し、「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。
「ファイル名」フィールドで、customer.xref
と入力します。
「エンド・システム」フィールドで、SAP_01
およびEBS_i76
と入力します。
「OK」をクリックします。
相互参照エディタが表示されます。
「追加」をクリックします。
新しい行が追加されます。
新しく追加された行にエンド・システム名としてSBL_78
を入力します。
「追加」をクリックし、エンド・システム名としてCommon
を入力します。
図46-15に示すように、相互参照エディタが表示されます。
「ファイル」メニューから、「すべて保存」を選択して、相互参照エディタを閉じます。
データベース・アダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」で「SOA」を選択します。
「データベース・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、SAP
と入力します。
「次へ」をクリックします。
「サービス接続」ページが表示されます。
「アプリケーション接続」フィールドで、「DBConnection1」を選択します。
「JNDI名」フィールドに、eis/DB/DBConnection1
と入力します。
「次へ」をクリックします。
「操作タイプ」ページが表示されます。
「表の新規レコードまたは更新されたレコードをポーリング」を選択し、「次へ」をクリックします。
「表の選択」ページが表示されます。
「表のインポート」をクリックします。
「表のインポート」ダイアログが表示されます。
「スキーマ」から「Scott」を選択します。
「名前フィルタ」フィールドで%SAP%
と入力し、「問合せ」をクリックします。
「選択可能」フィールドにSAP_01
表名が移入されます。
「SAP_01」をダブルクリックします。
「選択済」フィールドに「SAP_01」が移入されます。
「OK」をクリックします。
ここで「表の選択」ページに「SAP_01」表が含まれます。
「SAP_01」を選択し、「次へ」をクリックします。
「主キーの定義」ページが表示されます。
「ID」を主キーとして選択し、「次へ」をクリックします。
「リレーションシップ」ページが表示されます。
「次へ」をクリックします。
「属性のフィルタ処理」ページが表示されます。
「次へ」をクリックします。
「読取り後」ページが表示されます。
「[SAP_01]表のフィールドの更新 (論理削除)」を選択し、「次へ」をクリックします。
「論理削除」ページが表示されます。
「論理削除」フィールドで、「LOGICAL_DEL」を選択します。
「読取り値」フィールドで、Y
と入力します。
「未読取り値」フィールドで、N
と入力します。
図46-16は、アダプタ構成ウィザードの「論理削除」ページを示しています。
「次へ」をクリックします。
「ポーリング・オプション」ページが表示されます。
「次へ」をクリックします。
「選択条件の定義」ページが表示されます。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図46-17に示すように、SAPという名前のデータベース・アダプタ・サービスが作成されます。
「ファイル」メニューから「すべて保存」を選択します。
EBSおよびSBL外部参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」で「SOA」を選択します。
「データベース・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、EBS
と入力します
「次へ」をクリックします。
「サービス接続」ページが表示されます。
「アプリケーション接続」フィールドで、「DBConnection1」を選択します。
「JNDI名」フィールドに、eis/DB/DBConnection1
と入力します。
「次へ」をクリックします。
「操作タイプ」ページが表示されます。
「ストアド・プロシージャまたはファンクションの呼出し」を選択し、「次へ」をクリックします。
「ストアド・プロシージャの指定」ページが表示されます。
「スキーマ」から「Scott」を選択します。
「参照」をクリックします。
「ストアド・プロシージャ」ダイアログが表示されます。
図46-18に示すように、「POPULATE_APP_INSTANCE」を選択します。
「OK」をクリックします。
図46-19に示すように、「ストアド・プロシージャの指定」ページが表示されます。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図46-20に、SOAコンポジット・エディタのEBS参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
ステップ2からステップ16を繰り返し、SBL
という名前の外部参照をもう1つ作成します。
このタスクを完了すると、図46-21に示すように、SOAコンポジット・エディタが表示されます。
Loggerファイル・アダプタ外部参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、Logger
と入力します。
「次へ」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで、「Write File」を選択します。
「次へ」をクリックします。
「ファイル構成」ページが表示されます。
「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。
ファイル・ネーミング規則フィールドで、output.xml
と入力し、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「SCOTT_POPULATE_APP_INSTANCE.xsd」の順に移動し、「OutputParameters」を選択します。
「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図46-22に、SOAコンポジット・エディタのLogger参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
Oracle Mediatorサービス・コンポーネントを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。
「テンプレート」リストから、「インタフェースを後で定義」を選択します。
「OK」をクリックします。
Mediator1
という名前のOracle Mediatorが作成されます。
図46-23に示すように、「SAP」サービスを「Mediator1」に接続します。
「ファイル」メニューから「すべて保存」を選択します。
「コンポーネント・パレット」から別の「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。
「テンプレート」リストから、「WSDLからのインタフェース定義」を選択します。
「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。
「WSDLファイル」フィールドの右側にある「既存のWSDLを検索します。」をクリックします。
Common.wsdlファイルに移動して選択します。Common.wsdlファイルは、Samplesフォルダにあります。
「OK」をクリックします。
「OK」をクリックします。
Commonという名前のOracle Mediatorが作成されます。
次の操作のルーティング・ルールを指定する必要があります。
挿入
更新
ID更新
削除
挿入操作のルーティング・ルールを作成する手順は、次のとおりです。
「Mediator1」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「insert」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation='INSERT'
「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_INSERT.xsl
と入力します。
「OK」をクリックします。
XSLTマッパーに、「SAP_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「top:SAP01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「自動マップ中」オプションから、「祖先名を考慮した要素の一致」の選択を解除します。
「OK」をクリックします。
図46-24に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow」関数をドラッグ・アンド・ドロップします。
「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_01"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:id
と入力します。
「columnName」フィールドで"Common"
と入力するか、「検索」をクリックして列名を選択します。
「value」フィールドに、oraext:generate-guid()
と入力します。
「mode」フィールドで"Add"
と入力するか、「検索」をクリックして、このモードを選択します。
図46-25は、移入後の「関数の編集 – populateXRefRow」ダイアログを示しています。
図46-25 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_INSERT.xsl」ファイルを閉じます。
図46-26に示すように、「ルーティング・ルール」セクションが表示されます。
更新操作のルーティング・ルールを作成する手順は、次のとおりです。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「update」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation='UPDATE'
「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATE.xsl
と入力します。
「OK」をクリックします。
「SAP_TO_COMMON_UPDATE.xsl」ファイルが表示されます。
「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_01"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:id
と入力します。
「columnName」フィールドで"COMMON"
と入力するか、「検索」をクリックして列名を選択します。
「needException」フィールドでtrue()
と入力するか、「検索」をクリックして、このモードを選択します。
図46-27は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。
図46-27 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
図46-28に示すように、「ルーティング・ルール」セクションが表示されます。
ID更新操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、updateID
操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「updateid」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation = 'UPDATEID'
「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATEID.xsl
と入力します。
「OK」をクリックします。
「SAP_TO_COMMON_UPDATEID.xsl」ファイルが表示されます。
「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow」関数をドラッグ・アンド・ドロップします。
「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_01"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、/top:Sap01Collection/top:Sap01/top:refId
と入力します。
「columnName」フィールドで"SAP_01"
と入力するか、「検索」をクリックして列名を選択します。
「value」フィールドに、/top:Sap01Collection/top:Sap01/top:Id
と入力します。
「mode」フィールドで"UPDATE"
と入力するか、「検索」をクリックして、このモードを選択します。
図46-29は、移入後の「関数の編集 – populateXRefRow」ダイアログを示しています。
図46-29 「関数の編集 – populateXRefRow」ダイアログ: XrefCustAppユースケース
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_01"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、次の値を入力します。
xref:populateXRefRow("customer.xref","SAP_
01",/top:Sap01Collection/top:Sap01/top:refId,"SAP_
01",/top:Sap01Collection/top:Sap01/top:id,"UPDATE")
.
「columnName」フィールドで"COMMON"
と入力するか、「検索」をクリックして列名を選択します。
「needException」フィールドでfalse()
と入力するか、「検索」をクリックして、このモードを選択します。
図46-30は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。
図46-30 「関数の編集 – lookupXRef」ダイアログ: XrefCustAppユースケース
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATEID.xsl」ファイルを閉じます。
図46-31に示すように、「ルーティング・ルール」セクションが表示されます。
削除操作のルーティング・ルールを作成する手順は、次のとおりです。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「delete」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap01Collection/top:Sap01Collection/top:Sap01/top:operation = 'DELETE'
「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_DELETE
.xslと入力します。
「OK」をクリックします。
「SAP_TO_COMMON_DELETE.xsl」ファイルが表示されます。
<sources>を右クリックし、「パラメータの追加」を選択します。
「パラメータの追加」ダイアログが表示されます。
「ローカル名」フィールドに、COMMONID
と入力します。
「デフォルト値の設定」を選択します。
「式」を選択します。
「XPath式」フィールドに、次の式を入力します。
xref:lookupXRef("customer.xref","SAP_ 01",/top:Sap01Collection/top:Sap01/top:id,"COMMON",false()).
「OK」をクリックします。
「top:Sap01」ソース要素を「inp1:Customer」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「top:id」と「inp1:id」を接続している線を削除します。
「COMMONID」を「inp1:id」に接続します。
「inp1:id」を右クリックして「XSLノードの追加」を選択してから、「if」を選択します。
新しいノード「if」
が、「inp1:customer」
と「inp1:id」
の間に挿入されます。
「top:id」を「if」ノードに接続します。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:idノードとifノードを接続している線まで「markForDelete」関数をドラッグ・アンド・ドロップします。
「markForDelete」アイコンをダブルクリックします。
「関数の編集 - markForDelete」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「columnName」フィールドで"SAP_01"
と入力するか、「検索」をクリックして列名を選択します。
「value」フィールドに、/top:Sap01Collection/top:Sap01/top:Id
と入力します。
図46-32は、移入後の「関数の編集 – markForDelete」ダイアログを示しています。
図46-32 「関数の編集 – markForDelete」ダイアログ: XrefCustAppユースケース
「OK」をクリックします。
図46-33に示すように、「SAP_TO_COMMON_DELETE.xsl」ファイルが表示されます。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_DELETE.xsl」ファイルを閉じます。
図46-34に示すように、「ルーティング・ルール」セクションが表示されます。
「Common」Oracle Mediatorの次の操作についてルーティング・ルールを指定する必要があります。
挿入
削除
更新
ID更新
挿入操作のルーティング・ルールを作成する手順は、次のとおりです。
「Common」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「SBL」の順に移動します。
「SBL」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_INSERT.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_SBL_INSERT.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
図46-35に示すように、トランスフォーメーションが作成されます。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_INSERT.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_INSERT.xsl
と入力します。
「リクエストをリプライ・ペイロードに含める」を選択します。
「OK」をクリックします。
「SBL_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:X:APP_ID」に接続します。
「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。
「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: "customer.xref"
referenceColumnName: "Common"
referenceValue: $initial.Customers/inp1:Customers/inp1:Customer/inp1:Id
columnName: "SBL_78"
value: /db:OutputParameters/db:X_APP_ID
mode: "LINK"
「OK」をクリックします。
図46-36に示すように、「SBL_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_INSERT.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('INSERT-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-37に示すように、「insert」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
ステップ2からステップ34を繰り返し、EBSというもう1つのターゲット・サービスおよびそのルーティング・ルールを指定します。
図46-38に、SBLおよびEBSターゲット・サービスの「insert」操作セクションを示します。
削除操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、削除操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「SBL」の順に移動します。
「SBL」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_DELETE.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_SBL_DELETE.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
図46-39に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」からinp1:idとdb:XCUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: "customer.xref"
referenceColumnName: "Common"
referenceValue: /inp1:Customers/inp1:Customer/inp1:Id
columnName: "SBL_78"
needException: false()
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_DELETE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_DELETE.xsl
と入力します。
「OK」をクリックします。
「SBL_TO_COMMON_DELETE.xsl」ファイルが表示されます。
「db:X_APP_ID」ソース要素を「db:X:APP_ID」ターゲットに接続します。
「コンポーネント・パレット」から接続線上に「markForDelete」関数をドラッグ・アンド・ドロップします。
「markForDelete」アイコンをダブルクリックします。
「関数の編集 - markForDelete」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: "customer.xref"
columnName: "SBL_78"
value: /db:OutputParameters/db:X_APP_ID
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_DELETE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('DELETE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-40に示すように、「delete」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
ステップ1からステップ36を繰り返し、EBSというもう1つのターゲット・サービスおよびルーティング・ルールを指定します。
図46-41に、SBLおよびEBSターゲット・サービスの「delete」操作セクションを示します。
更新操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、更新操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「SBL」の順に移動します。
「SBL」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_UPDATE.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_SBL_UPDATE.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
図46-39に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」からinp1:idとdb:XCUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: "customer.xref"
referenceColumnName: "Common"
referenceValue: /inp1:Customers/inp1:Customer/inp1:Id
columnName: "SBL_78"
needException: true()
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_UPDATE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SBL_TO_COMMON_UPDATE.xsl
と入力します。
「OK」をクリックします。
「SBL_TO_COMMON_UPDATE.xsl」ファイルが表示されます。
「db:X:APP_ID」ソース要素を「db:X:APP_ID」に接続します。
「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('UPDATE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-42に示すように、「update」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
ステップ1からステップ32を繰り返し、EBSというもう1つのターゲット・サービスおよびそのルーティング・ルールを指定します。
図46-43に、SBLおよびEBSターゲット・サービスの「update」操作セクションを示します。
ID更新操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、ID更新操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「SBL」の順に移動します。
「SBL」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_SBL_UPDATEID.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_SBL_UPDATEID.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
図46-39に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」からinp1:idとdb:X_CUSTOMER_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: customer.xref
referenceColumnName: Common
referenceValue: /inp1:Customers/inp1:Customer/inp1:Id
columnName: SBL_78
needException: false()
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_SBL_UPDATEID.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefCustApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「リクエストをリプライ・ペイロードに含める」を選択します。
「OK」をクリックします。
「SBL_TO_COMMON_UPDATEID.xsl」ファイルが表示されます。
「inp1:Customers」ソース要素を「db:X:APP_ID」に接続します。
「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。
「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: customer.xref
referenceColumnName: Common
referenceValue: $initial.Customers/inp1:Customers/inp1:Customer/inp1:Id
columnName: SBL_78
value: /db:OutputParameters/db:X_APP_ID
mode: UPDATE
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SBL_TO_COMMON_UPDATEID.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('UPDATEID-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-44に示すように、「updateid」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
ステップ1からステップ36を繰り返し、EBSというもう1つのターゲット・サービスおよびルーティング・ルールを指定します。
図46-45に、SBLおよびEBSターゲット・サービスの「updateid」操作セクションを示します。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第40.7.1.1.1項「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、XrefCustAppコンポジット・アプリケーションをデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、第40.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ」を参照してください。
デプロイしたXrefCustAppアプリケーションは、XrefCustApp/sql
フォルダのinsert_sap_record.sql
ファイルから任意のコマンドを使用することで実行できます。正常に完了すると、レコードがEBS
およびSBL
表に挿入および更新され、Logger参照がoutput.xml
ファイルに出力を書き出します。
実行中のインスタンスの監視には、次のURLにあるOracle Enterprise Manager Fusion Middleware Controlを使用できます。
http://hostname:port_number/em
ここで、hostname
は、Oracle SOA Suiteインフラストラクチャをインストールしたホストです。port_number
はサービスを実行するポートです。
相互参照ユースケースは、2つのエンド・システム(Oracle EBSインスタンスおよびSAPインスタンス)間の統合シナリオを実装します。このユースケースでは、注文はSAPからEBSに渡されます。SAPでは注文は一意のIDで表されますが、EBSではこの注文がID1とID2の2つの注文に分割されます。このシナリオはデータベース・アダプタを使用して作成されます。SAP表の更新レコードまたは新規レコードをポーリングすると、SAPインスタンスが作成されます。EBSでは、このインスタンスがプロシージャによってシミュレートされ、表に移入されます。図46-46に、このユースケースの概要を示します。
この項で説明するサンプル・ファイルをダウンロードするには、次のURLを参照してください。
https://soasamples.samplecode.oracle.com/#mediator
この項では、SOAコンポジット・アプリケーションを作成、構築およびデプロイするための設計時タスクを説明します。これらのタスクは、表示されている順番で実行する必要があります。
Oracle Databaseおよびデータベース・アダプタを構成する手順は、次のとおりです。
このユースケースには、SCOTT
データベース・アカウントとパスワードTIGER
が必要です。SCOTT
アカウントのロックが解除されている必要があります。
SYSDBA
でログインしてから、XrefOrderApp1M/sql
フォルダにあるsetup_user.sql
スクリプトを実行してアカウントのロックを解除できます。
XrefOrderApp1M/sql
フォルダにあるcreate_schema.sql
スクリプトを実行して、このユースケースに必要な表を作成します。
XrefOrderApp1M/sql
フォルダにあるcreate_app_procedure.sql
スクリプトを実行して、この統合に組み込む様々なアプリケーションをシミュレートするプロシージャを作成します。
Oracle_Home
/rcu/integration/soainfra/sql/xref/
フォルダにあるcreateschema_xref_oracle.sql
スクリプトを実行し、ランタイムの相互参照データを格納する相互参照表を作成します。
ra.xml
ファイルとweblogic-ra.xml
ファイルを、$BEAHOME/META-INF
から、使用しているコンピュータで新規作成したMETA-INF
ディレクトリにコピーします。
weblogic-ra.xml
ファイルを編集します。このファイルは、SOAアプリケーションの$BEAHOME/src/oracle/tip/adapter/db/test/deploy/weblogic/META-INF
フォルダにあります。
次のように、プロパティをxADataSourceName
に変更します。
<property> <name>xADataSourceName</name> <value>jdbc/DBConnection1</value> </property>
jndi-name
を次のように変更します。
<jndi-name> eis/DB/DBConnection1</jndi-name>
このサンプルではeis/DB/DBConnection1
を使用して新規メッセージのSAP
表をポーリングし、Oracle EBSおよびSiebelインスタンスをシミュレートするプロシージャに接続します。
ra.xml
ファイルとweblogic-ra.xml
ファイルをRARファイルとしてパッケージ化し、Oracle WebLogic Server管理コンソールを使用してそのRARファイルをデプロイします。
Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。
jndi-name=jdbc/DBConnection1
user=scott
password=tiger
url=jdbc:oracle:thin:@host:port:service
connection-factory factory-class=oracle.jdbc.pool.OracleDataSource
Oracle WebLogic Server管理コンソールを使用して、次の値を持つデータ・ソースを作成します。
jndi-name=jdbc/xref
user=scott
password=tiger
url=jdbc:oracle:thin:@host:port:service
connection-factory factory-class=oracle.jdbc.pool.OracleDataSource
Oracle JDeveloperのアプリケーションおよびプロジェクトを作成する手順は、次のとおりです。
Oracle JDeveloperで「ファイル」をクリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「新規ギャラリ」で「一般」ノードを開き、「アプリケーション」カテゴリを選択します。
「項目」リストで「SOAアプリケーション」を選択し、「OK」をクリックします。
SOAアプリケーションの作成ウィザードが表示されます。
「アプリケーション名」フィールドでXRefOrderApp
と入力し、「次へ」をクリックします。
「プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにXRefOrderApp
と入力し、「次へ」をクリックします。
SOA設定の構成ページが表示されます。
「コンポジット・テンプレート」リストで「空のコンポジット」を選択し、「終了」をクリックします。
Oracle JDeveloperの「アプリケーション・ナビゲータ」は新規のアプリケーションやプロジェクトで更新され、「SOAコンポジット・エディタ」には空白のプロジェクトがあります。
「ファイル」メニューから「すべて保存」を選択します。
ユースケース用のアプリケーションおよびプロジェクトを作成した後は、相互参照表を作成する必要があります。
相互参照表を作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、「XRefOrderApp」プロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログで「SOA層」ノードを開き、「トランスフォーメーション」カテゴリを選択します。
「項目」リストで「相互参照(XREF)」を選択し、「OK」をクリックします。
「相互参照(XREF)の作成」ダイアログが表示されます。
「ファイル名」フィールドにorder.xref
と入力します。
「エンド・システム」フィールドで、SAP_05
およびEBS_i75
と入力します。
「OK」をクリックします。
相互参照エディタが表示されます。
「追加」をクリックします。
新しい行が追加されます。
「エンド・システム」名としてCOMMONを入力します。
図46-47に示すように、相互参照エディタが表示されます。
「ファイル」メニューから、「すべて保存」を選択して、相互参照エディタを閉じます。
データベース・アダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」で「SOA」を選択します。
「データベース・アダプタ」を選択し、「公開されたサービス」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、SAP
と入力します。
「次へ」をクリックします。
「サービス接続」ページが表示されます。
「接続」フィールドで、「DBConnection1」を選択します。
「JNDI名」フィールドに、eis/DB/DBConnection1
と入力します。
「次へ」をクリックします。
「操作タイプ」ページが表示されます。
「表の新規レコードまたは更新されたレコードをポーリング」を選択し、「次へ」をクリックします。
「表の選択」ページが表示されます。
「表のインポート」をクリックします。
「表のインポート」ダイアログが表示されます。
「スキーマ」から「Scott」を選択します。
「名前フィルタ」フィールドで%SAP%
と入力し、「問合せ」をクリックします。
「選択可能」フィールドに「SAP_05」表名が移入されます。
「SAP_05」をダブルクリックします。
「選択済」フィールドに「SAP_05」が移入されます。
「OK」をクリックします。
ここで「表の選択」ページに「SAP_05」表が含まれます。
「SAP_05」を選択し、「次へ」をクリックします。
「主キーの定義」ページが表示されます。
「ID」を主キーとして選択し、「次へ」をクリックします。
「リレーションシップ」ページが表示されます。
「次へ」をクリックします。
「属性のフィルタ処理」ページが表示されます。
「次へ」をクリックします。
「読取り後」ページが表示されます。
「[SAP_05]表のフィールドの更新 (論理削除)」を選択し、「次へ」をクリックします。
「論理削除」ページが表示されます。
「論理削除」フィールドで、「LOGICAL_DEL」を選択します。
「読取り値」フィールドで、Y
と入力します。
「未読取り値」フィールドで、N
と入力します。
図46-16は、アダプタ構成ウィザードの「論理削除」ページを示しています。
「次へ」をクリックします。
「ポーリング・オプション」ページが表示されます。
「次へ」をクリックします。
「選択条件の定義」ページが表示されます。
「次へ」をクリックします。
「詳細オプション」ページが表示されます。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図46-48に示すように、SAPという名前のデータベース・アダプタ・サービスが作成されます。
「ファイル」メニューから「すべて保存」を選択します。
EBS外部参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」で「SOA」を選択します。
「データベース・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、EBS
と入力します
「次へ」をクリックします。
「サービス接続」ページが表示されます。
「接続」フィールドで、「DBConnection1」を選択します。
「JNDI名」フィールドに、eis/DB/DBConnection1
と入力します。
「次へ」をクリックします。
「操作タイプ」ページが表示されます。
「ストアド・プロシージャまたはファンクションの呼出し」を選択し、「次へ」をクリックします。
「ストアド・プロシージャの指定」ページが表示されます。
「スキーマ」から「Scott」を選択します。
「参照」をクリックします。
「ストアド・プロシージャ」ダイアログが表示されます。
図46-49に示すように、「POPULATE_APP_INSTANCE_IM」を選択します。
「OK」をクリックします。
図46-50に示すように、「ストアド・プロシージャの指定」ページが表示されます。
「次へ」をクリックします。
「詳細オプション」ページが表示されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。
図46-51に、SOAコンポジット・エディタのEBS参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
Loggerファイル・アダプタ外部参照を作成する手順は、次のとおりです。
「コンポーネント・パレット」から「SOA」を選択します。
「ファイル・アダプタ」を選択し、「外部参照」スイムレーンにドラッグします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドに、Logger
と入力します。
「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」をクリックします。
「操作」ページが表示されます。
「操作タイプ」フィールドで、「Write File」を選択します。
「次へ」をクリックします。
「ファイル構成」ページが表示されます。
「発信ファイルのディレクトリ(物理パス)」フィールドに、ファイルを書き込むディレクトリの名前を入力します。
ファイル・ネーミング規則フィールドで、output.xml
と入力し、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「検索」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
「タイプ・エクスプローラ」→「プロジェクトのスキーマ・ファイル」→「SCOTT_POPULATE_APP_INSTANCE_1M.xsd」の順に移動し、「OutputParameters」を選択します。
「OK」をクリックします。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
図46-52に、SOAコンポジット・エディタのLogger参照を示します。
「ファイル」メニューから「すべて保存」を選択します。
Oracle Mediatorサービス・コンポーネントを作成する手順は、次のとおりです。
「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、「コンポーネント」スイムレーンにドロップします。
「メディエータの作成」ダイアログが表示されます。
「テンプレート」リストから、「インタフェースを後で定義」を選択します。
「OK」をクリックします。
Mediator2という名前のOracle Mediatorが作成されます。
図46-53に示すように、「SAP」サービスを「Mediator2」に接続します。
「ファイル」メニューから「すべて保存」を選択します。
「コンポーネント・パレット」から「メディエータ」アイコンをドラッグし、SOAコンポジット・エディタの「コンポーネント」セクションにドロップします。
「メディエータの作成」ダイアログが表示されます。
「テンプレート」リストから、「WSDLからのインタフェース定義」を選択します。
「SOAPバインディングを持つコンポジット・サービスの作成」の選択を解除します。
「WSDLファイル」フィールドの右側にある「既存のWSDLを検索します。」をクリックします。
Common.wsdlファイルに移動して選択します。Common.wsdlファイルは、Samplesフォルダにあります。
「OK」をクリックします。
「OK」をクリックします。
Commonという名前のOracle Mediatorが作成されます。
次の操作のルーティング・ルールを指定する必要があります。
挿入
更新
挿入操作のルーティング・ルールを作成する手順は、次のとおりです。
「Mediator2」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「insert」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap05Collection/top:Sap05Collection/top:Sap05/top:operation='INSERT'
「OK」をクリックします。
トランスフォーメーションの使用フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_INSERT.xsl
と入力します。
「OK」をクリックします。
「SAP_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「top:SAP05」ソース要素を「inp1:Order」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「自動マップ中」オプション・リストから、「祖先名を考慮した要素の一致」の選択を解除します。
「OK」をクリックします。
図46-54に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「populateXRefRow1M」関数をドラッグ・アンド・ドロップします。
「populateXRefRow1M」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「Order.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_05"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、/top:Sap05Collection/top:Sap05/top:id
と入力します。
「columnName」フィールドで"Common"
と入力するか、「検索」をクリックして列名を選択します。
「value」フィールドに、orcl:generate-guid()
と入力します。
「mode」フィールドで"Add"
と入力するか、「検索」をクリックして、このモードを選択します。
図46-55は、移入後の「関数の編集 – populateXRefRow1M」ダイアログを示しています。
図46-55 「関数の編集 – populateXRefRow1M」ダイアログ: XrefOrderAppユースケース
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_INSERT.xsl」ファイルを閉じます。
図46-56に示すように、「ルーティング・ルール」セクションが表示されます。
更新操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、更新操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「メディエータ」→「Common」→「サービス」→「Common」の順に移動します。
「update」を選択し、「OK」をクリックします。
「フィルタ」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに、次の式を入力します。
$in.Sap05Collection/top:Sap05Collection/top:Sap05/top:operation='UPDATE'
「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、SAP_TO_COMMON_UPDATE.xsl
と入力します。
「OK」をクリックします。
「SAP_TO_COMMON_UPDATE.xsl」ファイルが表示されます。
「top:Sap05」ソース要素を「inp1:Order」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「コンポーネント・パレット」から、「拡張」を選択します。
「XREF Functions」を選択します。
「コンポーネント・パレット」からtop:id要素とinp1:id要素を接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
「xrefLocation」フィールドの右側にある「検索」をクリックします。
「SOAリソース・ルックアップ」ダイアログが表示されます。
「customer.xref」を選択し、「OK」をクリックします。
「referenceColumnName」フィールドで"SAP_05"
と入力するか、または「検索」をクリックして列名を選択します。
「referenceValue」列に、/top:Sap05Collection/top:Sap05/top:id
と入力します。
「columnName」フィールドで"COMMON"
と入力するか、「検索」をクリックして列名を選択します。
「needException」フィールドでtrue()
と入力するか、「検索」をクリックして、このモードを選択します。
図46-57は、移入後の「関数の編集 – lookupXRef」ダイアログを示しています。
図46-57 「関数の編集 – lookupXRef」ダイアログ: XRefOrderAppユースケース
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「SAP_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
図46-58に示すように、「ルーティング・ルール」セクションが表示されます。
「Common」Oracle Mediatorの次の操作についてルーティング・ルールを指定する必要があります。
挿入
更新
挿入操作のルーティング・ルールを作成する手順は、次のとおりです。
「Common」Oracle Mediatorをダブルクリックします。
メディエータ・エディタが表示されます。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「参照」→「EBS」の順に移動します。
「EBS」を選択して、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_EBS_INSERT.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_EBS_INSERT.xsl」ファイルが表示されます。
「inp1:Order」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
右側の「db:X_APP_INSTANCE」ノードの値をEBS_i75に設定します。
「OK」をクリックします。
図46-59に示すように、トランスフォーメーションが作成されます。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_EBS_INSERT.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、EBS_TO_COMMON_INSERT.xsl
と入力します。
「リクエストをリプライ・ペイロードに含める」を選択します。
「OK」をクリックします。
「EBS_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「inp1:Order」ソース要素を「db:X:APP_ID」に接続します。
「コンポーネント・パレット」から接続線上に「populateXRefRow」関数をドラッグ・アンド・ドロップします。
「populateXRefRow」アイコンをダブルクリックします。
「関数の編集 - populateXRefRow」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: order.xref
referenceColumnName: Common
referenceValue: $initial.Customers/inp1:Customers/inp1:Order/inp1:Id
columnName: EBS_75
value: /db:OutputParameters/db:X_APP_ID
mode: LINK
「OK」をクリックします。
図46-60に示すように、「EBS_TO_COMMON_INSERT.xsl」ファイルが表示されます。
「ファイル」メニューから、「すべて保存」を選択して、「EBS_TO_COMMON_INSERT.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('INSERT-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-61に示すように、「insert」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
更新操作のルーティング・ルールを作成する手順は、次のとおりです。
次のタスクを実行して、更新操作のルーティング・ルールを作成します。
「ルーティング・ルール」セクションで、「新規ルーティング・ルールを作成します。」アイコンをクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「参照」→「EBS」の順に移動します。
「EBS」を選択して、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、COMMON_TO_EBS_UPDATE.xsl
と入力します。
「OK」をクリックします。
「COMMON_TO_EBS_UPDATE.xsl」ファイルが表示されます。
「inp1:Orders」ソース要素を「db:InputParameters」ターゲット要素にドラッグ・アンド・ドロップします。
「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
図46-39に示すように、トランスフォーメーションが作成されます。
「コンポーネント・パレット」からinp1:idとdb:X_APP_IDを接続している線まで「lookupXRef」関数をドラッグ・アンド・ドロップします。
「lookupXRef」アイコンをダブルクリックします。
「関数の編集 - lookupXRef」ダイアログが表示されます。
表示されたフィールドに次の情報を入力します。
xrefLocation: order.xref
referenceColumnName: Common
referenceValue: /inp1:Customers/inp1:Order/inp1:Id
columnName: EBS_i75
needException: true()
「OK」をクリックします。
「ファイル」メニューから、「すべて保存」を選択して、「COMMON_TO_EBS_UPDATE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「ターゲット・サービス操作を参照します。」をクリックします。
「ターゲット・タイプ」ダイアログが表示されます。
「サービス」を選択します。
「ターゲット・サービス」ダイアログが表示されます。
「XrefOrderApp」→「参照」→「Logger」の順に移動します。
「Write」を選択し、「OK」をクリックします。
「次を使用して変換」フィールドの横にある「トランスフォーメーション」アイコンをクリックします。
「リプライ・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択し、EBS_TO_COMMON_UPDATE.xsl
と入力します。
「OK」をクリックします。
「EBS_TO_COMMON_UPDATE.xsl」ファイルが表示されます。
「db:X:APP_ID」ソース要素を「db:X:APP_ID」に接続します。
「ファイル」メニューから、「すべて保存」を選択して、「EBS_TO_COMMON_UPDATE.xsl」ファイルを閉じます。
「同期リプライ」セクションで、「値の割当て」アイコンをクリックします。
「値の割当て」ダイアログが表示されます。
「追加」をクリックします。
「値の割当て」ダイアログが表示されます。
「From」セクションで、「式」を選択します。
「式ビルダーの起動」アイコンをクリックします。
「式ビルダー」ダイアログが表示されます。
「式」フィールドに次の式を入力し、「OK」をクリックします。
concat('UPDATE-',$in.OutputParameters/db:OutputParameters/db:X_APP_ID,'.xml')
「To」セクションで、「プロパティ」を選択します。
「jca.file.FileName」プロパティを選択し、「OK」をクリックします。
「OK」をクリックします。
図46-62に示すように、「update」操作セクションが表示されます。
「ファイル」メニューから「すべて保存」を選択します。
SOAコンポジット・アプリケーションをデプロイするには、アプリケーション・サーバー接続が必要です。アプリケーション・サーバー接続の作成方法の詳細は、第40.7.1.1.1項「アプリケーション・サーバー接続の作成」を参照してください。
次の手順で、XrefOrderAppコンポジット・アプリケーションをアプリケーション・サーバーにデプロイします。
アプリケーション・デプロイメント・プロファイルの作成
アプリケーション・サーバーへのアプリケーションのデプロイ
これらの手順の詳細は、第40.7.1項「Oracle JDeveloperでの単一のSOAコンポジットのデプロイ」を参照してください。