2015-11-05 82 views
0

我有動態視圖面板,我正在使用定製程序bean根據列名稱來隱藏列。但是,我需要:Xpages:動態視圖面板和DominoViewCustomizer bean

  1. 知道哪些觀點在定製豆裝入
  2. 在bean
  3. 獲取文件句柄
  4. 在bean

爲什麼我需要這個附加其他列:在我的應用程序中,我正在處理文檔映射。我想爲映射的文檔細節創建一個列。因爲可以映射不同的文檔類型,所以可以有多個列。

回答

2

查看您正在處理哪個視圖並生成列定義(通常與視圖中的視圖相同,但可以添加其他視圖)的工作是通過ViewFactory對象完成的,該對象由#getViewFactory在定製者bean。你可以看到一個重寫方法並返回一個定製工廠的例子here。再例如,您還可以在ExtLib here中找到默認的源。 ViewFactory的工作是發出一個ViewDef,其中包含一系列ColumnDef s - 基本上是視圖設計的抽象表示。這將覆蓋1和3.

對於編號爲2的文檔取得處理是稍微間接的。由於定製程序bean僅在視圖初始化期間執行,因此它不會直接掛鉤呈現每行的過程(這是獲取文檔的位置)。但是,您可以將屬性或內容設置爲自己訪問文檔的方法/值綁定,以便每行執行它們。我這樣做是爲了讓顏色列工作:我create an SSJS bindingstyle屬性,然後可以看到viewEntry對象。如果您修改該代碼,則可以編寫一些類似#{javascript:var doc = viewEntry.getDocument(); ...other stuff here...}的SSJS。如果你這樣做,你應該確保始終使用「viewEntry」作爲視圖中的var名稱或use panel.getVar() to find the variable name dynamically

+0

謝謝傑西。我基於你的視圖定製器得到了這個想法,但是希望如果我有快捷的起點,但顯然沒有。現在,我使用JSON方式並動態創建我的表(緊急交付),但將來我會嘗試在創建視圖後注入列。你認爲這是否合理?**我絕對需要閱讀Xpages和ExtLib中的所有類和接口。也許那時我可以構建一個解決方案,而不是在他們出現時照顧他們。 – Arun

+0

您可以通過在運行時訪問組件樹來動態添加列。如果你有一個getComponent(...)'獲取dynamicViewPanel的地方,那麼你可能會創建新的'UIDynamicColumn'(或者任何類)對象,然後用'addChild(...)' 。如果你想做一個沒有ExtLib控件的ad-hoc動態視圖面板,同樣可以用標準viewPanel。 –