Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: my head am 04.02.03 - 13:52:46
-
wie kann ich in ner ansicht in vier spalten suchen lassen, wenn die ansicht folgendermassen aussieht:
name abt zimmer tel-nr
(alpha-num.) (num.)
hat jmd schon mal ein ähnliches problem gehabt??
ich hab keine ahnung, wie's lösen soll, da die "normale" notes-suche keine reinen zahlen findet!!!
-
laut Notes Hilfe:
Set notesDocumentCollection = notesView.GetAllDocumentsByKey( keyArray
[ ,exact ] )
Parameters
keyArray
String, integer, long, single or double value, or array of strings, number, DateTime, or DateRange objects. Each element in the array is compared to a sorted column in the view. The first element in the array is compared to the first sorted column in the view; the second element is compared to the second sorted column; and so on.
exact
Boolean. Optional. Specify True if you want to find an exact match. If you specify False (the default) or omit this parameter, a partial match succeeds.
Return value
notesDocumentCollection
All documents in the view whose column values match each of the strings in keyArray. If no documents match, the collection is empty and the count is zero.
cu
-
muss ich mit ner collection dann für drei spalten in vier verschiedenen ansichten suchen?? und dann über das dokument in der eigentlichen ansicht ausgeben lassen??
oder kann ich damit in vier spalten einer ansicht??
-
du kannst in einer view nach vier Spalten suchen - oder mehr je nachdem wie du deinen array aufbaust.
cu
-
versteh im moment nicht ganz wie ich das array deklarieren muss...
ich möchte eine maske haben mit eingabefeld und button... möchte dort den suchtext eingeben... und in anschließend in einem ordner oder einer ansicht abspeichern...
-
so... hab nochmal nachgedacht, bin in mich gegegangen usw.
mit getdocumentsbykey kann ich doch nur immer werte aus der ersten geordneten spalte suchen, oder...?
demzufolge bräuchte ich für die vier spalten meiner ansicht, vier ansichten mit je einer spalte und könnte die dokumente dann einen ordner kopieren!!!
geht das??
oder einfacher???
-
so... hab nochmal nachgedacht, bin in mich gegegangen usw.
mit getdocumentsbykey kann ich doch nur immer werte aus der ersten geordneten spalte suchen, oder...?
demzufolge bräuchte ich für die vier spalten meiner ansicht, vier ansichten mit je einer spalte und könnte die dokumente dann einen ordner kopieren!!!
geht das??
oder einfacher???
Zitierst Du doch oben selber aus der Hilfe:
"The first element in the array is compared to the first sorted column in the view; the second element is compared to the second sorted column; and so on."
Also brauchst Du ein array x(0) bis x(3) und setzt das mit GetAllDocumentsByKey() auf Deine Ansicht mit sortierten Spalten an.
-
hab das jetzt so gemacht...
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim thisdoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As Notesview
Dim dc As NotesDocumentCollection
Dim keyarray(3) As String
Set db = s.CurrentDatabase
Set thisdoc = workspace.CurrentDocument
Set view = db.getview("alle")
keyarray(0)=thisdoc.fieldgettext("name")
keyarray(1)=thisdoc.fieldgettext("abt")
keyarray(2)=thisdoc.fieldgettext("zimmer")
keyarray(3)=thisdoc.fieldgettext("tel")
Set dc= view.getalldocumentsbykey(keyarray)
Call dc.putallinfolder("erg")
End Sub
wie kann ich es jetzt aber verwirklichen, dass er wenn nur ein wert (z.b. name) eingegeben ist, die anderen ignoriert??
-
Wenn Du keine Werte überspringen mußt, kannst Du das array mit Redim Preserve entspr. verkleinern.
Ansonsten mußt Du leider mit .Search() arbeiten, wenn zB 'abt' leer ist.
-
indem du den Parameter exact auf false setzt
Set dc= view.getalldocumentsbykey(keyarray, false)
cu
-
indem du den Parameter exact auf false setzt
Set dc= view.getalldocumentsbykey(keyarray, false)
Hups, das geht?
Ich dachte immer, Notes braucht zumindest einen Teilstring:
"For non-exact matches, returns only those documents that match the initial characters. For example, "T" matches "Tim"."
Wieder was gelernt! Danke!
-
indem du den Parameter exact auf false setzt
Set dc= view.getalldocumentsbykey(keyarray, false)
aber bei mir ist er ja auf false (standardmässig??)!!
geht aber nicht!!
-
@wflamme
du hast recht, ich hatte mich auf "partial match" bezogen.
@my head
das genauso wie es wflamme beschrieben hat - d.h. wenn du den ersten und den letzten Wert eines arrays hast nutzt dir das wenig, du kannst dann im Prinzip nur nach dem ersten Wert suchen
- ansonsten eine db.search oder view.ftsearch mit deinen Kriterien - wobei der search string dann dynamisch sein kann.
cu
-
@wflamme
du hast recht, ich hatte mich auf "partial match" bezogen.
Schade, und ich dachte, ich wäre wieder mal klüger geworden :'(
-
wenn's jemanden interessiert, hab's so gelöst:
Dim workspace As New NotesUIWorkspace
Dim thisdoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As Notesview
Dim switch As Integer
Dim suchtext As String
Dim person As String
Dim abt As String
Dim zimmer As String
Dim tel As String
Set db = s.CurrentDatabase
Set view = db.getview("alle")
Set thisdoc = workspace.CurrentDocument
suchtext = thisdoc.fieldgettext("suchtext")
Set doc = view.getfirstdocument
switch=0
Do Until (doc Is Nothing)
If Not Instr(doc.getitemvalue("name")(0) , Strconv(suchtext,3)) = 0 Then
switch=1
Elseif Not Instr (doc.getitemvalue("abt")(0), Ucase(suchtext)) = 0 Then
switch=1
Elseif Not Instr (doc.getitemvalue("zimmer")(0) , Ucase(suchtext)) = 0 Then
switch=1
Elseif Not Instr (doc.getitemvalue("tel")(0) , suchtext) = 0 Then
switch=1
End If
If switch = 1 Then
person = person + doc.getitemvalue("name")(0) + Chr(10)
abt = abt +doc.getitemvalue("abt")(0) + Chr(10)
zimmer = zimmer + doc.getitemvalue("zimmer")(0) + Chr(10)
tel = tel +Cstr(doc.getitemvalue("tel")(0)) + Chr(10)
switch = 0
End If
Set doc=view.getnextdocument(doc)
Loop
Call thisdoc.fieldsettext("suchname",person)
Call thisdoc.fieldsettext("suchabt",abt)
Call thisdoc.fieldsettext("suchzimmer",zimmer)
Call thisdoc.fieldsettext("suchtel",tel)