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 の 2 番目の要素が null でない場合、最初の要素も null にすることはできません。Notes は最初のキーを検索し、次に 2 番目のキーの結果を検索し、キーが空になるまで検索を続けます。したがって、2 番目のキーのみで検索すると、結果は空になります。これは Notes のコア機能であり、XPages に固有のものではありません。代わりに、ビューに対してフィールド名で 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 に答える