2012-07-09 81 views
0

我有一個xPage,我用3個組合框和1個視圖控件構建。我想在視圖控件中使用'按列過濾值'選項來提供過濾值的選項,允許用戶顯示任何組合框的組合。例如只有comboBox1,或comboBox1和comboBox2,或comboBox3,或comboBox1和comboBox2和comboBox3。使用「按列值過濾」和使用java矢量進行多列過濾 - xPages

我使用'xPages Demonstration Application'(http://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpagesdemoapp.htmhttp://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=AAC8E26599256FDC852578CB0066CC13)中的示例,使用未分類列的向量執行多列過濾。

所以,我遇到了什麼似乎是一個相當重要的問題,數據需要按日期排序。日期不是篩選器之一,但它必須是第一列才能正確排序數據。所以我的第一列是一個字符串,YYYYMMDD,以確保數據正確排序。我試圖在視圖控件中使用排序選項,並且似乎不適用於以這種方式實現的列過濾。

因此,作爲我過濾的標準之一,我已經將它作爲空字符串傳遞 - 使用思路過程,即空字符串將全部選中(如上面的url示例中所示)。

我都用來做濾波的代碼是:

var vtr:java.util.Vector = new java.util.Vector(); 
var t1 = sessionScope.Email; 
var t2 = sessionScope.Own; 
var t3 = sessionScope.Module; 

vtr.addElement(""); 
@If(sessionScope.Own=="My calls",vtr.addElement(t1),vtr.addElement("")); 
@If(sessionScope.Own=="My calls",vtr.addElement(""),vtr.addElement(t2)); 
@If(sessionScope.Status=="Open",vtr.addElement("Open"),vtr.addElement("")); 
@If(sessionScope.Module=="All",vtr.addElement(""),vtr.addElement(t3)); 

return vtr; 

我發現是正在返回並不是所有的數據。我認爲這可能是由於日期字段。所以我刪除它(改變視圖並刪除第一個添加元素),但我仍然發現並不是所有的數據都被返回。我懷疑這可能是由於空的字符串被傳遞,或者,這實際上並不按照我希望的方式工作。

有沒有人知道我是否可以按照我想要的方式使其工作,如果沒有,我有什麼建議可以解決這個問題嗎?

+0

您使用853嗎? – 2012-07-11 12:34:26

+0

是的,運行8.5.3 FP1。 – alt 2012-07-11 22:45:32

回答

1
  1. 日期不需要作爲視圖中的第一個可排序列。第一列確實需要進行排序才能使查找工作,就像Notes視圖需要爲@DbColumn和@DbLookup進行排序才能工作一樣。 XPages使用相同的下劃線架構。此示例 - http://dev.openntf.org/demos/demoapp.nsf/viewFilteringVector.xsp - 未按日期排序數據。
  2. 我的猜測是爲什麼你的例子不起作用,取決於你的Notes視圖如何排序。嘗試使用第1列(電子郵件)升序排序,第2列(自己)升序排序和第3列(模塊)再次升序排序創建新視圖。你應該能夠在這種情況下獲得矢量過濾。
  3. 如果所有這些都不適合你,你可能會考慮多層分類過濾(853新增)。 XPages中的這種過濾類型與categoryFilter的工作方式有關,但也允許您按子類別(或子類別)過濾視圖。這種技術可能更適合您的情況。

    希望這會有所幫助。
+0

感謝您的意見保羅。欣賞你的時間來回應。 1.日期純粹是一項要求,所以記錄按日期排序。我能得到按日期排序的記錄的唯一方法是讓第一列顯示一個日期列,然後該列將被過濾器忽略。是否有可能有一個空白的過濾器?我認爲這可能是我的一個主要問題? 2.從頭開始花一些時間看看我沒有忽略過什麼。 3。我確實有過關於多層類別的想法,但它不是 總是col 1,col 2,col3 - 有時候我只想要col 2上的匹配? 再次感謝 – alt 2012-07-16 22:54:42

+0

嗨保羅 - 忙着在演示應用程序中更深入地觀察示例,以防萬一我錯過了某些內容,並且注意到您無法在第二列中顯示所有'L',它只會向您顯示那些'A'的前綴。在數據庫中有幾個'L'(第2列),第1列有'C'或'B'。我在檢查數據時只注意到這一點。這可能嗎?我想通過能夠將第一欄中的所有條目傳遞給第一欄來解決我的問題。我最初認爲vtr.addElement(「」)就是這樣做的,但可能會誤解? – alt 2012-07-17 01:09:27

+0

我只能過濾第二列時似乎能夠獲得結果。但是當考慮完整的數據集時,結果並不總是返回預期的結果。當與查詢字符串完全匹配時,結果似乎更可靠。這裏需要更多的調查。另外,我想看看你的例子,並更多地瞭解它。頁。 – 2012-07-18 13:29:12