Lotus Notes / Domino Sonstiges > Tipps und Tricks
In welchem Folder liegt das jew. Dokument - FolderReferences
TMC:
Komplettlösung Teil 2 / 2
5. Praktisches Arbeiten mit den Folder References
5.1 Ordner des aktuellen Dokumentes anzeigen
Hier ein Beispiel-Script für eine Aktionsschaltfläche in einer Ansicht oder Ordner. Damit wird in einer Messagebox angezeigt, in welchen Ordnern sich das ausgewählte Dokument befindet:
--- Code: ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim szReference As String
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument
Forall r In doc.FolderReferences
If r = "" Then Goto Empty
szReference = r & Chr(10) & szReference
End Forall
While Not (doc Is Nothing)
Msgbox "Folder References: " & Chr(10) & Chr(10) &szReference, 64, db.title
Set doc = collection.GetNextDocument(doc) 'Nächstes Dokument
Wend
Exit Sub
Empty:
Msgbox "No References in this document....", 64, db.title
End Sub
--- Ende Code ---
5.2 Ansicht "Dokument" | "Folder"
In einer Ansicht die FolderReferences darzustellen ist leider nicht ohne Vorarbeit möglich, da @DBLookups etc. in Ansichten nicht erlaubt sind.
Daher müssen im Vorfeld in den jew. Dokumenten in ein separates Feld (im Beispiel unten wurde das Feld "FolderName" gewählt) die Foldernamen geschrieben werden.
5.2.1 Beispiel für einen Agenten oder Aktionsschaltfläche
--- Code: ---Dim session As New notessession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set dc = db.allDocuments
Set doc = dc.GetFirstDocument
Do While Not doc Is Nothing
If Not doc.FolderReferences(0) = "" Then
doc.FolderName = doc.FolderReferences
Call doc.save (False,False)
End If
Set doc = dc.GetNextDocument(doc)
Loop
--- Ende Code ---
5.2.2 Postsave Script für neue Dokumente
--- Code: ---Dim session As New notessession
Dim db As NotesDatabase
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim newuidoc As NotesUIDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
If Not doc.FolderReferences(0) = "" Then
doc.FolderName = doc.FolderReferences
Call doc.save (False,False)
End if
--- Ende Code ---
5.2.3 View erstellen
Eine neue View erstellen mit 2 Spalten:
- 1. Spalte: z.B. Subject, aufsteigend sortiert
- 2. Spalte: FOLDERNAME (multi-value-separator: New line), View-Eigenschaften: Lines per row: "9".
5.2.4 Refresh-Button für die View
--- Code: ---Sub Click(Source As Button)
Dim uiws As New NotesUIWorkspace
Dim session As New notessession
Set db = session.CurrentDatabase
Set dc = db.allDocuments
Set doc = dc.GetFirstDocument
Do While Not doc Is Nothing
If Not doc.FolderReferences(0) = "" Then
doc.FolderName = doc.FolderReferences
Call doc.save (False,False)
End If
Set doc = dc.GetNextDocument(doc)
Loop
Call uiws.ViewRefresh
End Sub
--- Ende Code ---
ACHTUNG: Dieser Refresh-Button ist keine Traum-Lösung, da alle Dokumente refreshed werden, was durchaus einige Minuten dauern kann!
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.
--- Code: ---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
--- Ende Code ---
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:
--- Code: ---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
--- Ende Code ---
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).
adminnaddel:
Hallo,
vielen Dank für diese Übersichtlichkeit!
ABER:
Habt Ihr berücksichtigt, daß die Dokumenteigenschaften verändert werden?! Nur ein kleiner Hinweis, vielleicht habe ich es ja auch überlesen, aber revisionsseitig nicht unbedingt sauber! ::)
Anderseits gebe es natürlich hier die Möglichleit das ganze über den Server laufen zu lassen. so würde dieser dann auftauchen!
Gruß
Manfred Dillmann:
Hallo Matthias,
bin jetzt leider erst dazu gekommen, Deinen Artikel hier zu lesen...
Danke für Deinen tollen Beitrag. Sehr ausführlich und so viele Source-Code Beispiele.
Da hast Du ganze Arbeit geleistet! Klasse! :)
Gruss
Manfred
TMC:
Hi Adminnaddel und Manfred,
Vielen Dank für Euer Feedback !
@Manfred
--- Zitat ---Danke für Deinen tollen Beitrag. Sehr ausführlich und so viele Source-Code Beispiele.
Da hast Du ganze Arbeit geleistet! Klasse!
--- Ende Zitat ---
So ein Feedback von Dir freut mich natürlich besonders, und motiviert mich, auch zukünftig Beiträge in dieser Art hier zu schreiben :D
@adminnaddel:
--- Zitat ---Habt Ihr berücksichtigt, daß die Dokumenteigenschaften verändert werden?! Nur ein kleiner Hinweis, vielleicht habe ich es ja auch überlesen, aber revisionsseitig nicht unbedingt sauber!
Anderseits gebe es natürlich hier die Möglichleit das ganze über den Server laufen zu lassen. so würde dieser dann auftauchen!
--- Ende Zitat ---
Kannst Du das bitte noch weiter ausführen? Denn dann würde ich das in der Abhandlung gerne ergänzen. Bezüglich "revisionsseitig" bin ich nämlich nicht die Kenntnisse, um hier noch entsprechendes zu berücksichtigen.
Danke,
Matthias
P.S. Vielleicht sollte ich das ganze noch in Englisch übersetzen, denn bei meiner internationalen www-Recherche bin ich nur auf Fragen aber nicht wirklich auf Lösungen dazu gestossen.
eknori (retired):
habe das Ganze mal in ein pdf gepackt: http://www.eknori.de/cms/_data/folderreferences.pdf
Link gefixt
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln