別々の EnterpriseItems Bean にバインドしている複数の ItemsGrid と Path のコンポーネントの同期方法

ここでは、1 つの JSP ページに 2 つの ItemsGrid コンポーネントと、1 つの Path コンポーネントがある場合のシナリオを例にとって説明します。Path コンポーネント(名前 path)と、2 つの ItemsGrid コンポーネントの 1 つ(名前 foldersGrid)が同じ EnterpriseItems Bean(名前 folders)にバインドされているとします。この EnterpriseItems Bean が Crystal Enterprise システム内のフォルダ階層を表示し、ユーザーは pathfoldersGrid を使用してこの階層をナビゲートできます。この 2 つのコンポーネントは 1 つの EnterpriseItems Bean にバインドされているため、自動的に同期化します。したがって、ユーザーが片方のコンポーネントを使用して階層をナビゲートすると、その変化はもう一方のコンポーネントに反映されます。

ただし、もう 1 つの ItemsGrid コンポーネント(名前 reportsList)は、別の EnterpriseItems Bean(名前 reports)にバインドされ、指定した任意のフォルダの Crystal レポートを表示します。ここで、reportsList をこのページの他のコンポーネントと連係させる方法が問題になります。この問題は、これらのコンポーネントを正しい順序で同期化することによって解決できます。

2 つめの ItemsGrid コンポーネント(reportsList)をページ内で有効に他のコンポーネントと連係させるには、ユーザーが foldersList または path の特定のフォルダ レベルをナビゲートした場合に、reportsList が同じフォルダ レベルのレポートを表示するように、これらのコンポーネントを同期化する必要があります。すなわち、reports EnterpriseItems Bean の parentItemID プロパティを、folders Bean の parentItemID プロパティの現在の値に設定します。この現在の値とは、ユーザーがフォルダのグリッドまたは Path コンポーネントにあるフォルダをクリックするたびに取得される値です。これにより、レポートのグリッドは常に同レベルの情報を表示します。コンポーネント間の連係を有効にするには、foldersList コンポーネントと path コンポーネントの同期化を設定します。

コンポーネントを同期化する
  1. ビジュアル デザイナで、path コンポーネントを選択します。
  2. プロパティ ビューで、[同期化]タブをクリックします。
  3. 次のコンポーネントと同期化]をクリックして、次に[追加]をクリックします。
  4. 同期化するコンポーネントの選択]ダイアログ ボックスで reportsList コンポーネントを選択して、現在のコンポーネントと同期化します。
  5. OK]ボタンをクリックします。
  6. 注    複数のコンポーネントが同じ EnterpriseItems Bean にバインドしている場合に そのうちの 1 つのコンポーネントを同期化しようとすると、複数のコンポーネントが同一の itemSource プロパティ値(EnterpriseItems Bean)を共有しており、選択したコンポーネントに同期を追加すると、この Bean にバインドされているすべてのコンポーネントに同期が追加されることを確認するメッセージが表示されます。[OK]をクリックして同期を確認します。

  7. ビジュアル デザイナで foldersList コンポーネントを選択して、2 から 5 のステップを繰返し、reportsList コンポーネントと同期化します。

同期化の操作では、アプリケーションに 2 つの重要なコードを追加します。まず、action listener を foldersListpath コンポーネントに追加します。

actionListener="#{pc_<nameofpage>.doAction}"

次に、このページの分離コード java クラス(RAD によって作成され、通常は <nameofpage>.java と命名される)にアクション イベント ハンドラ メソッドを追加して同期化を実行します。

public void doAction() {

reports.setParentItemID(folders.getParentItemID());

}

同期化の順序は、重要です。この例では、foldersListreportsList に、そして pathreportsList に同期化しています。したがって、foldersList または path がクリックされると、reportsList が同期化されます。しかし、この逆の場合は同期化されません。reportsListfoldersList に対して同期化していないため、reportsList でのアクションで foldersList が変化することはありません。コンポーネントの選択と同期化の設定にあたっては、最終的に目標とするアプリケーションでの動作を念頭に置いて作業を進めてください。



Business Objects
http://japan.businessobjects.com/
サポート サービス
http://japan.businessobjects.com/services/