Domino 9 und frühere Versionen > ND8: Entwicklung - XPages
dblookup auf multiple Spalten und Keys?
manderson:
Guten Morgen,
wie kann ich es hin bekommen das ich per dblookup in weiteren Spalten als Nr1 suchen lassen kann?
Also key1 sucht in spalte 1, key2 sucht in spalte 2 usw. und die Werte von Spalte XYZ werden dann ausgegeben?
Ist das denn Überhaupt möglich? ???
Sven Hasselbach:
Mit @DbLookup geht das nicht, jedoch mit SSJS.
Hier ein Beispiel:
--- Code: ---var key:java.util.Vector = new java.util.Vector();
key.add("Suche1"); // Key für 1. Spalte
key.add("Suche2"); // Key für 2. Spalte
var luView:NotesView = database.getView("Lookup"); // View, in der gesucht werden soll
var ec:NotesViewEntryCollection = luView.getAllEntriesByKey( key );
var entry:NotesViewEntry = ec.getFirstEntry();
var tmpEntry:NotesViewEntry;
var data:java.util.Vector = new java.util.Vector(); // hier kommen die Daten rein
while( entry != null ){
data.add( entry.getColumnValues().get(2) ); // wenn die Werte in der dritten Spalte stehen (beginnt bei 0)
tmpEntry = entry;
entry = ec.getNextEntry();
tmpEntry.recycle();
}
ec.recycle();
luView.recycle();
return data;
--- Ende Code ---
Schöner ist es natürlich, hierfür einen NotesViewNavigator zu nutzen, und ggf. auch ein Error-Handling einzubauen :-)
manderson:
Hallo!
Vielen, vielen dank für die Hilfe das ganze funktioniert ganz gut nur habe ich noch ein Problem an dem ich gerade total verzweifle.
In meiner view habe ich 4 Spalten:
1.) Sortiert - Sprache (ist ein kürzel entweder DE oder EN)
2.) Sortiert - Funktion (hier steht 1 Wort, z.B. Hausmeister)
3.) Sortiert - Land (hier steht 1 Wort, z.B. Deutschland)
3.) Sortiert - Stadt (hier steht 1 Wort, z.B. Berlin)
Ich bekomme per parameter nun bis zu 4 Keys, entsprechend den Werten der 4 Spalten. Den Key für Sprache bekomme ich immer, da ich nach der browsersprache abfrage, falls ich die nicht ermittel kann, fallback auf DE. Die anderen 3 Werte sind optional, sprich mal bekomme ich die Wert für Funktion und Land, mal nur für Stadt usw..
Mein Problem ist wenn jemand z.B. nur einen wert für "Land" angibt bleibt der Key für "Funktion" leer. Nun sucht er mit den ersten Key ja nach der Sprache in der Spalte 1, sagen wir der Key hat den Wert "DE" - von 20 Einträgen findet er 10. Nun sucht die Suche mit den 2 Key (Funktion) nach nichts und findet nichts - also gibt er nichts zurück - 0 Einträge. Die Suche nach Land und Sadt ist nun eigentlich egal da 0 Einträge....
Ich habe in meinen Spalten schon die Werte per formel so angepasst: x123-WERT - damit wenn ein Key leer ist wenigsten immer nach x123- gesucht wird. aber das bringt auch nichts.
Was mache ich falsch? ???
--- Code: ---var key:java.util.Vector = new java.util.Vector();
key.add("DE"); // Key für 1. Spalte
key.add(""); // Key für 2. Spalte
key.add("Deutschland"); // Key für 3. Spalte
key.add(""); // Key für 4. Spalte
var luView:NotesView = database.getView("Lookup"); // View, in der gesucht werden soll
var ec:NotesViewEntryCollection = luView.getAllEntriesByKey( key );
var entry:NotesViewEntry = ec.getFirstEntry();
var tmpEntry:NotesViewEntry;
var data:java.util.Vector = new java.util.Vector(); // hier kommen die Daten rein
while( entry != null ){
data.add( entry.getColumnValues().get(2) ); // wenn die Werte in der dritten Spalte stehen (beginnt bei 0)
tmpEntry = entry;
entry = ec.getNextEntry();
tmpEntry.recycle();
}
ec.recycle();
luView.recycle();
return data;
--- Ende Code ---
Sven Hasselbach:
Hmmm.
Ich glaub das ist es, was Du suchst:
http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=AAC8E26599256FDC852578CB0066CC13
Oder was möchtest Du umsetzen?
EDIT:
Alternativ wäre natürlich auch eine FT-Suche denkbar...
manderson:
Ja so ungefähr sieht das bei mir auch aus. Problem ist aber das man scheinbar nur so immer so filtern kann:
Filter 1 -> Spalte 1, Filter 2 -> Spalte 2, Filter 3 -> Spalte 3, Filter 4 -> Spalte 4
Doch wenn man z.B. den Filter 2 für Spalte 2 nicht setzt, aber für Filter 3 & 4, dann werden keine Ergebnise geliefert werden.
Filter 1 -> Spalte 1, Filter 2 -> Spalte 2, Filter 3 -> Spalte 3, Filter 4 -> Spalte 4
Man muss scheinbar immer die (Spalten)Reihenfolge einhalten, und kann nich sagen "Suche in Spalte 1, 5 und 13". Möglich wäre es vielleicht wen man für die ausgelassen Spalten mit einer art Wildcard * sucht um alle Dokumente zu bekommen, aber gibt es sowas? :-:
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln