ADF対応Webページでツリー・コントロールを使用した作業

ビジネス・サービスのデータ・オブジェクトに、マスター/ディテール関係から導出された属性の階層リストが含まれている場合、ツリー・コントロール・バインディングを使用してそれらの属性を表示できます。ツリー・バインディング・エディタを使用して2つのルール(ルート・ノード・ルールとブランチ・ノード・ルール)を定義します。これらのルールは、開発者が選択したビジネス・サービスのデータ・コレクション相互の関係を、ツリー・バインディングが横断する方法を決定します。

現在、データ・コントロール・パレットからツリー・コントロールは使用できません。次の手順でツリー・バインディングを作成し、Webページからそのバインディングにアクセスできます。

ツリー・コントロール・バインディングとルート・ノード・ルールを作成するには、次のようにします。

  1. Webページを作成し、ビジュアル・エディタでそのファイルを開きます。

  2. 「表示」->「構造」を選択して、開いているファイルの構造ウィンドウを表示します。

  3. 構造ウィンドウのツールバーでUI Model tab iconUIモデル)をクリックし、現在のバインディング定義を表示します。

  4. 開いているファイル用のバインディング定義が存在していない場合、構造ウィンドウでそのノードを右クリックし、「UIモデルの作成」を選択します。

    JDeveloperにより、構造ウィンドウで<pageName> UIModelノードが作成され、「アプリケーション・ソース」フォルダで、プロジェクト・パッケージに対してバインディング定義ファイル <pageName>UIModel.xmlが追加されます。

  5. マスター・コレクションの現在位置を管理するイテレータ・バインディングを作成します。ツリー・コントロールは、このマスター・コレクションを反復します。新しいバインディング定義を右クリックし、「バインディングの作成」->「データ」->「イテレータ」を選択します。

  6. イテレータ・バインディング・エディタで、ツリー・コントロールで使用するマスター・コレクションを表現するデータ・コレクションを選択します。

  7. ツリー・バインディングを作成するには、バインディング定義を右クリックし、「バインディングの作成」->「入力」->「ツリー」を選択します。

  8. ツリー・バインディング・エディタで、「規則の編集」タブを使用し、マスター・データ・コレクションから表示する親ノードの規則を定義します。たとえば、"customers"のマスター・コレクションには、"orders"のディテール・コレクションがあります。

  9. 「データ・コレクション定義」リストから、ツリーのルート・ノードへの移入に使用するデータ・コレクションを選択します。これは、ルート・ノードを定義するマスター・コレクションです。ここでいうマスター・コレクションとは、たとえば、ディテールがOrderコレクションであるようなマスターのCustomersコレクションなどです。

  10. 「表示属性」リストから、ツリーの親ノードとして表示する属性を1つ選択します。たとえばOrderディテール・ビュー・オブジェクトを指定し、そこから注文ID情報をツリーに表示します。現時点では、ツリー・コントロールで各ブランチに表示できる属性は1つのみです。

  11. 「ブランチ規則アクセッサ」リストで、マスター・コレクションと、ツリーの最初のブランチ間のリンクを定義する、アクセッサを選択します。たとえば、顧客コレクションと注文コレクションに対するビジネス・コンポーネント・アクセッサの場合、リストにはOrdersViewのように表示されます。

    警告: 選択したデータ・コレクションに対するマスター/ディテール・コレクションがデータ・モデルに含まれていないと、「ブランチ規則アクセッサ」リストには何も表示されません。ツリー内のリーフ(終端の)ノードを除くすべてのブランチに対し、モデル・プロジェクトのビジネス・サービスにアクセッサを定義する必要があります。

  12. 「新しい規則を追加」ボタンをクリックし、ルート・ノードに対する規則の定義を完了します。

  13. 「規則の表示」タブをクリックし、ルート・ノードの規則を表示します。たとえばCustomersとOrderの例の場合には、次のように表示されます。

    Viewobject rule: myPackage.CustomersView, CustLastName, OrdersView

    この規則はADF Business Componentsに基づいており、ツリーのルート・ブランチのノードとしてCustLastName属性を表示し、OrdersViewビュー・リンク・アクセッサを使用してツリーの2番目のブランチとしてCustomersのOrderにドリルダウンして表示する、という意味です。次に、Orderビュー・オブジェクトから表示する属性を定義する規則を追加します。

