Was mir auf die Schnelle auf- bzw. einfällt:
1. Ich würde die Dokumente nicht löschen, sondern mit einem Flag versehen
Was passiert, wenn mit der Routine irgendetwas klemmt, so dass der Anhang nicht sauber gespeichert aber das Dokument gelöscht wurde? Gibt es Aufbewahrungspflichten für die eingegangenen Mails?
Also m.E. besser nicht löschen, sondern ein Feld hineinschreiben und dann speichern.
z.B.
doc.FlagBearbeitet = Now
Call doc.Save (True, True)
Wenn Du einen Zeitstempel als Flag verwendest, kannst Du später auch immer sehen, wann das Dokument verarbeitet wurde
2. Nicht über alle Dokumente laufen
Mit dc = db.AllDokuments holst Du immer alle Dokumente, unabhängig davon, ob die überhaupt einen Dateianhang haben. Unter Berücksichtigung des o.g. Flags hole die Dokumente über ein Search
Set dc = db.Search ({@IsAvailable ($FILE) & @Text (FlagBearbeitet) = ""}, Nothing, 0)
3. Du gehst nur über den ersten Anhang
Was passiert, wenn Du mehrere Dateianhänge hast? Die schicken zwei Rechnungen, die erste extrahierst Du (und dann löschst Du das Dokument, womit der o.g. Fehler schon eintritt). Oder (musste ich schmerzhaft erfahren) der Absender beginnt mit irgendwelchen tollen Tools schicke Disclaimer mit Bildchen seiner eigenen Großartigkeit anzuhängen, die dann auch noch vor dem eigentlichen Anhang liegen. Lass das noch als .tiff angehängt sein, dann interpretierst Du das Teil als Rechnung.
Also gehe über das Item Body und durchlaufe alle Anhänge
Dim rtitem As NotesRichtextItem
Set rtitem = doc.GetFirstItem ("Body")
If IsArray (rtitem.EmbeddedObjects) Then
Forall obj In rtitem.EmbeddedObjects
Select Case Lcase (StrRightBack (obj.Source, "."))
Case "tif", "pdf"
-> Datei extrahieren
End Select
End Forall
End If
In die Routine habe ich Dir auch gleich eine Möglichkeit der Dateitypenprüfung eingebaut. Die Befehle müssen nicht 100 %ig korrekt sein, sind nur aus dem Kopf, also ggf. sinngemäß verwenden. obj.Source gibt Dir den Dateinamen des Anhangs.
4. Optional den Dateinamen beim Speichern individualisieren
Evtl. würde ich den Dateinamen beim Speichern mit einem Zeitstempel versehen, denn wenn jemand immer die Rechnung als Rechnung.pdf schickt, kollidiert dieser Dateiname mit der früher schon abgelegten Datei, falls diese nicht irgendwie anders weiterverarbeitet und verschoben/umbenannt werden.