AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
29.11.21 - 12:58:57
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  Tipps und Tricks (Moderatoren: eknori, fritandr, ata)
| | |-+  In welchem Folder liegt das jew. Dokument - FolderReferences
« vorheriges nächstes »
Seiten: 1 2 [3] Nach unten Drucken
Autor Thema: In welchem Folder liegt das jew. Dokument - FolderReferences  (Gelesen 32924 mal)
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #40 am: 19.01.04 - 22:01:00 »

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

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

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


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

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



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


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).

Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

adminnaddel
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 819


What a wonderful girl, so beautiful und se....;-)


« Antworten #41 am: 23.01.04 - 14:52:43 »

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!  Roll Eyes
Anderseits gebe es natürlich hier die Möglichleit das ganze über den Server laufen zu lassen. so würde dieser dann auftauchen!

Gruß
Gespeichert
Manfred Dillmann
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 837



WWW
« Antworten #42 am: 23.01.04 - 17:24:49 »

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! Smiley

Gruss
Manfred
Gespeichert


Support, Beratung, Schulung, Anwendungsentwicklung oder Tipps & Tricks zu Lotus Notes/Domino?
www.madicon.de

Personalisierte Notes/Domino Serienmails?
madicon easyMail

TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #43 am: 23.01.04 - 19:23:35 »

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!

So ein Feedback von Dir freut mich natürlich besonders, und motiviert mich, auch zukünftig Beiträge in dieser Art hier zu schreiben  Cheesy


@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!

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.
« Letzte Änderung: 23.01.04 - 19:27:34 von TMC » Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11576


« Antworten #44 am: 23.01.04 - 19:29:39 »

habe das Ganze mal in ein pdf gepackt: http://www.eknori.de/cms/_data/folderreferences.pdf

Link gefixt
« Letzte Änderung: 25.01.04 - 19:54:54 von eknori » Gespeichert
Heiggo
@Notes Preisträger
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 368


Ich habe nix gemacht!


« Antworten #45 am: 25.01.04 - 19:26:21 »

Kleine Korrektur mit ohne /cms/ dafür aber mit ohne Fehler 404: Not Found :-)

Folder-References als PDF


habe das Ganze mal in ein pdf gepackt: http://www.eknori.de/cms/_data/folderreferences.pdf
Gespeichert

(¯`·._ (¯`·._-=- ...und für Bernhard... nur OFw d.R. :-) -=-_.·´¯)_.·´¯)
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #46 am: 25.01.04 - 19:33:15 »

Die Doku wird eh in den demnächst erscheinenden Best Practices aufgenommen, da kann dann direkt gedruckt werden (ohne den restlichen Postings), daher ist die PDF dann eigentlich nicht mehr nötig (zumal diese immer aktualisiert werden müsste bei Änderungen).

Matthias
Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11576


« Antworten #47 am: 25.01.04 - 19:54:08 »

>>Kleine Korrektur mit ohne /cms/ dafür aber mit ohne Fehler 404: Not Found :-)

yoo, hast recht. Habe meine HP vor ca. 40min umgebaut; da ist wohl de eine oder andere Link auf der Strecke geblieben...

Gespeichert
Heiggo
@Notes Preisträger
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 368


Ich habe nix gemacht!


« Antworten #48 am: 25.01.04 - 20:01:33 »

Hihi, da wird vermutlich auch noch in einiger Zeit die eine oder andere Leiche auftauchen. Zumindest bei mir war das bisher nach Umstrickungen immer so :-)
Aaaaaaber... es gibt Schlimmeres im Leben.

yoo, hast recht. Habe meine HP vor ca. 40min umgebaut; da ist wohl de eine oder andere Link auf der Strecke geblieben...
Gespeichert

(¯`·._ (¯`·._-=- ...und für Bernhard... nur OFw d.R. :-) -=-_.·´¯)_.·´¯)
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11576


« Antworten #49 am: 25.01.04 - 20:07:14 »

schaun mer mal  Cheesy
Gespeichert
TMC
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3660


meden agan


« Antworten #50 am: 26.01.04 - 20:22:13 »

 
Siehe ab sofort unter Best Practices: Best Practices - Folder References


Die obige Abhandlung wird ab sofort hier nicht mehr aktualisiert, sondern nur noch unter Best Practices!

Zum Ausdrucken kann dort auf den Button geklickt werden.
« Letzte Änderung: 26.01.04 - 20:22:57 von TMC » Gespeichert

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.

Seiten: 1 2 [3] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: