Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: dia am 11.04.08 - 14:21:16

Titel: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: dia am 11.04.08 - 14:21:16
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:
Code
	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?
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: ata am 11.04.08 - 15:27:22
... ich denke es gibt was wie "@AttachmentModified" - schau mal in der Hilfe...

Toni
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: ata am 11.04.08 - 15:32:06
... ich hab's gefunden => @AttachmentModifiedTimes => über Evaluate auch in LS verwendbar

Toni
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: koehlerbv am 11.04.08 - 16:57:09
Zu untersuchen gilt dann noch, ob die Listen, die @AttachmentNames und @AttachmentModifiedTimes in einemsicheren Zusammenhang stehen. Dem sollte aber eigentlich so sein, da zu erwarten ist, dass zur Ermittlung der Attachments im Dokument für beide Functions in der API der gleiche Code verwendet wird. Überprüfen sollte man das aber.

Bernhard
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: ata am 11.04.08 - 17:48:22
Zitat
Zu untersuchen gilt dann noch, ob die Listen, die @AttachmentNames und @AttachmentModifiedTimes in einemsicheren Zusammenhang stehen.

... das ist so, da ich es genau so in einer DB verwende...

Toni
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: koehlerbv am 11.04.08 - 17:56:50
Damit ist das dann auch schon sauber getestet. Danke, Toni!

Bernhard
Titel: Re: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen
Beitrag von: dia am 14.04.08 - 10:21:33
Vielen Dank für die Antworten. Ihr habt mir sehr geholfen. Hier noch mein Code wie ichs jetzt gelöst habe:

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