矢量搜索在XPage中无法正常工作

时间:2013-06-04 08:35:19

标签: xpages lotus-notes xpages-ssjs

我正在使用向量在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结果。

1 个答案:

答案 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