Autor Thema: gleiche $File-Items bei unterschiedlichen Attachments  (Gelesen 2681 mal)

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Hallo,

ich habe hier ein Problem, bei welchem ich am Verzweifeln bin.

Um Attachments einer Mail zu lösen, habe ich einen Agenten geschrieben, welcher ueber die $File-Items des Dokumentes iteriert. Die entsprechende Routine sieht etwa wie folgt aus:
Code
Sub Initialize
	Dim session As New NotesSession
	Dim cdb As NotesDatabase  
	Dim docs As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim object As Variant
	
	Dim filename As String
	Dim exp_path As String
	
	exp_path = "c:\temp\"
	Set cdb = session.CurrentDatabase
	Set docs = cdb.UnprocessedDocuments
	Set doc = docs.GetFirstDocument
	
	If (doc.HasEmbedded) Then
		Forall item In doc.Items
			If ((Ucase (item.Name) = "$FILE") _ 
			And item.Type = ATTACHMENT) Then
				filename = item.Values ( 0 )
				Set object = doc.GetAttachment ( filename )
				filename = GetAttachmentFileName (exp_path, filename)
				
				Call object.ExtractFile (filename)
			End If			
		End Forall	
	End If
End Sub	

Function GetAttachmentFileName (attpath As String, attname As String) As String
	Dim i As Integer
	Dim filename As String
	
	i = 1
	filename = attpath & "\" & attname
	While Dir (filename) <> ""
		filename = attpath & "\" & Right ("00" & Cstr (i), 3) & "_" + attname
		i = i + 1
	Wend
	GetAttachmentFileName = filename
End Function
Bisher hat dies auch prima funktioniert. Nun liegt mit jedoch eine Mail-DB vor, bei welcher die Dokumente folgendes Phänomen aufweisen.

Die Dokumente der Mail-DB enthalten mehrere Attachments mit unterschiedlichen Namen. Im Debugger sehe ich jedoch das die $File-Items immer das gleiche Attachment enthalten. Betrachte ich die $File-Items ueber die Dokument-Eigenschaften, werden die Attachmentnamen angezeigt, die ich auch erwarte. Die Anzahl der $File-Items stimmt mit der Anzahl der Attachments ueberein. Fuer obiges Script wird daher das erste Attachment mehrmals exportiert.
Kopiere ich das Dokument in eine andere Mail-DB tritt das Problem nicht mehr auf.

Wenn ich das Script leicht modifiziere erhalte ich jedoch alle gewuenschten Attachments.

Code
Sub Initialize
	Dim session As New NotesSession
	Dim cdb As NotesDatabase  
	Dim docs As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim object As Variant
	
	Dim filename As String
	Dim exp_path As String
	
	exp_path = "c:\temp\"
	Set cdb = session.CurrentDatabase
	Set docs = cdb.UnprocessedDocuments
	Set doc = docs.GetFirstDocument
	
	If (doc.HasEmbedded) Then
		Dim found As Boolean
		Do
			found = False
			Forall item In doc.Items
				If ((Ucase (item.Name) = "$FILE") _ 
				And item.Type = ATTACHMENT) Then					
					filename = item.Values ( 0 )
					Set object = doc.GetAttachment ( filename )
					filename = GetAttachmentFileName (exp_path, filename)
					
					Call object.ExtractFile (filename)
					item.Remove
					found = True
					Exit Forall
				End If		
			End Forall	
		Loop While found = True
	End If
End Sub

In jedem Durchlauf der Do-Schleife verweisen immer alle $File-Items auf das erste Attachment.
Meine Frage ist nun warum die $File-Items immer den gleichen Wert enthalten und ob ich dies eventuell abstellen kann. Wie gesagt, das Phaenomen ist mir neu. Zu erwaehnen waere noch, das der Notes-Client die Version 6.5.3 hat und die Mail-DB auf einer Schablone basiert, welche mehrsprachig ist (deutsch, englisch). Der Agent wird am Client ausgefuehrt.

Hat jemand eine Idee?

Bye Marco

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: gleiche $File-Items bei unterschiedlichen Attachments
« Antwort #1 am: 09.03.06 - 00:23:51 »
Woher kommt in letzter Zeit nur diese Affinität zu $File-Items? Wer hat das verbreitet? Das ist Schwachfug. Du bist wohl auch ein Opfer geworden ...

Orientiere Dich nicht an $File-Items, Marco, denn diese sind Dokument-interne Container. Ein Attachment (oder auch ein Bild oder OLE-Object) können durchaus zig $File-Items erzeugen.

Was wichjig ist:
- NotesDocument.HasEmbedded
- Wenn Mail, dann brauchst Du Dich nur noch um das RTI "Body" zu kümmern (sowieso: Konzentriere Dich auf die RichTextItem und die EmbeddedObjects classes).
- Wenn "irgendein Dokument": Schleife durch die Items und konzentriere Dich dabei auf die, die als Type RT haben.

Aber: Finger weg von $File. Dieses Item ist Notes-intern und mit puren Bordmitteln nicht zu beherrschen (aus gutem Grund).

Bernhard
« Letzte Änderung: 09.03.06 - 00:41:11 von koehlerbv »

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Re: gleiche $File-Items bei unterschiedlichen Attachments
« Antwort #2 am: 09.03.06 - 08:53:35 »
Hallo Bernhard,

zunaechst erstmal vielen Dank fuer Deinen Hinweis.
Liegt der Body der Mail als RT-Item vor, nutze ich auch die entsprechenden Methoden der NotesEmbeddedObject-Klasse. Allerdings kann der Body auch als MIME_PART vorliegen und in diesem Fall bin ich ueber die $File-Items gegangen. Das Property HasEmbedded ist fuer dieses Dokument auch True allerdings gibt es kein RT-Item.

Alternativ koennte man ueber die NotesMIMEEntity-Klasse gehen, was wohl aber auch nicht so einfach ist.

Bye Marco

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Re: gleiche $File-Items bei unterschiedlichen Attachments
« Antwort #3 am: 09.03.06 - 13:16:20 »
Hallo,

so ich habe mich jetzt hingesetzt und den eine Routine geschrieben, welche die Attachments aus dem Mime-Part exportiert, wenn der Body vom entsprechendem Typ ist. Dies funktioniert nach den ersten Test's ganz gut.

Allerdings habe ich immer noch Mails, bei welchen bisher alles versagt (bis auf den Weg ueber die $File-Items).
HasEmbbeded ist True und der Body des Mail-Dokumentes liegt als RT-Item vor, aber das Property EmbbededObjects ist leer (ebenso wie doc.EmbbededObjects). Auch andere RT-Items gestatten keinen Zugriff.

Gibt es noch andere Moeglichkeiten an die Attachments zu kommen?

Bye Marco

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Re: gleiche $File-Items bei unterschiedlichen Attachments
« Antwort #4 am: 09.03.06 - 14:11:35 »
Hallo,

ich muss jetzt nochmal genauer nachfragen. Ich habe nochmal in der Designer-Hilfe zur Methode NotesDocument.GetAttachment nachgelesen. Diese kann verwendet werden, um NotesEmbbededObject's zu erhalten, welche nicht über ein Richttextfeld erreichbar sind.


Given the name of a file attachment, returns a NotesEmbeddedObject representing the attachment. You can use this method to find file attachments which are not contained in a rich text item (such as an attachment in a Release 2 database), as well as file attachments that are contained in a rich text item.


Eigentlich muss ich nur noch an die Attachmentnamen kommen, um diese zu extrahieren. Was spricht dann gegen die $File-Items?

Bye Marco

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz