Autor Thema: dblookup auf multiple Spalten und Keys?  (Gelesen 4173 mal)

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
dblookup auf multiple Spalten und Keys?
« 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?  ???

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: dblookup auf multiple Spalten und Keys?
« Antwort #1 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 :-)

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: dblookup auf multiple Spalten und Keys?
« Antwort #2 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;

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: dblookup auf multiple Spalten und Keys?
« Antwort #3 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

Oder was möchtest Du umsetzen?

EDIT:
Alternativ wäre natürlich auch eine FT-Suche denkbar...
« Letzte Änderung: 12.07.12 - 22:25:50 von Sven Hasselbach »

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: dblookup auf multiple Spalten und Keys?
« Antwort #4 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?  :-:

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: dblookup auf multiple Spalten und Keys?
« Antwort #5 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).



 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz