ADFツリー・バインディングのカスタマイズ

データ・コントロール・パレットから挿入する次のUIコントロールに、ADF階層ツリー・バインディングを設定できます。

ツリー・バインディングにより、ユーザーは、「モデル」プロジェクトでビジネス・サービスにより指定されているように、マスター/ディテール関係から導出される属性の階層リストを表示できます。 ツリー・バインディング・エディタを使用して、選択したビジネス・サービス・データ・コレクション間の関係を、ツリー・バインディングで扱う方法に関する一連の規則を定義します。

ツリー・バインディングで複数のブランチからなるツリーを構築するには、ビジネス・サービスに次のデータが必要です。

ツリー・コントロールに対するADFバインディングを作成後、ツリー・コントロールによって、ユーザーはバインドされたデータ・オブジェクトの行間をナビゲートできます。 現時点ではツリー・コントロール用のナビゲーション・バインディングはないため、コントロールにJUTreeDefaultMouseListenerを追加する必要があります。

ツリー・バインディングを設定するには、次のようにします。

  1. 「UIエディタ」でデータ・パネルを開き、JScrollPaneコンテナをパネルに追加します。

  2. 「データ・コントロール・パレット」で、表示するのに必要なデータ・コレクションを選択します。

  3. 「データ・コントロール・パレット」から、「ツリー」コントロールを、スクロール可能なペインに追加します。

  4. 「構造」ウィンドウから、JTreeコントロール用の「ツリー・バインディング・エディタ」を表示します。

ツリーのルート・ノードを定義するには、次のようにします。

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

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

  3. 「属性の表示」リストから、ツリーの親ノードとして表示する属性を1つ選択します。 たとえば、各Customerの姓を選択します。 現在、JTreeコントロールで各ブランチに表示できる属性は1つのみです。

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

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

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

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

    Viewobject rule: myPackage.CustomersView, CustLastName, OrdersView

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

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

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

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

  3. 「属性の表示」リストから、ツリーのブランチ・ノードとして表示する属性を1つ選択します。 たとえば、各Customerの姓などです。

  4. 「ブランチ規則アクセッサ」リストから、ツリーの最初のブランチ・データ・コレクションと次のブランチ間のリンクを指定するアクセッサを選択します。 たとえば、OrderとOrderItemコレクションに対するビジネス・コンポーネント・アクセッサの場合、リストにはOrderItemsViewのように表示されます。

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

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

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

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

    この規則は、ADF Business Componentsに基づいて、次を定義します。 ツリーの2番目のブランチ用ノードとしてOrderIdOrderStatus属性を表示します。最後のnoneは、このブランチはリーフ・ノードで構成されるため、アクセッサがないことを表しています。

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

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

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

JDeveloperはjbInit()メソッド内にsetModel()メソッドを追加して、コントロール・バインディングを生成します。 たとえば、データ・コントロール・パレットからツリーを挿入後、メタデータを指定するためにDataControlIdを参照するメソッドは次のようになります。

myTree.setModel((TreeModel)panelBinding.bindUIControl("DataControlId", myTree));

新しいバインディング用のメタデータが、バインディング定義ファイルに表示されます(UIModel.xml)。


<DCControl
         id="MyDataControl"
         DefClass="oracle.jbo.uicli.jui.JUTreeDef"
         SubType="DCTree"
BindClass="oracle.jbo.uicli.jui.JUTreeBinding" IterBinding="DataCollectionIteratorId" ApplyValidation="false" ScrollPaneClass="javax.swing.JScrollPane" ShowsRootHandles="false" > <AttrNames> <Item Value="OrderId" /> <Item Value="OrderDate" /> <Item Value="OrderMode" /> <Item Value="CustomerId" /> <Item Value="OrderStatus" /> <Item Value="OrderTotal" /> <Item Value="SalesRepId" /> <Item Value="PromotionId" /> </AttrNames> <JUCtrlHierTypeBinding DefClass="oracle.jbo.uicli.binding.JUCtrlHierTypeBinding" SubType="DCTree" ApplyValidation="false" DefName="model.OrdersView" > <Contents > <Accessors> <Item Value="MyAccessor" /> </Accessors> </Contents> <AttrNames> <Item Value="MySelectedAttribute" /> </AttrNames> </JUCtrlHierTypeBinding> <JUCtrlHierTypeBinding DefClass="oracle.jbo.uicli.binding.JUCtrlHierTypeBinding" SubType="DCTree" ApplyValidation="false" DefName="model.MyDataCollection" > <Contents > <Accessors> </Accessors> </Contents> <AttrNames> <Item Value="MySelectedAttribute" /> </AttrNames> </JUCtrlHierTypeBinding> </DCControl>

イメージをツリー・バインディング・エディタの表示に追加するには、次のようにします。

「ツリー・バインディング・エディタ」では、ブランチ内の各ノードに表示するアイコンと、各ブランチの開くアイコンおよび閉じるアイコンを選択できます。 「ツリー・バインディング・エディタ」にアイコンを追加するには、初期化されたイメージを変数宣言に追加する必要があります。 たとえば、次のようにします。



  ImageIcon deptImage = new ImageIcon();
  ImageIcon deptOpenImage = new ImageIcon();
  ImageIcon deptClosedImage = new ImageIcon();
  ImageIcon empImage = new ImageIcon();
  ImageIcon empOpenImage = new ImageIcon();
  ImageIcon empClosedImage = new ImageIcon();     

イメージは初期化しておく必要があります。初期化していないイメージがある場合、パラメータ・リストを編集して「ツリー・バインディング・エディタ」を開くと編集内容は失われます。 イメージが初期化されていない場合、NULLイメージを表示するノードを表示するために、ノードの描画が試行され、SwingランタイムによってNullPointerExceptionがスローされます。


ADFバインディングとSwingコントロールについて
JClientコントロールを使用したUIのナビゲートについて

 

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