既存のビュー・リンクの拡張

JDeveloperには、拡張ビュー・リンクの機能が用意されています。この機能を利用して、ビュー・オブジェクト間の関係を保持できます。また、ビュー・リンクを拡張することにより、拡張ビュー・オブジェクトに追加された新規の属性にアクセスできます。ビュー・オブジェクト、およびビュー・オブジェクト間のリンクを拡張した場合、タイプ・セーフなバインディングが保持されます。元のビュー・オブジェクト内に書かれているアクセッサは、拡張ビューに継承され、元のビュー・リンクを横断できます。

次の図に示すように、ビュー・リンクにより、共通属性に基づいたビュー・オブジェクト間の関係が定義されます。ビュー・リンクは、指定されたリンク元とリンク先を持ち、マスター/ディテール関係を示します。リンクは、リンク元(マスター)からリンク先(ディテール)の方向にのみ移動できます。すなわち、リンク先ビュー・オブジェクト内の目的の結果セットにアクセスするために、リンク元ビュー・オブジェクト内にビュー・リンク・アクセッサ・メソッドを記述できます。たとえば、DeptViewビュー・オブジェクトとEmpViewビュー・オブジェクトがあり、DeptViewには、Empオブジェクトの行セットを取り出すgetEmp()メソッドが含まれているとします。

Figure that shows original source and destination view objects, as described in the preceding paragraph.

次の図に示すように、拡張ビュー・リンクには、その親のビュー・リンクおよびビュー・リンクのアクセッサが継承されます。拡張ビュー・オブジェクトのアクセッサは、元のビュー・リンクを横断できます。DeptViewビュー・オブジェクトを拡張すると、getEmp()メソッドはNewDeptViewExに継承され、EmpViewのデータを取り出せます。

Figure that shows extending the view link source and destination view objects, as described in the preceding paragraphs.

ただし、ビュー・オブジェクトを拡張しても、ビュー・オブジェクト間の元のビュー・リンクは拡張されないことに注意してください。ビュー・リンクを拡張しないかぎり、NewDeptViewExからNewEmpViewExへのアクセッサはコールできません。ビュー・リンクを拡張することにより、ビュー・リンクは拡張ビュー・オブジェクト間の関連付けを行えるように更新されます。

拡張ビュー・オブジェクト間のビュー・リンクを拡張すると、次の選択において柔軟性が高まります。

次の図は、NewDeptViewExからNewEmpViewExへの既存のビュー・リンクを拡張した例です。

Figure that shows extending the existing view link, as described in the preceding paragraphs.

ビュー・リンクの拡張方法

  1. カスタマイズされたビュー・リンクを含めるパッケージを右クリックし、「新規ビュー・リンク」を選択します。ビュー・リンク・ウィザードが開きます。

  2. 「名前」ページで、新規ビュー・リンクの名前(NewViewLinkEx)を「名前」フィールドに入力します。柔軟性を高めるために、このページでは、「名前」「パッケージ」および「拡張ビュー・リンク」フィールドが編集可能になっています。

  3. 「参照」をクリックし、「親」ダイアログを開きます。元のコンポーネントのパッケージを開き、拡張するビュー・リンクの名前を選択します。「OK」をクリックし、ダイアログを閉じます。「名前」ページで「次へ」をクリックし、「ビュー・オブジェクト」ページに進みます。

  4. 「ビュー・オブジェクト」ページで、「リンク元ビュー・オブジェクト」リストから拡張オブジェクトが含まれているパッケージを開き、拡張ビュー・オブジェクト「NewDeptViewEx」を選択します。NewDeptViewExは、拡張ビュー・リンクのリンク元となります。次に、「リンク先ビュー・オブジェクト」リストから拡張オブジェクトが含まれているパッケージを開き、拡張ビュー・オブジェクト「NewEmpEx」を選択します。NewEmpExは、拡張ビュー・リンクのリンク先となります。「次へ」をクリックし、「関連元の属性」ページに進みます。

  1. 「関連元の属性」ページで、関係を定義する、拡張ビュー・リンクのリンク元のビュー属性を選択します。リンク元およびリンク先の両方で、それぞれのビュー・オブジェクトに対して、同じ数の属性を、正しい順序で指定する必要があります。拡張ビュー・オブジェクトに追加された新規の属性も使用可能であることに注意してください。この例では、Deptno「選択済の属性」リスト内に表示されていることを確認してください。

    オプションで、「使用可能なAssociation」リストから、キーを定義するすべての属性を指定できます。「選択済の属性」リストにキーを移動した場合、そのキーに関連付けられた属性が自動的に表示されます。また、「関連元の属性」ページでキーを選択した場合、一致するキー(該当する場合)が、デフォルトで「リンク先の属性」ページに含められます。「次へ」をクリックし、「リンク先の属性」ページに進みます。

  2. 「リンク先の属性」ページで、関係を定義する、拡張ビュー・オブジェクトのリンク先のビュー属性を選択します。リンク元およびリンク先の両方で、それぞれのビュー・オブジェクトに対して、同じ数の属性を、正しい順序で指定する必要があります。「次へ」をクリックし、「SQL設定」ページに進みます。

  3. 「SQL設定」ページで、生成されたSQLのコードを確認し、必要であれば編集できます。

    注意: WHERE句にバインド・パラメータ(?または:)を使用する場合、リンクされたビュー・オブジェクトの問合せ定義に定義されているスタイルを使用する必要があります。

  1. 「終了」をクリックし、変更せずにコードを受け入れます。Business Components for Javaフレームワークにより、拡張ビュー・リンクを実装するコードが生成されます。

