Autor Thema: Erstellungs- / Änderungsdatum eines Attachments auslesen ohne es zu lösen  (Gelesen 2078 mal)

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
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?

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
... ich denke es gibt was wie "@AttachmentModified" - schau mal in der Hilfe...

Toni
Grüßle Toni :)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
... ich hab's gefunden => @AttachmentModifiedTimes => über Evaluate auch in LS verwendbar

Toni
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
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
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Damit ist das dann auch schon sauber getestet. Danke, Toni!

Bernhard

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz