Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: kawie am 19.01.09 - 11:06:01

Titel: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 11:06:01
Hallo zusammen,

ich habe so eine Art Kampagnenmanagement zusammengebaut wo aus diversen Richtextfeldern eine Mail erstellt werden soll.

Diese Felder werden in eine Zwischenmaske als Mime inhalte gespeichert und später zu einem Mime Objekt mit dem Namen Body zusammengefügt und versendet.

Das klappt auch alles Prima und ohne Probleme.

Nun aber der Haken. Wenn ich in einem der Richtextfelder ein Anhang hinzufüge, spinnt Notes scheinbar rum und fügt jedem Mime Objekt beim Konvertieren diesen Anhang hinzu.

Jemand eine Idee ?

Code
Function ConvertRichText(Feld1 As String,Feld2 As String,Feld3 As String,Feld4 As String, Feld5  As String, lndoc As NotesDocument)
	Dim lns As New NotesSession
	Dim newdoc As NotesDocument
	
	
	Set lndb = lns.CurrentDatabase
	
	If lndoc.MimeDocId(0)>"" Then
		Set newdoc =lndb.GetDocumentByid(lndoc.MimeDocId(0))		
	End If
	
	If newdoc Is Nothing Then
		Set newdoc=New NotesDocument(lndb)
		newdoc.Form="MimeDoc"
	Else
		While newDoc.HasItem(Feld1)
			newDoc.RemoveItem(Feld1)
		Wend
		
		While newDoc.HasItem(Feld2)
			newDoc.RemoveItem(Feld2)
		Wend
		
		While newDoc.HasItem(Feld3)
			newDoc.RemoveItem(Feld3)
		Wend
		
		While newDoc.HasItem(Feld4)
			newDoc.RemoveItem(Feld4)
		Wend
		
		While newDoc.HasItem(Feld5)
			newDoc.RemoveItem(Feld5)
		Wend
	End If
	
	
	
	strmimewarning = lns.GetEnvironmentString("MIMEConvertWarning", True)
	Call lns.SetEnvironmentVar("MIMEConvertWarning", "1", True)
	lns.ConvertMime = False
	
	Call newdoc.ReplaceItemValue( "DocID", Cstr( newdoc.UniversalID ))
	Call newdoc.ReplaceItemValue( "$NoteHasNativeMIME", "1" )
	
	Set lnitem = lndoc.GetFirstItem( Feld1)
	Call lnitem.CopyItemToDocument( newdoc, Feld1 )
	
	Set lnitem = lndoc.GetFirstItem( Feld2)
	Call lnitem.CopyItemToDocument( newdoc, Feld2 )
	
	Set lnitem = lndoc.GetFirstItem( Feld3)
	Call lnitem.CopyItemToDocument( newdoc, Feld3 )
	
	Set lnitem = lndoc.GetFirstItem( Feld4)
	Call lnitem.CopyItemToDocument( newdoc, Feld4 )
	
	Set lnitem = lndoc.GetFirstItem( Feld5)
	Call lnitem.CopyItemToDocument( newdoc, Feld5 )
	
	Call newdoc.Save( True, True )
	lndoc.MimeDocID = Cstr(newdoc.NoteID)
	Call lndoc.Save(False,True)
	Call refreshDocument( lns, lndb, newdoc )
	
	strnoteid = newdoc.NoteID
	Set newdoc = Nothing 
	
	Call lns.SetEnvironmentVar("MIMEConvertWarning", strmimewarning, True)
	
	lns.ConvertMime = True 
End Function


Nur Feld 2 enthält einen Anhang!


Titel: Re: Mime Mail erstellen
Beitrag von: pram am 19.01.09 - 13:12:34
Sind Feld1 - Feld5 auch wirklich (noch) MIME-Felder? Und ist das was zum Schluss heraus kommt auch ein MIME-Feld

Ich will damit andeuten ob du "convertMime" nicht zu spät auf FALSE setzt...
Notes konvertiert nämlich beim ersten Lesen MIME wieder nach RTF (auch im Debugger)
Es könnte jetzt sein, dass irgendwas beim Löschen der Items schief geht (sie werden nämlich nach RTF konvertiert und anschließend gleich gelöscht)

Evtl musst du dir auch das MIME Feld "zu fuß" zusammenbauen. Ich hab schonmal gepostet wie das im Prinzip geht.

Gruß
Roland


Titel: Re: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 13:40:44
Hallo zusammen,

ja die Felder 1-5 sind in dem Zwischendokument MimeFelder.

Hab auch neue Erkenntnise. Diese Phänomen habe ich bei LN 7.02.
Ein Kollege hat es mit Notes 8.5 ausgeführt und da funktioniert das einwandfrei.

Bug/Feature ?

Gruss

Kai
Titel: Re: Mime Mail erstellen
Beitrag von: pram am 19.01.09 - 13:47:35
Was passiert wenn du alle Items mit CopyAllItems kopierst?

evtl kannst du das Dokument so in ein Zwischendokument kopieren, daraus alle nicht benötigten Felder löschen und dieses Dokument dann mittels copyAllItems über dein newDoc "legen" (Wenn du das originaldoc nicht speicherst, kannst auch die nicht benötigten Felder vom Originaldoc löschen)

Übrigens: Wenn so ein MIME-Feld "Body" heißt verhält es sich irgendwie anders als wenn es einen anderen Namen hat!

Gruß
Roland
Titel: Re: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 13:52:27
Hallo Roland,

Ok ich fasse die Prozedur mal zusammen.

Ich hole mir von diversen Quellen (Profiledoc, usereingaben etc.) die Felder 1-5 und speicher diese in dem Originaldokument.

Danach werden diese Daten in ein "neues" Dokument übergeben in dessen Form ebenfalls die Felder 1-5 Richtext definiert sind, allerdings hier als Save as mime/Html Content.

Das Funktioniert so lange super so lange ich in keinem der Felder ein Attachment einbette.

Wenn ich das tue wird beim Konvertieren das Attachment in jeder der 5 Felder plaziert! Und auch im jedem Feld in den Mime Eigenschaften angezeigt.

Das ganze mit Notes 7.02 entwickelt und getestet.

Mit Notes 8.5 handelt der Client wie gewünscht und Plaziert das Attachment nur in dem Feld wo es eingefügt wurde.

 Das hat (noch) nichts mit dem Body zu tun der Wird erst nach dem Konvertieren erstellt und ist an dieser Stelle noch nicht vorhanden.

Danke und Gruss

Kai

P.S: Die Lösung die ich mir jetzt gerade zusammenbaue wäre ein zusätzliches RT Feld wo die Attachements abgelegt werden sollen und wo die Daten auf der Platte exportiert werden und nachträglich in ein Mime Feld gestreamt werden. Finde ich zwar nicht so elegant aber eine andere Lösung fällt mir gerade nicht ein.


Titel: Re: Mime Mail erstellen
Beitrag von: pram am 19.01.09 - 14:03:08
Zitat
Hallo Roland,

Ok ich fasse die Prozedur mal zusammen.

Ich hole mir von diversen Quellen (Profiledoc, usereingaben etc.) die Felder 1-5 und speicher diese in dem Originaldokument.
gut...
Zitat
Danach werden diese Daten in ein "neues" Dokument übergeben in dessen Form ebenfalls die Felder 1-5 Richtext definiert sind, allerdings hier als Save as mime/Html Content.

Da du dies aber im Backend machst ist es unerheblich was in der Maske eingestellt ist
Zitat
Das Funktioniert so lange super so lange ich in keinem der Felder ein Attachment einbette.

Wenn ich das tue wird beim Konvertieren das Attachment in jeder der 5 Felder plaziert! Und auch im jedem Feld in den Mime Eigenschaften angezeigt.

das hieße das Attachment wird auch wirklich verdoppelt (bzw. verfünffacht) und ist kein Anzeigeproblem im Client

Zitat
Das ganze mit Notes 7.02 entwickelt und getestet.

Mit Notes 8.5 handelt der Client wie gewünscht und Plaziert das Attachment nur in dem Feld wo es eingefügt wurde.
Evtl ist es wirklich ein bug

Zitat
Das hat (noch) nichts mit dem Body zu tun der Wird erst nach dem Konvertieren erstellt und ist an dieser Stelle noch nicht vorhanden.

Ich meinte damit, dass sich das Mime-Feld anders verhält wenn es den Namen "Body" hat. Insbesondere die NotesMimeXXX-Funktionen (welche du hier aber hier nicht verwendest)

Zitat
P.S: Die Lösung die ich mir jetzt gerade zusammenbaue wäre ein zusätzliches RT Feld wo die Attachements abgelegt werden sollen und wo die Daten auf der Platte exportiert werden und nachträglich in ein Mime Feld gestreamt werden. Finde ich zwar nicht so elegant aber eine andere Lösung fällt mir gerade nicht ein.

Ich würde evtl  nochmal den Weg über copyAllItems probieren  :-:

Gruß
Roland
Titel: Re: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 14:12:48
Zitat
Da du dies aber im Backend machst ist es unerheblich was in der Maske eingestellt ist

Das stimmt so nicht da ich das Dokument im ui ein refresh machen muss. Das läuft in der Funktion

Call refreshDocument( lns, lndb, newdoc )


Gruss

Kai


P.S: Ich habe deinen Tip mit
Zitat
Ich würde evtl  nochmal den Weg über copyAllItems probieren 
getestet, wie ich erwartet habe, führt das zu dem gleichen Effekt wie ein einzelnes Kopieren der Felder.
Titel: Re: Mime Mail erstellen
Beitrag von: pram am 19.01.09 - 14:33:26
Ich bezog mich hier auf "newDoc", dieses erzeugst du entweder neu oder löscht Feld 1..5 und deshalb denke ich ist es hier egal, was in der Maske von "newDoc" eingestellt ist... was aber auch nichts an dem Problem ändert

Falls es unter 7 funktionieren soll, wird dir wohl nicht anderes über bleiben nach einem Würgaroud zu suchen oder die MIME's selber erstellen (was auch nicht gerade trivial ist)

Dass CopyAllItems auch nicht funktioniert, wundert mich jetzt, da dies normalerweise eine exakt(er)e Kopie macht als man es mit Kopieren der einzelnen Items hinbekommt.
Titel: Re: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 14:41:48
Eine andere Möglichkeit wäre ein zweites Document zu machen in dem nur das Feld gespeichert wird welches auch das Attachement enthält. Aber auch das ist nur ein Würgarround wie du es so schön nennst ;) Es scheint das in Notes 7 das Konvertieren von mehreren RT Feldern in Verbindung mit Attachements zu Problemen führt.

Ein weiteres Phänomen, ist das ein erneutes Ausführen jeweils zu einer Verdopplung der Attachements führt obwohl ich definitiv die Felder vor dem neuen Copy lösche.

Insgesamt etwas unbefriedigend der heutige Tag :(
Titel: Re: Mime Mail erstellen
Beitrag von: pram am 19.01.09 - 14:56:52
verdopplung der Anhänge.... dazu fällt mir noch was ein...
versuch mal das Feld folgendermaßen zu löschen
Code
dim mime as NotesMimeEntity
set mime = doc.getMimeEntity( Feld1 )
if mime is nothing then
  while doc.hasItem(feld1) ' normales Feld oder nicht vorhanden
    doc.removeItem( Feld1 ) 
  wend
else 
  call mime.Remove()
  call doc.CloseMimeEntities(True, Feld1 ) ' WICHTIG: Das Mime-Entity schließen (Sonst:ggf. Notescrash)
end if

ich weiß nicht  ob das dein Problem löst, ich hatte jedenfalls auch das Problem das ich die sch*** MIME-Items nicht mehr sauber wegbekam.

Gruß
Roland

Titel: Re: Mime Mail erstellen
Beitrag von: kawie am 19.01.09 - 15:31:51
So ich habs nun mit einem seperaten Dokument gemacht (für das eine Feld mit Attachment)

So funktioniert es auch! Ich tippe mal ganz stark auf Bug. Gut das hat mich heute 3-4 Stunden gekostet ^^

Vielen Dank Roland für deine Tips. Wenn das mal jemand ausprobiert sagt mir bitte ob ihr zum selben ergebniss kommt wie ich ;)

LG

Kai