0

我正在使用向量在 XPages 中执行多列搜索功能。它工作但效率不高。在过滤列值属性中,我使用以下代码:

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 个结果。

4

1 回答 1

1

我假设您使用 Vector 来搜索视图。在 Notes 中,视图搜索需要“升序填充”键(除了所有列都需要排序)。因此,当 Vector 中的第二个元素不为空时,第一个元素也不能为空。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

于 2013-06-04T10:58:37.417 回答