Ich möchte gerne alle Anhänge in einer Datenbank zählen, die...
1. ein Worddokument sind
2. älter als ein bestimmtes Datum sind.
Punkt 1 konnte ich lösen aber der 2. macht mir Probleme. Wenn ich in die Eigenschaften eines Dokuments in ein $FILE gucke, dann gibt es da ganz unten genau die beiden Felder, die mich interessieren. Erstellungsdatum und zuletzt geändert am. Aber wie kann ich diese auslesen? Hier mal mein Code soweit:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim eoatt As NotesEmbeddedObject
Dim count As Double
Set db = session.CurrentDatabase
Set dc = db.AllDocuments
count = 0
Set doc = dc.GetFirstDocument()
While Not(doc Is Nothing)
If doc.HasEmbedded Then
Set rti = doc.GetFirstItem("rt_inhalt")
Set rtnav = rti.CreateNavigator
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then
Do
Set eoatt = rtnav.GetElement()
If Right(eoatt.Source,3) = "doc" Then
count = count + 1
End If
Loop While rtnav.FindNextElement()
End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
Messagebox count
Leider hat das NotesEmbeddedObject nur folgende Properties wo mir etwas wie CreationDate/LastModified fehlt:
Class
FileSize
FitBelowFields
FitToWindow
Name
Object
Parent
RunReadOnly
Source
Type
Verbs
Kann man vielleicht irgendwie alle $FILE Objekte in der Datenbank durchgehen und hätte dann auch die Datumsfelder im Zugriff?
Vielen Dank für die Antworten. Ihr habt mir sehr geholfen. Hier noch mein Code wie ichs jetzt gelöst habe:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim dblCount As Double
Dim dblPos As Double
Dim varMod As Variant
Dim varName As Variant
Dim dblAlter As Double
Set db = session.CurrentDatabase
Set dc = db.AllDocuments
dblCount = 0
dblAlter = 14
Set doc = dc.GetFirstDocument()
While Not(doc Is Nothing)
If doc.HasEmbedded Then
varName = Evaluate("@AttachmentNames", doc)
varMod = Evaluate("@AttachmentModifiedTimes",doc)
dblPos = 0
Forall items In varName
If (Right(items, 3) = "doc" Or Right(items, 3) = "dot") And Cdat(varMod(dblPos)) >= Date - dblAlter Then dblCount = dblCount + 1
dblPos = dblPos + 1
End Forall
End If
Set doc = dc.GetNextDocument(doc)
Wend
Messagebox "Es wurden " & dblCount & " Dokumente gefunden, die die Endung doc oder dot haben und nicht älter als " & dblAlter & " Tage (" & Date - dblAlter & ") sind."
Ich habe auch nochmal überprüft ob die Reihenfolge in der Names - Liste mit der Reihenfolge der ModifiedTimes - Liste übereinstimmt kann Toni nur zustimmen.