Hallo zusammen,
ich benötige bei dem Lösen eine Aufgabe eure Unterstützung.
Wir haben eine Datenbank in der wir unsere eingescannten Rechnungen ablegen. Diese beinhaltet bis dato ca. 23.000 Dokument. Jedes dieser Dokumente besitzt n-Anhänge, die als JPG's in einem Richtextfeld abgespeichert werden.
Die konkrete Aufgabe lautet nun: Alle Dokumente mit Anhang und Daten exportieren (Migration auf DMS System).
Mittels folgendem Script, das ich im Internet gefunden habe, kann ich n-Anhänge in einem beliebigen Ordner speichern. Das funktioniert bestens.
| Sub Initialize |
| |
| Set s = New NotesSession |
| Set w = New NotesUIWorkspace |
| Set db = s.CurrentDatabase |
| Set dc = db.UnprocessedDocuments |
| Set doc = dc.GetFirstDocument |
| |
| Dim rtItem As NotesRichTextItem |
| Dim RTNames List As String |
| Dim DOCNames List As String |
| Dim itemCount As Integer |
| Dim sDefaultFolder As String |
| Dim x As Integer |
| Dim vtDir As Variant |
| Dim iCount As Integer |
| Dim j As Integer |
| Dim lngExportedCount As Long |
| Dim attachmentObject As Variant |
| |
| x = Msgbox("This action will extract all attachments from the " & Cstr(dc.Count) & " document(s) you have selected, and place them into the folder of your choice." & Chr(10) & Chr(10) & "Would you like to continue?", 32 + 4, "Export Attachments") |
| If x <> 6 Then Exit Sub |
| |
| sDefaultFolder = s.GetEnvironmentString("LPP_ExportAttachments_DefaultFolder") |
| If sDefaultFolder = "" Then sDefaultFolder = "F:" |
| vtDir = w.SaveFileDialog( False, "Export attachments to which folder?", "All files|*.*", sDefaultFolder, "Choose Folder and Click Save") |
| |
| If Isempty(vtDir) Then Exit Sub |
| sDir = Strleftback(vtDir(0), "\") |
| Call s.SetEnvironmentVar("LPP_ExportAttachments_DefaultFolder", sDir) |
| |
| While Not (doc Is Nothing) |
| |
| iCount = 0 |
| itemCount = 0 |
| lngExportedCount = 0 |
| Erase RTNames |
| Erase DocNames |
| |
| 'Scan all items in document |
| Forall i In doc.Items |
| |
| 'Messagebox i.Name |
| |
| If i.Type = RICHTEXT Then |
| Set rtItem = doc.GetfirstItem(i.Name) |
| If Not Isempty(rtItem.EmbeddedObjects) Then |
| RTNames(itemCount) = Cstr(i.Name) |
| itemCount = itemCount +1 |
| End If |
| End If |
| |
| End Forall |
| |
| For j = 0 To itemCount-1 |
| Set rtItem = Nothing |
| Set rtItem = doc.GetfirstItem(RTNames(j)) |
| Forall Obj In rtItem.EmbeddedObjects |
| If ( Obj.Type = EMBED_ATTACHMENT ) Then |
| '************************************************************** |
| strTest = strTest & Chr(10) & Obj.Name |
| '************************************************************** |
| Call ExportAttachment(Obj) |
| 'Call Obj.Remove |
| Call doc.Save( True, True ) 'creates conflict doc if conflict exists |
| End If |
| End Forall |
| Next |
| |
| Set doc = dc.GetNextDocument(doc) |
| Wend |
| |
| '************************************************************** |
| Msgbox strTest, 64, "Folgende Attachments wurden erkannt:" |
| '************************************************************** |
| |
| |
| ' Msgbox "Export Complete.", 16, "Finished" |
| |
| |
| End Sub |
| |
Für den Export werden die Orginalnamen der Anhänge herangezogen. Dies ist, da die Namen den Syntax Scan-[Count].jpg besitzen weniger von Vorteil, denn [Count] wird pro Dokument neu definiert. Die Idee, beim Exportieren direkt den Dateinamen zu ändern, habe ich wieder verwerfen müssen, da dies - wie es meine Recherchen gezeigt haben - nicht möglich ist. Eine gangbare Alternative wäre die Datennamen grundsätzlich in einem ersten Step zu ändern, z.B. DokID-[Count].jpg und dann im zweiten Step die Daten zu exportieren.
Hierzu habe ich folgenden Code gefunden:
http://atnotes.de/index.php/topic,44329.0.htmlAllerdings muss ich gestehen, dass ich nicht wirklich verstehe was in dem Code passiert. Sehe ich das richtig, dass der Code nur
einen Anhang umbennen kann?
Ich wäre euch sehr dankbar, wenn ihr mich bei meinem Problem, n-Anhänge aus einem Notesdokument umzubennen, unterstützen könntet.