我要如何同步化繫結至不同 EnterpriseItems Bean 的多個 ItemsGrid 及 Path 元件?

請設想下列案例:在單一 JSP 頁面上有兩個 ItemsGrid 元件和一個 Path 元件。Path 元件的名稱為 path,而其中一個 ItemsGrid 元件名稱為 foldersGrid;兩者都繫結至相同的 EnterpriseItems Bean,其命名為 foldersGrid。這個 EnterpriseItems Bean 代表 Crystal Enterprise 內的系統資料夾階層,可以讓使用者使用 pathfoldersGrid 進行導覽。因為兩個元件都繫結至相同的 EnterpriseItems Bean,所以會自動同步化;如此一來,當使用者以其中一個元件執行導覽時,另一個元件便會反映這些變更。

不過,第二個 ItemsGrid 元件命名為 reportsList,其繫結至叫做 reports (代表任何指定資料夾中的一組 Crystal 報表) 的其他 EnterpriseItems Bean。要如何才能讓 reportsList 配合頁面上的其他元件一起工作?解決之道就是依正確順序同步化元件。

要讓第二個 ItemsGrid 元件 reportsList 以有意義的方式在頁面內搭配其他元件一起工作,元件就必須同步化;如此一來,當使用者導覽至 foldersListpath 內的特定資料夾層級時,reportsList 才會顯示存在於該相同資料夾層級的報表。也就是說,每當使用者按一下資料夾格線或 Path 元件中的資料夾時,都必須將 reports EnterpriseItems Bean 的 parentItemID 屬性設定為 folders Bean parentItemID 屬性的目前值。結果,報表格線就會始終顯示相同層級的資訊。若要啟用元件之間的協調運作,您可以設定 foldersList 元件和 path 元件的同步化。

同步化元件
  1. 在 visual designer 中,選取 [path] 元件。
  2. 在 [Properties] 檢視中,按一下 [Synchronization] 索引標籤。
  3. 按一下 [Synchronize with the following components],然後再按 [Add]
  4. [Select a Component to Synchronize] 對話方塊中,選取 reportsList 元件,與目前元件進行同步化。
  5. 按一下 [OK]
  6. 注意:    如果元件和其他元件一樣都繫結至相同的 EnterpriseItems Bean,當嘗試與此元件同步化時,會顯示訊息指出有多個元件共用相同 itemSource 屬性值 (EnterpriseItems Bean);此外,如果將同步化加入選取的元件,同步化也會加至繫結到這個 Bean 的所有元件。按一下 [OK] 以確認同步化。

  7. 在 visual designer 中選取 foldersList 元件,並重複步驟 2 至 5,與 reportsList 元件進行同步化。

同步化的作法實際上會將兩項重要的程式碼加入應用程式。首先,會加入動作接聽項至 foldersListpath 元件:

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

此外,還會在頁面 (由 RAD 建立,通常命名為 <nameofpage>.java) 的程式碼後置 (Code-Behind) Java 類別中,加入動作事件處理常式方法以執行同步化:

public void doAction() {

reports.setParentItemID(folders.getParentItemID());

}

如您所見,同步化的順序格外重要。在範例中,我們已經讓 foldersList 針對 reportsList,並讓 path 針對 reportsList 進行同步化。所以在按一下 foldersListpath 時,reportsList 便會同步變化。但反過來的話,情況就不是這樣了。您並沒有讓 reportsListfoldersList 同步化,因此 reportsList 的動作不會影響 foldersList。在決定選取哪一個元件來加以同步化設定時,您始終要考慮到您希望在應用程式中達成的行為。



Business Objects
http://www.taiwan.businessobjects.com/
支援服務
http://www.businessobjects.com/services/support/