Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: aoibhneach am 14.10.22 - 10:43:13

Titel: LotusScript und Formel db.search
Beitrag von: aoibhneach am 14.10.22 - 10:43:13
Hallo Forum, Guten Morgen,

Ich habe den Lotus Notes viele Beiträge gelesen, aber keine passende Lösung gefunden. Entschuldigung, falls ich zu ungeduldig bin.
In einer Datenbank möchte ich nach allen Dokumenten suchen, die der Bedingung Form = "MyForm" genügen.

Code
Dim coll as NotesDocumentCollection
Dim suchformel As String
suchformel = {Form = "MyForm"}
Set coll = thisdb.Search(suchformel, Nothing,0)

Im Debugmodus erscheint suchformel so:

Code
"Form =""MyForm"""

Das sieht schon nicht so gut aus - oder? Das Suchergebnis ist:

coll.count = 0

Dagegen ergibt z.B.:

Code
Set coll = view.GetAllDocumentsByKey("MyForm")

coll.count = 12345

In der LotusNotes-Hilfe steht in einem Beispiel (Ausschnitt):

Code
searchFormula$ = {Form = "Project" & ReminderDate = @Today}
Set collection = db.Search(searchFormula$, Nothing,0)

Gleicht das im Aufbau der Formel (die Gänsefüßchen) nicht meinem Versuch?

Ich habe es (aus purer Panik  ;)) auch so probiert:
Code
suchformel = {Form = "} &  "MyForm" & {"}

Ich bin ratlos; andererseits aber sicher, dass ich etwas übersehen haben muss.

Vielen Dank für Euren Rat.

Viele Grüße,

Nils
Titel: Antw:LotusScript und Formel db.search
Beitrag von: CarstenH am 14.10.22 - 11:03:28
Die Methode notesDatabase.Search ist hier Case sensitiv da die angegebene Formel den Feldinhalt 1:1 mit deinem "MyForm" vergleicht.

Die Methode notesView.GetDocumentByKey ist es hingegen nicht, hier wird nur gegen den Viewindex geprüft.

Last but not least: "Form =""MyForm""" ist nur eine andere Schreibweise bei der {} durch "" ersetzt wird.

HTH
Carsten
Titel: Antw:LotusScript und Formel db.search
Beitrag von: aoibhneach am 14.10.22 - 11:22:29
Hallo Carsten,

Die "{}" benutze ich schon seit Ur-Zeiten. Der "Unterschied" ist mir klar, glaube ich. Ich muss doch in der Formel den Namen der Form in Hochkommas setzen.

Und: Bei Setzen des String "suchformel" muss der ganze Inhalt doch ebenso in Hochkommas eingeschlossen werden.

Dass bei mir die Hochkommas vervielfältigt werden, habe ich als Ursache für das ungewollte Suchergebnis gesehen.

Ist meine Formel und richtig? Warum ist mein Ergebnis "0"? Was ist da falsch?

Viele Grüße,

Nils
Titel: Antw:LotusScript und Formel db.search
Beitrag von: CarstenH am 14.10.22 - 11:32:40
Die Formel an sich ist korrekt, der Client speichert eben nur statt der Klammern {} die Anführungszeichen "".
Und damit die in der Formel zusätzlich vorhandenen Anführungszeichen die Zeichenkette nicht unterbrechen werden sie doppelt dargestellt. Das hat mit deinem Suchergebnis aber nichts zu tun.

Warum dein Suchergebnis vermutlich 0 ist habe ich dir auch beschrieben: wenn im Formfeld z.B. "MYFORM" steht, du aber nach "MyForm" suchst dann findet Search auch nichts.

Tipp:
Leg dir einfach temporär eine View an und packe die Formel zum Testen da hinein, dann siehst du ohne Debugger ob sie funktioniert.

HTH
Carsten
Titel: Antw:LotusScript und Formel db.search
Beitrag von: aoibhneach am 14.10.22 - 12:07:36
Hallo Carsten,

Die doppelten Hochkomma verstehe ich jetzt. Auf die Schreibweise des Namens der Form habe ich auch geachtet. Ich probiere weiter. Ob ich ein "SELECT" einfügen muss? Ich probiere weiter.

Vorerst vielen Dank und Grüße,

Nils
Titel: Antw:LotusScript und Formel db.search
Beitrag von: DominoDancing am 14.10.22 - 12:11:32
Hallo Nils,

Carsten hat Recht, Dein Code ist erst einmal korrekt. Nein, ein SELECT ist nicht notwendig. Du solltest neben der korrekten Schreibweise der verwendeten Maske auch prüfen, ob bei Dir thisdb sauber gesetzt ist. In der Standard-Mailanwendung funktioniert dies

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim suchformel As String
   
   Set db = session.CurrentDatabase
   suchformel = {Form = "Memo"}
   Set dc = db.Search(suchformel, Nothing,0)

fehlerfrei.

Liebe Grüße
René
Titel: Antw:LotusScript und Formel db.search
Beitrag von: pantelis.botsas am 14.10.22 - 13:05:23
In anderen Worten ... ersetze mal in Deinem Code (Zeile 3), das hier:

Code
suchformel = {Form = "MyForm"}

durch das hier:
Code
suchformel = {@UpperCase(Form) = @UpperCase("MyForm")}
Titel: Antw:LotusScript und Formel db.search
Beitrag von: aoibhneach am 14.10.22 - 14:58:04
Liebe Leute,

Ich habe die Vorschläge von René und Pantelis beachtet und angewendet. Dann fiel mir noch die kleine, aber in diesem Falle entscheidende, Bemerkung auf:
Zitat
-Du solltest ... auch prüfen, ob bei Dir thisdb sauber gesetzt ist
Und auf einmal:

 :) HURRA  :)

Aber: Gut das ich am anderen Ende der Strippe sitze. Die Datenbank mit den gesuchten Dokumenten (MyForm) ist nicht die, in welcher der Agent läuft.  Denn der Agent soll nicht in der DB laufen, welche die gesuchten Daten enthält.
Beide Datenbanken sind im Initialize des Agenten sauber definiert.
Deswegen lief ja schon alles über eine View der anderen DB:
Code
MyView.GetAllDocumentsByKey("MyForm")


Durch Renè's Tipp fiel mir auf, dass ich SEARCH auf die falsche Datenbank angewendet hatte.  :-:

"Blinder Eifer schadet nur..." oder so etwa.

Kaum macht man es richtig, schon funktionierts.

Vielen Dank dafür, dass Ihr mich aus meiner Umnachtung gerissen habt.  :)

Viele Grüße,

Nils