ツリーのブランチ表示規則を定義するには、次のようにします。

  1. 「規則の編集」タブをクリックし、最初のディテール・コレクションから表示する子ブランチ属性の規則を定義します。

  2. 「データ・コレクション定義」リストから、ツリーのブランチ・ノードへの移入に使用するデータ・コレクションを選択します。これは、ツリーのノードを定義するディテール・コレクションです。たとえばOrderディテール・コレクションを指定し、そこから注文ID情報をツリーに表示します。

  3. 「表示属性」リストから、ツリーのブランチ・ノードとして表示する属性を1つ選択します。たとえばOrderディテール・ビュー・オブジェクトを指定し、そこから注文ID情報をツリーに表示します。

  4. 「ブランチ規則アクセッサ」リストで、ツリーの最初のブランチと、次のブランチ間のリンクを定義する、アクセッサを選択します。たとえば、注文(orders)コレクションと注文品目(orderitems)コレクションに対するビジネス・コンポーネント・アクセッサの場合、リストにはOrderItemsViewのように表示されます。

    注意: 選択したブランチ・データ・コレクションに対してビジネス・サービス・モデルのプロジェクトにそれ以上アクセッサが定義されていない場合、リストには<none>と表示されます。これはアクセッサが必要でないことを意味し、選択したコレクションの属性がツリーのリーフ・ノードとして表示されます。

  5. 「新しい規則を追加」ボタンをクリックし、子であるブランチ・ノードに対する規則の定義を完了します。

  6. 「規則の表示」タブをクリックし、ルート・ノードの規則を表示します。たとえばCustomersとOrderの例の場合には、次のように表示されます。

    Viewobject rule: myPackage.OrdersItemsView, OrderId, OrderStatus, <none>

    この規則は、ADF Business Componentsに基づいており、ツリーの2番目のブランチのノードとしてOrderIdおよびOrderStatusの各属性を表示する、という意味です。最後のnoneは、このブランチはリーフ・ノードで構成されるため、アクセッサがないことを表しています。

  7. ブランチ間を移動するためのアクセッサがビジネス・サービスにあれば、「規則の編集」タブで同じ手順を繰り返して新規のブランチをいくつでも定義できます。

  8. 「OK」をクリックし、バインディング設定を保存します。

    バインディング・エディタによって、定義した規則にエラーがないかどうかがチェックされます。表示されるエラー・メッセージは次のとおりです。

ツリー・バインディング用の規則の作成が成功した後、次のようなEL式構文を使用して、JSPページからそのバインディングにアクセスできます。

ルート・コレクションの属性値にアクセスし、ヘッダーとして表示するには、次のようにします。

<c:out value="${bindings.DCTree.labels.CustLastName}"/>

ルート・ノードにアクセスするために、ルート・ノードを操作する次のようなforEachループを作成する必要があります。

<c:forEach var="Row" items="${bindings.DCTree.rootNodeBinding.children}">

子ノードにアクセスするために、子ノードを操作する次のようなforEachループを作成する必要があります。

<c:forEach var="childNode" items="${Row.children}">

たとえば、次のスクリプトのように使用します。


<table border="1" width="100%">
     <tr>
        <th>
           <c:out value="${bindings.DCTree.labels.CustLastName}"/>
        </th>
        <th>
           Details
        </th>
     </tr>
     <c:forEach var="Row" items="${bindings.DCTree.rootNodeBinding.children}">
       <tr>
          <td>
             <c:out value="${Row.Dname}"/>
          </td>
          <td>
             <table border="1" width="100%">
                <c:forEach var="childNode" items="${Row.children}">
                   <tr>
                      <td><c:out value="${childNode.OrderId}" /> </td>
                      <td><c:out value="${childNode.OrderStatus}" /> </td>
                      <td><c:out value="${childNode.OrderTotal}" /> </td>
                   </tr>
                </c:forEach>
             </table>
          </td>
       </tr>
     </c:forEach>
   </table>
	
    

Oracle ADFアプリケーション用のStrutsページ・フローの作成
ページ・フロー・ダイアグラムからのOracle ADFアプリケーションの実行

 

Copyright © 1997, 2004, Oracle. All rights reserved.