XPages und die Suche im Web

Ich habe an eienem größeren Projekt gearbeitet, welches eine native Lotus Notes Anwendung 1:1 um eine Web-Oberfläche erweitern sollte. Dies wurde mit Hilfe der XPages durchgeführt. An sich erst einmal eine schöne Sache, allerdings sind die XPages noch sehr buggy. Diese Fehler mussten umschifft werden.

Es wurde nun aktuell ein Defect des Kunden gemeldet. Die Suche in den XPages funktioniere nicht immer korrekt. Jede „Ansicht“ besitzt ein Suchfeld, über das die Dokumente durchsucht werden können. Dies ist zunächst als reine Volltextsuche umgesetzt. Ich habe es mit den Tipps aus dem „XPages-Wiki“ realisiert. Damit sollte eigentlich alles gefunden werden, nachdem gesucht wird.

Dem ist aber nicht so. Ich habe als erstes wieder daran gedacht, dass es sich um einen weiteren Bug in der XPages-Implementierung handelt, aber weit gefehlt. Nach längerem probieren und testen konnte ich erkennen, dass es sich immer um Zahlenfelder handelt, die nicht durchsucht werden. Ich habe dies auch im Notes-Client probiert und auch hier wurden keine Zahlen gefunden. In der Anwendung ist es aber gerade in der Web-Oberfläche wichtig, dass Kundennummern gefunden werden. Diese waren in Zahlenfelder abgelegt.

Nach einiger Recherche im Internet stieß ich dann auch darauf, dass das in Lotus Notes genauso umgesetzt ist. Datenbanken – auch wenn sie Volltext-Indiziert sind – werden nicht nach Zahlenfeldern durchsucht. Der Grund dafür ist mir noch nicht klar… Auf jeden Fall zieht sich dieses Problem bis in die XPages. Damit funktioniert meine Suche nicht.

Es gibt allerdings eine recht simpele Lösung für das Problem. In der Volltextsuche im Notes-Client können die Dokumente direkt auf die Inhalte bestimmter Felder durchsucht werden. Es handelt sich dann nicht mehr um eine Volltextsuche, sondern um eine Suche auf Basis z.B. eines Feldes. Dafür muss allerdings der suchende den Feldnahmen kennen und kann diesen dann mit in das Suchfeld eintragen. In etwa so:

[FN_Kundennummer]=123456

Damit werden dann alle Dokumente der Ansicht durchsucht und es werden alle Dokumente mit dem Zahlenfeld-Inhalt „123456“ angezeigt. Genau dieses funktioniert auch in den XPages. Allerdings nur, wenn es vom Programmierer so umgesetzt wird. Grundsätzlich kann in das Suchfeld nicht diese „Formel“ eingetragen werden. Damit kommt der Domino-Server nicht zurecht. Wenn das Search-Property eines View-Panels allerdings so angepaßt wird, dass der Feldname vor den Suchstring gesetzt wird, funktioniert es, und die korrekten Dokumente werden angezeigt.

Da es sich bei mir um eine Ansicht sortiert nach Kundennummern handelt und der User im Grunde nur nach Kundennummer suchen möchte, habe ich das Ganze wie folgt umgesetzt. Ich habe eine weitere Such-Optimizer-Function geschrieben. Diese ruft die eigentliche Optimizer-Function auf und erweitert diese mit einem übergebenen Feld:

function searchOptimizeQuery_field(q:string, fieldname:string) {
    if (!q) return "";
    return "[" + fieldname + "]=" + searchOptimizeQuery(q);
}

Damit werden die Dokumente des ViewPanels dann nach Kundennummern durchsucht.

 

UPDATE:Leider habe ich noch etwas vergessen. Mit der oben genannten Umsetzung kann nur nach Zahlen gesucht werden. Wird ein Text eingegeben, erscheint ein Fehler. Um dieses zu lösen, prüfe ich als erstes, ob Suchstring tatsächlich eine Zahl ist. Dann wird das Suchquery wie oben beschrieben erweitert. Anderfalls wird eine normale Volltextsuche durchgeführt. Ich habe dies wie folgt gelöst:

function searchOptimizeQuery_field(q:string, fieldname:string) {
    if (!q) return "";

    if (IsNumeric(q) ) {
        return "[" + fieldname + "]=" + searchOptimizeQuery(q);
    } else {
        return searchOptimizeQuery(q);
    }
 }

function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *