Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Jürgen Schomann am 29.04.12 - 22:19:56
-
ich habe folgenden LotusScript-Code
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim entryNext As NotesViewEntry
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set view = db.GetView("vaM1")
Set vc = view.GetAllEntriesByKey("7", True)
Set entry = vc.GetFirstEntry
While Not (entry Is Nothing)
Set entryNext = vc.GetNextEntry(entry)
If entry.IsValid Then
Set doc = entry.Document
If Not IsNull(doc) Then
Call doc.RemovePermanently(True)
End If
End If
Set entry = entryNext
Wend
Meistens läuft der Code korrekt durch, doch manchmal kommt der Notes-Fehler 4005 'Eintrag im Index nicht gefunden'.
Woran kann das liegen, wird die Ansicht ggf. nicht immer rechtzeitig aktualisiert?
Man könnte statt der NotesViewEntryCollection ja auch eine Variante mit NotesDocumentCollection nehmen.
-
Mich wundert, dass dieser Code überhaupt funktioniert ...
Mich wundert zudem, wie man in einer DB massenweise Dokumente einfach löschen kann. Abewr das mag ja hier mal richtig sein.
Tipps:
Bei Loops durch Views / Collections, in denen Dokumente gelöscht werden, muss man entweder
- Update via entspr. Properties ausschliessen oder
- noch sicherer vor dem Löschen das nächste Doc holen.
Wenn Du wie hier alle Dokumente, die auch auch eine View greift, löschen willst: Warum bildest Du nicht nach den selbern Kriterien eine Collection und knallst die am Stück weg?
Bernhard
-
@Bernhard: das nächste holt er ja vor dem löschen, das ist soweit richtig....
Bei documentcollections gibts kein removepermanently, weshalb man manchmal durchloopen muss...
Aber: view.AutoUpdate = False ist in diesem Fall unabdingbar...
-
Ich Doof - Du hast natürlich vollkommen recht, Torsten, und ich habe zu oberflächlich gelesen ...
Danke für die Korrektur!
Bernhard
-
Vielen Dank für eure Hinweise.
Ich weiss auch, dass man mit RemoveAll alle Dokumente auf einmal löschen könnte. Lt. Notes-Hilfe werden bei einer NotesDocumentCollection, diese auch permanent gelöscht. Bei einer ViewEntryCollection ist dies nicht ausdrücklich angegeben.
Dass man AutoUpdate = False setzen sollte habe ich nicht beachtet.
Mein Code ist aber nur ein Extrakt aus einem komplexeren Vorgang. Die Dokumente werden dort noch umfangreich geprüft, ggf. modifiziert und dann in eine weitere Datenbank kopiert.
Erst danach wird das jeweilige Dokument, abhängig von der vorangegangenen Prüfung in der Ursprungsdatenbank, gelöscht.
Man könnte auch andere Verfahrensweisen ansetzen: z. B. alle verarbeiteten Dokumente zuerst durchlaufen, nach Prüfung ggf. in die andere Datenank kopieren und in der Ursprungsdatenbank kennzeichnen. Danach dann die gekennzeichneten Dokumente nochmals als Collection holen und auf einmal löschen.
Der bessere Weg wäre wohl außerdem auch eine NotesDocumentCollection statt einer NotesViewEntryCollection zu benutzen.