** 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.