ナビゲータで、JDeveloperにより新規のビュー・リンクNewViewLinkExが拡張コンポーネントのパッケージに追加されたことを確認してください。

生成された拡張ビュー・リンク・ファイルの理解

NewFKLinkExビュー・リンクは、ソース・コードを変更せずに、EmpForeignKeyLinkビュー・リンクの機能を拡張して作成されます。JDeveloperによりNewFKLinkEx.xmlファイルが作成され、このファイルはパッケージ化されたアプリケーション内にシームレスに統合できます。この時点で、NewFKLinkExビュー・リンクを実行時に使用できます。また、元のアプリケーション内のEmpForeignKeyLinkのすべてのインスタンスのかわりにこのビュー・オブジェクトを使用することもできます。

次に、NewFKLinkEx.xmlのコード・サンプルを示します。

1   <?xml version="1.0" encoding='WINDOWS-1252'?>
2 <!DOCTYPE ViewLink SYSTEM "jbo_03_01.dtd">
3   <ViewLink
4 Name="NewViewLinkEx"
5 Extends="package27.EmpForeignKeyLink"
6 EntityAssociation="Extender.EmpForeignKeyAssoc"
7 Where=":1 = Emp.DEPTNO" >
8 <DesignTime>
9 <Attr Name="_isCodegen" Value="true" />
10 </DesignTime>
11 <ViewLinkDefEnd
12 Name="NewDeptViewEx"
13 Owner="Extender.NewDeptViewEx"
14 Source="true" >
15 <AttrArray Name="Attributes">
16 <Item Value="package27.DeptView.Deptno" />
17 </AttrArray>
18 </ViewLinkDefEnd>
19 <ViewLinkDefEnd
20 Name="NewEmpViewEx"
21 Owner="Extender.NewEmpViewEx" >
22 <AttrArray Name="Attributes">
23 <Item Value="package27.EmpView.Deptno" />
24 </AttrArray>
25 <DesignTime>
26 <Attr Name="_finderName" Value="NewEmpViewEx" />
27 </DesignTime>
28 </ViewLinkDefEnd>
29 </ViewLink>

4から7行: Business Components for Javaのフレームワークで、ViewLinkタグにNameExtendsおよびEntityAssociationフィールドが追加され、新しいビュー・リンクの名前(NewViewLinkEx)、拡張する元のビュー・リンクの名前(package27.EmpForeignKeyLink)および基礎になるAssociationの名前(Extender.EmpForeignKeyAssoc)が指定されます。

フレームワークで、7行目に、ビュー・リンクを定義するためのWHERE句が使用されています。WHERE句が指定されていない場合、フレームワークでは、EntityAssociation6行目)に指定されているAssociationからWHERE句が作成されます。WHERE句もAssociationもない場合、フレームワークでは、ViewLinkDefEndタグ内のItem Valueフィールドにリストされているpackage.ViewObject.attributeの値の等価結合が実行されます(16行目および23行目を参照)。

12から16行: フレームワークで、ViewLinkDefEndタグ内でNameOwnerSourceおよびItem Valueフィールドが使用され、元のAssociationのリンク元の名前(Dept)、ビュー・リンクのリンク元の新しい所有者の名前(Extender.NewDeptViewEx)、その一方がリンク元かどうか(Source="true")、外部キーの名前のAttrArrayセクションのItem Valueタグへの追加(package27.DeptView.Deptno)が指定されます。

20から23行: 同様に、フレームワークで、ViewLinkDefEndタグのNameOwnerおよびItem Valueフィールドが使用され、元のビュー・リンクの反対側の名前(Emp)、Associationの一方の新しい所有者(Extender.NewEmpViewEx)、および外部キーの名前のAttrArrayセクションのItem Valueタグへの追加(package27.EmpView.Deptno)が指定されます。