In welchem Ordner befindet sich ein Dokument? - Teil 3/3

Inhaltsübersicht

--- Teil 1/3 ---
1. Einleitung
2. Warum das ganze - Beispiele zum Einsatz
3. Erstkonfiguration
   3.1 Ansichten $FolderInfo und $FolderRefInfo
   3.2 FolderReferences aktivieren
4. Nachträgliches Setzen der Folder References

--- Teil 2/3 ---
5. Praktisches Arbeiten mit den Folder References
   5.1 Ordner des aktuellen Dokumentes anzeigen
   5.2 Ansicht "Dokument" | "Folder"
      5.2.1 Beispiel für einen Agenten oder eine Aktionsschaltfläche
      5.2.2 Postsave Script für neue Dokumente
      5.2.3 View erstellen
      5.2.4 Refresh-Button für die View

--- Teil 3/3 ---
   5.3 Wiederherstellung der Dokumente
   5.4 Weitere hilfreiche Scripts
      5.4.1 Alle Ordner einer Datenbank löschen
6. Umsetzung der Beispiel-Scripts
7. Festgestellte Probleme


5.3 Wiederherstellung der Dokumente
Folgendes Script-Beispiel stellt sämtliche Dokumente wieder in die entsprechenden Ordner. Ist der Ordner nicht vorhanden, so wird er erstellt. Bedingung vor der Ausführung des Scripts ist aber, dass im Array-Feld "FolderName" die ursprünglichen Folder stehen.

Sub Click(Source As Button)
  Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim collection As NotesDocumentCollection
  Dim doc As NotesDocument
  Dim item As NotesItem

  Set db = session.CurrentDatabase
  Set collection = db.AllDocuments

  If Not Messagebox ("Do you really want to restore all documents?",1 + 32,db.title) = 1 Then Exit Sub

  Set doc = collection.GetFirstDocument()
  While Not (doc Is Nothing)
    If Not doc.FolderName(0) = "" Then
      Set item = doc.GetFirstItem( "FolderName" )
      Forall v In item.Values
        Call doc.PutInFolder (v, True)
      End Forall
    End If
    Set doc = collection.GetNextDocument(doc)
  Wend
  Messagebox "Documents have been restored", 64, db.title
End Sub

5.4 Weitere hilfreiche Scripts

5.4.1 Alle Ordner einer Datenbank löschen
Folgendes Beispiel-Script, welches man z.B. in eine Aktionsschaltfläche aufnehmen kann, löscht alle Ordner in einer Datenbank:

Sub Click(Source As Button)
  Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim view As NotesView
  Set db = session.CurrentDatabase

  If Not Messagebox ("Do you really want to delete all folders in this database?", 1+32, db.title) = 1 Then Exit Sub

  Forall v In db.Views
    If v.isFolder Then
      Set view = v
      Call view.Remove
    End If
  End Forall

  Messagebox "Folders have been deleted now.", 64, db.title

End Sub

ACHTUNG: Hier werden wirklich ALLE Ordner gelöscht, also z.B. auch die $Inbox im Mailfile!

6. Umsetzung der Beispiel-Scripts
Jetzt kommen wir wohl zum interessantensten Teil dieser Abhandlung.

Ich nehme ein Beispiel, das wohl öfter vorkommen wird:
Aufgrund eines Releasewechsel werden die Mailschablonen upgedatet. Der Administator möchte jedoch alle Vorkehrungen treffen - sollte beim Schablonenupdate etwas schief laufen, wären ja u.U. sämtliche Ordner 'zertsört' bzw. die Dokumente nicht mehr in den Ordnern vorhanden.

Zur Vorbereitung kann also der Admin folgende Scripts ausführen:

1. Nachträgliches Setzen der Folder References (siehe Pkt. 4)

2. Folder-Namen in das Feld "FolderName" schreiben (siehe 5.2.1)

3. Folder References deaktivieren und die Items "$FolderRef", "$FolderRefFlags" und "$FolderRefID" löschen

Jetzt kann das Schablonenupdate ohne Gefahr erfolgen. Sämtliche Ordner-Namen stehen im Feld "FolderName" der einzelnen Dokumente.

Letzter Schritt:
4. Wiederherstellung der Dokumente (siehe 5.3)

7. Festgestellte Probleme
Wenn FolderReferences aktiviert ist, Dokumente in Ordnern abgelegt werden, und diese Ordner gelöscht werden, bleiben die FolderReferences (sind ID's) in den Dokumenten erhalten - will man allerdings die Folder abfragen über doc.FolderReferences, dann kommt die Fehlermeldung "Document has been deleted". Ich erkläre mir das so, dass der Ordner nicht mehr vorhanden ist.

Daher sind m.E. gerade im Mailfile, wo viel mit Ordnern gearbeitet wird, hier entsprechende Vorkehrungen zu treffen. Ich persönlich empfehle es nicht, die Folder References per Default zu aktivieren. Vielmehr würde ich diese als Backup- und Wiederherstellungsfunktion nutzen (siehe Kap. 6).

Vielen Dank für diesen Tipp an:
Matthias (TMC)
eMail: atnotes@gmx.de

Notes/Domino Version: 5.x, 6.x
blog comments powered by Disqus