Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Grmpf am 16.10.06 - 13:03:20
-
hi,
Habe folgendes Problem wobei ich in meinem script keinen "logischen" Fehler erkennen kann :
es werden scheinbar zufällig keine dokumente aus meiner getalldocumentsbykey abfrage gefunden . Das keyarray befülle ich folgendermaßen :
Bsp:
keyarray(0) = Proc.URLParametereins(0)
keyarray(1) = Proc.URLParameterzwei(0)
keyarray(2) = Proc.URLParameterdrei(0)
dokumente holen :
Set doccollection = Ansicht1.GetAllDocumentsByKey(keyarray, false)
Set doc1 = doccollection.GetFirstDocument
....Abfragen per getitemvalue, GetNextDocument, usw.
in diesem Beispiel können Inhalte des Array auch einen leeren String beeinhalten.
Meine ansicht "Ansicht1" sieht folgendermaßen aus :
- 3 sortierte spalten die den jeweiligen Indexen des Arrays entsprechen , und den spaltenwert aus dem entsprechenden Feld beziehen.
Problem :
Auf den ersten Blick scheinen alle abfragen zu funktionieren , Die verschiedensten Kombinationen geben die richtigen werte zurück, und leere Array-INhalte werden akzeptiert.
Aber scheinbar wahllos werden einzelne Dokumente nicht gefunden . HIer ein Beispiel :
keyarray(0) = ""
keyarray(1) = ""
keyarray(2) = "Pdf"
findet kein dokument obwohl vorhanden .
ändere ich den Ihnalt eines Anderen Feldes des gleichen dokuments , oder lege ich ein neues dokument an wird es plötzlich gefunden ..
EDIT :
Das gleiche Problem tritt auch mit der Methode " GetAllEntriesByKey" .
Steh hier völlig auf dem schlauch und bin für jeden HInweis dankbar ;)
grüße
-
Hi und willkommen im Forum,
folgendes sagt die Hilfe dazu:
The use of partial matches with multiple keys may result in missed documents. If the first key is partial and the second column does not sort the same with the partial key as with the exact key, documents that fall out of sequence are missed.
Kannst Du den Exact-Matsch-Parameter nicht auf true umstellen?
Gruß
Willi
-
hi,
das problem ist ich muss es der abfrage ermöglichen leere strings in das keyarray zu stecken.
zur erklärung:
Ich baue eine art such/filterformular welches einige Menues hat die mitteinander kombinierbar in der abfrage sind und jede Kombination erlauben sollen.
Bsp: ein pulldownmenue für das "Thema"
eins für die "Authoren"
und eins für das "Medium"
Der User muss auch nur nach medium oder nach medium und thema suchen können zB. also jede kombination .
Bin notes-anfänger, und die Passendste Lösung für dieses Problem erschien mir mit GetAllDocumentsByKey oder GetAllEntriesByKey..
Wenn ich den Excact -Match auf true setze hab ich das problem das nur Dokumente gefunden werden wenn alle Werte des Arrays auf EIN spezielles Dokument zeigen. Also Alle werte übereinstimmen. So habe ich keine Möglichkeit mehr ,nach nur einem Suchkriterium zu filtern...
vielleicht habe ich eine andere möglichkeit sowas zu realisieren übersehen ?
danke im vorraus ;=)
-
Nutze doch, je nachdem welche Felder ausgefüllt sind, eine andere GetAllDocumentsByKey-Abfrage.
Dann aber mit true als Parameter.
-
Versuch's doch mal mit der Methode Search aus der Klasse NotesDatabase. Dieser kannst du die Suchkriterien übergeben und erhälst eine DocumentCollection als Ergebnis zurück.
Axel
-
So muss man die Suchformel aber auch anpassen, je nachdem welches Feld ausgefüllt wurde. Wenn Thema nicht ausgefüllt wurde, kann man der Formel ja nicht sagen Thema = "", Thema ist dann nur nicht relevant für die Suche.
-
hi nochmal ;)
versuchs grad mit der angesprochenen db.Search methode..
sieht so aus und klappt auch bei einem suchkriterium :
set col = db.Search( |Topic = "Testthema"| ,Nothing, 5)
Verzeiht mir meine unwissenheit, aber ich fand in keiner doku etwas dazu wie ich diese methode nutzen kann um mehrere suchkriterien anzugeben . Stelle mir da sowas vor (beispielhaft):
set col = db.Search(|Topic = "Testthema" AND Author = "Testauthor" |, Nothing, 5)
klappt so leider nicht ^^ Ideen ?
danke nochmal ;)
-
der Search- String ist ein @Formula- Suchstring wie Du ihn in einer Ansicht verwenden würdest, nur ohne Select.
korrekt wäre also:
set col = db.Search(|Topic = "Testthema" & Author = "Testauthor" |, Nothing, 5)
oder wenn Du nicht nur 5 sondern alle Ergebnisse willst:
set col = db.Search(|Topic = "Testthema" & Author = "Testauthor" |, Nothing, 0)
HTH
Tode
-
guten morgen ;)
danke erstmal für die vielen antworten . Die Abfrage per db.search(....) funktioniert soweit auch bei mehreren Kriterien.
Nur leider nur auf folgendem weg(direkt im Methodenaufruf) :
Set col = db.Search(|Topic = "Programming Language" & Author = "Brian Benz" & Medium = "Print"|, Nothing, 0)
Da ich es variabel (jede kombination ) halten muss und auch Leerstrings abfangen muss versuche ich es so :
menstr1 = "|Topic = " + quotes + Proc.URLParameterTopic(0) + quotes
menstr2 = " & Author = " + quotes + Proc.URLParameterAuthor(0) + quotes
menstr3 = " & Medium = " + quotes + Proc.URLParameterMedium(0) + quotes + "|"
...abfangen von leerstrings... etc.
fquery = menstr1 + menstr2 + menstr3
Set col = db.Search(fquery, Nothing, 0)
... wenn ich mir die fquery ausgeben lasse sieht die genauso aus wie wenn ich sie direkt reinschreiben würde, trotzdem erhalte ich im log die meldung : Notes error: Formula Error
jmd ne idee ?
-
Da sind Pipe-Zeichen zuviel.
Versuch's mal so:
menstr1 = {Topic = "} & Proc.URLParameterTopic(0) & {"}
menstr2 = { & Author = " } & Proc.URLParameterAuthor(0) & {"}
menstr3 = { & Medium = "} & Proc.URLParameterMedium(0) & {"}
...abfangen von leerstrings... etc.
fquery = menstr1 & menstr2 & menstr3
Axel
Set col = db.Search(fquery, Nothing, 0)