Autor Thema: Notes-Fehler 4005: Eintrag im Index nicht gefunden  (Gelesen 4143 mal)

Jürgen Schomann

  • Gast
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.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Notes-Fehler 4005: Eintrag im Index nicht gefunden
« Antwort #1 am: 29.04.12 - 22:43:23 »
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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Notes-Fehler 4005: Eintrag im Index nicht gefunden
« Antwort #2 am: 30.04.12 - 15:07:23 »
@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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Notes-Fehler 4005: Eintrag im Index nicht gefunden
« Antwort #3 am: 30.04.12 - 15:15:18 »
Ich Doof - Du hast natürlich vollkommen recht, Torsten, und ich habe zu oberflächlich gelesen ...
Danke für die Korrektur!

Bernhard

Jürgen Schomann

  • Gast
Re: Notes-Fehler 4005: Eintrag im Index nicht gefunden
« Antwort #4 am: 30.04.12 - 20:39:27 »
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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz