** Thema ist Erledigt **
*************************************
Hi,
in einer DB habe ich etwa 5000 Dokumente, werden täglich mehr.
Wenn ein neues Dokument erstellt wird, soll im Querysave geprüft werden, ob der Wert im Feld "ID" nicht schon mal vorkommt.
Gibt es schon ein Dokument mit dieser "ID", so soll das Speichern abgebrochen werden (Continue = False) mit einer Fehlermeldung.
Bisher hab ich das so umgesetzt:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
On Error Goto ErrorHandler
Dim session As New NotesSession
Dim db As NotesDatabase
Dim docThis As NotesDocument
Dim viewLookupID As NotesView
Dim docLookup As NotesDocument
Dim strCurrentID As String
Set docThis = Source.Document
Set db = session.CurrentDatabase
strCurrentID = docThis.ID(0)
Set viewLookupID = db.GetView("LookupID")
Set docLookup = viewLookupID.GetFirstDocument
While Not (docLookup Is Nothing)
If docLookup.ID(0) = strCurrentID And Not (docLookup.UniversalID = docThis.UniversalID) Then
Msgbox "Möp"
Continue = False
Exit Sub
End If
Set docLookup = viewLookupID.GetNextDocument(docLookup)
Wend
Der Teil
And Not (docLookup.UniversalID = docThis.UniversalID)
ist drin, weil ja sonst eine Fehlermeldung kommt, wenn ein User ein bestehendes Dokument speichert (weil es das Dok ja schon in der View gibt). Eine Prüfung auf IsNewDoc kann ich hier aber nicht einbauen, weil sich die "ID" auch öfter ändern kann/wird.
Problem:Das Konstrukt ist sehr langsam! Ist ja auch klar, hier wird beim Speichern Dokument für Dokument durchgesehen.
Hat wer von Euch einen Vorschlag, um das ganze zu beschleunigen? Ich brauche allerdings auch eine Prüfung à la "If (docLookup.UniversalID = docThis.UniversalID)".
Habe da schon an NotesView.GetAllDocumentsByKey gedacht. Wäre sicherlich schneller. Aber die o.g. Prüfung bringe ich dann nicht hin, oder?
Ich glaube ich hab gerade ein Brett vor'm Kopf und es müsste doch einfacher gehen.
Matthias
P.S. die Umstände bei diesem Konstrukt sind mir klar (mehrere Repliken etc.), aber die DB läuft 100% nur auf 1 Server, lokal werden keine Dokumente erstellt.