Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: MadMetzger am 30.11.06 - 08:20:36

Titel: Problem mit NotesDatabase.Search
Beitrag von: MadMetzger am 30.11.06 - 08:20:36
Hallo,

ich habe ein kleines Problem mit der Search-Methode aus der NotesDatabase-Klasse. Ich suche mit einer Formel und müsste eigentlich auch was finden, aber leider finde ich nichts... Gebe ich die Suchformel per print aus, so sieht die Formel richtig aus. Schreibfehler in den Feldnamen habe ich ausgeschlossen, da ich mit Konstanten arbeite, die schon beim Erstellen genutzt werden.

Vielleicht kurz der Hintergrund: Ich hole mir aus dem Domänenkatalog alle Datenbanken und importiere diese in eine Art Softwareinventur. Nun möchte ich bei nochmaligem Ausführen des Imports verhindern, dass schon vorhandene Datenbanken doppelt importiert werden und prüfe halt per db.search, ob in der resultierenden Collection Dokumente enthalten sind. Die Konstanten für Feldnamen verwende ich auch beim Import.

Aber leider bleibt die Collection immer leer und damit wird alles mehrfach importiert...  :-:
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: Axel am 30.11.06 - 08:44:20
Wie sieht denn die Formel und der Aufruf von Search aus?


Axel
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: MadMetzger am 30.11.06 - 08:52:26
Hier:
Der Code mit dem Search:
Code
        Dim checkCollection As NotesDocumentCollection
	Dim formel As String
	Dim pathname As String
	
	pathname = doc.GetItemValue(CATALOG_FIELD_DATABASE_FILE_NAME$)(0)
	
	formel = {Form = "}+FORM_NAME$+{" & } + FIELD_FILE_NAME$ +{ = "}+pathname+{"} 
	Print formel
	Print SEARCH_FORMULA$
	
	Set checkCollection = target.Search(formel,Nothing,0)

Die Konstanten:
Code
'Gerätedatenbankfeldnamen
Const FIELD_CATEGORY$ = "Softwarekategorie"
Const FIELD_FILE_NAME$ = "SWDateiname"
Const FIELD_REPLICA_ID$ = "ReplicaID"
Const FIELD_DATABASE_TITLE$ = "SWName"

'Katalogfeldnamen
Const CATALOG_FIELD_DATABASE_TITLE$ = "Title"
Const CATALOG_FIELD_DATABASE_FILE_NAME$ = "Pathname"
Const CATALOG_FIELD_REPLICA_ID$ = "ReplicaID"
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: Axel am 30.11.06 - 09:02:11
Irgendwie fehlt mir die Konstante FORM_NAME$.


Axel
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: MadMetzger am 30.11.06 - 09:09:21
Die war auch definiert:
Code
Const FORM_NAME$ = "Software"
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: Axel am 30.11.06 - 10:28:12
Sieht eigentlich richtig aus. Ich verkette zwar die die einzelenen Teilstrings innerhalb der Suchformel mit & und nicht mit +, aber das dürfte hier keine Rolle spielen.

Hast du mal probiert was passiert, wenn du anstatt der Konstanten die Werte direkt angibst?


Axel

Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: MadMetzger am 30.11.06 - 10:38:21
Ob mit, ob ohne Konstante, das macht keinen Unterschied... Irgendwie beschleicht mich das Gefühl, dass ich irgendeine Kleinigkeit übersehen habe, aber ich weiß nicht, welche das sein kann...
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: HH am 30.11.06 - 10:52:46
Gib die Formel doch mal als Auswahlformel in eine Ansicht ein und schau was dabei herauskommt.

Hubert
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: Glombi am 30.11.06 - 11:03:41
Es wird an pathname liegen.

Die Formelsprache will ein "\\" falls die Datenbank in einem Unterverzeichnis liegt. Script liefert aber nur ein "\".

Du kannst mal versuchen in dem Schlüsselwortdokument folgendes einzugeben:
Verz1\\\\Verz2

Vielleicht gehts ja. Sonst musst Du halt vorher in dem Script Code aus "\" ein "\\" machen.

Andreas
Titel: Re: Problem mit NotesDatabase.Search
Beitrag von: MadMetzger am 30.11.06 - 11:13:28
Andreas hat Recht. Ich habe es parallel auch herausgefunden. Ein replace auf den String, wo "\" durch "\\" ersetzt wird, und schon läuft die Sache einwandfrei...

Letztendlich bin ich durch das Testen in einer Ansicht dem Problem auf die Schliche gekommen...

Und es war, wie schon vermutet eine Kleinigkeit, die man nicht bedacht hat...

Vielen Dank an alle Mitwirkenden!  :D