Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: manderson am 09.07.12 - 11:42:31

Titel: dblookup auf multiple Spalten und Keys?
Beitrag von: manderson am 09.07.12 - 11:42:31
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?  ???
Titel: Re: dblookup auf multiple Spalten und Keys?
Beitrag von: Sven Hasselbach am 09.07.12 - 12:04:58
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;

Schöner ist es natürlich, hierfür einen NotesViewNavigator zu nutzen, und ggf. auch ein Error-Handling einzubauen :-)
Titel: Re: dblookup auf multiple Spalten und Keys?
Beitrag von: manderson am 12.07.12 - 15:58:59
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;
Titel: Re: dblookup auf multiple Spalten und Keys?
Beitrag von: Sven Hasselbach am 12.07.12 - 21:05:34
Hmmm.

Ich glaub das ist es, was Du suchst:
http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=AAC8E26599256FDC852578CB0066CC13 (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...
Titel: Re: dblookup auf multiple Spalten und Keys?
Beitrag von: manderson am 13.07.12 - 09:40:21
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?  :-:
Titel: Re: dblookup auf multiple Spalten und Keys?
Beitrag von: Sven Hasselbach am 13.07.12 - 10:06:05
In einem Kundenprojekt habe ich das ganze mit einer FT Search auf die Ansicht gelöst, der aus den Werten der einzelnen comboBoxen die Filterkriterien zusammen gesetzt hat. So ging zwar die Kategorisierung/Sortiermöglichkeit flöten, doch es wurden nur die selektierten Dokumente angezeigt (später wurde das ganze dann in eine "echte" Filter-Ansicht umgebaut, doch das sprengt hier den Rahmen).