In dieser Woche findet in Essen die DMS2005 statt. die DMS2005 ist Europas gröÃ?te, hochspezialisierte Messe zum Thema Unternehmensweite Elektronische Informations- und Dokumentenverarbeitung, begleitet durch eine ebenfalls dreitägige Fachkonferenz.
Ich habe mich dort für meinen Arbeitgeber zum Thema GDPdU konforme Archivierung von Lotus Notes Dokumenten bei verschiedenen Anbietern umgesehen. Resumee; alle Anbieter konnten mit dem Thema umgehen. Der Eine besser, der Andere nicht so gut.
Alle besichtigten Anbieter konnten einzelne oder mehrere Dokumente aus der Maildatei in ein Archiv ( Non-Notes ) archivieren. Dabei konnten die Dokumente vollständig oder auch nur die darin enthaltenen Attachments archiviert werden. ( Dublettenprüfung ! )
So weit, so gut. Durch die Bank weg konnten ALLE eine Sache nicht. Das Archivieren kompletter Ordnerstrukturen mit allen in dieser Struktur enthaltenen Dokumenten. Niemand hatte auch nur ansatzweise eine Idee, wie das zu realisieren ist.
Soll ich also wirklich alle Dokumente in einer gewachsenen Ordnerstruktur Ordner für Ordner ins Archiv schieben ? Kann ja wohl nicht sein. Grund genug, sich einmal Gedanken darüber zu machen, ob das Unvermögen der Anbieter mit technischer Unmöglichkeit zu erklären ist.
Betrachten wir einmal die abgebildete Ordnerstruktur. Der übergeordnete Ordner ist â??SAPâ?. Es müssen also alle Ordner ermittelt werden, die sich unterhalb dieses â??WurzelOrdnersâ? befinden.
Lotus Notes enthält zwar zwei Klassen: â??NotesOutlineâ? und â??NotesOutlineEntryâ?. Man könnte glauben, man käme mit den Methoden dieser Klassen ans Ziel. Weit gefehlt, die helfen uns bei dieser Aufgabe nicht weiter.
Der Tip von Frank im Deutschen Notes Forum brachte Licht ins Dunkel. @ViewTitle könnte weiter helfen. @ViewTitle lässt sich aber nicht in LotusScript verwenden, also muss die Idee entsprechend umgesetzt werden.
Der folgende Code zeigt schon das Endergebnis der weiteren Ã?berlegungen:
Sub Initialize
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim i As Integer
i = 1
Forall v In s.CurrentDatabase.Views
If Instr ( v.name , ws.CurrentView.ViewName ) > 0 Then
Redim Preserve FNames ( i ) As String
FNames ( i -1 ) = v.name
i = i +1
End If
End Forall
For i = 0 To ( Ubound ( FNames ) - 1 )
Msgbox FNames ( i )
Next
End Sub
Das Konstrukt â??ws.CurrentView.ViewNameâ? ist nichts anderes als @ViewTitle. Und das ist auch schon das ganze â??Geheimnisâ?. Der Rückgabewert repräsentiert den ausgewählten Ordner. Um jetzt auch noch alle Unterordner zu ermitteln, lesen wir zunächst alle Ansichten und Ordner der Datenbank aus ( â??s.CurrentDatabase.Viewsâ? ) und vergleichen jeden Eintrag mit dem retVal aus â??ws.CurrentView.ViewName â??. Bei einem Treffer schreiben wir das Ergebnis in die Variable FNames.
FNames enthält am Ende der ForAll-Schleife alle Unterordner des Wurzelordners und den Wurzelordner selbst.
Jetzt ist es nur noch ein kleiner Schritt, die Einträge in FNames dazu zu verwenden, entsprechende NotesDocumentCollections zu erstellen und die Docs in den Collections ins Archiv zu schaufeln.
Liebe Aussteller; so schwer ist das doch gar nicht, oder ?