我正在使用向量在XPage中执行多列搜索功能。它的工作但不高效。在filter column value属性中,我使用下面的代码:
try {
var vtr:java.util.Vector = new java.util.Vector();
var t1 = sessionScope.searchfirstName;
var t2 = sessionScope.searchlastname;
var t3 = sessionScope.searchemail;
var t4 = sessionScope.searchcountry;
var t5 = sessionScope.searchcompany;
@If(t1 !=null,vtr.addElement(t1),vtr.addElement(""));
@If(t2 !=null,vtr.addElement(t2),vtr.addElement(""));
@If(t3 !=null,vtr.addElement(t3),vtr.addElement(""));
@If(t4 !=null,vtr.addElement(t4),vtr.addElement(""));
@If(t5 !=null,vtr.addElement(t5),vtr.addElement(""));
return vtr;
} catch(e) {
}
当我执行搜索操作时,它将适用于某些不是全部的值。就像我搜索“Raj”作为名字一样,它会显示结果,但如果我搜索“Yadav”作为姓氏,那么它将显示0结果。
答案 0 :(得分:1)
我假设你使用Vector来搜索视图。在Notes中,视图搜索需要"升序填充"键(除了所有列都需要排序)。因此,当Vector中的第二个元素不为null时,第一个元素也不能为空。 Notes将搜索第一个键,然后搜索第二个键,依此类推,直到键为空。因此,当您只使用第二个键进行搜索时,结果将为空。 这是核心Notes功能,并非特定于XPage。您可以在视图中使用带有字段名称的ft搜索。
<强>更新强>:
那你能做什么?以下代码不在我的脑海中,因此您可能需要修复拼写错误:
try {
var vtr:java.util.Vector = new java.util.Vector();
var t1 = sessionScope.searchfirstName;
var t2 = sessionScope.searchlastname;
var t3 = sessionScope.searchemail;
var t4 = sessionScope.searchcountry;
var t5 = sessionScope.searchcompany;
var resultArray = [];
if (t1) { resultArray.push("[FirstName] = " + t1); };
if (t2) { resultArray.push("[LastName] = " + t2); };
if (t3) { resultArray.push("[eMail] = " + t3); };
if (t4) { resultArray.push("[Country] = " + t4); };
if (t5) { resultArray.push("[Company] = " + t5); };
return @Implode(resultArray, " AND ");
} catch(e) {
print(e.message);
}
然后你做NotesView.FTSearch(....)
此方法的优点:您可以以任何方式对视图进行排序,您可以搜索视图中甚至未显示的字段。缺点:你需要一个FTIndex并且它需要更多的工作,因为你不能使用视图控件和结果DocumentCollection - 你需要一个RepeatControl