Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Axel am 30.06.04 - 15:28:33
-
Hi,
heute hab' auch mal ein Problem.
Ich habe folgende Anforderung: in einer Vorgangsdatenbank sollen auch eingegangene Mails eingefügt werden und einer Adresse zugeordnet werden.
So weit so gut.
Das Auslesen der Inbox, das Übernehmen des Absenders und des Themas ist kein Problem, das Zuordnen zu einer Adresse auch nicht.
Problem ist die Übernahme des Mailtextes. Ich habe Mails, die enthalten mehrere Body-Felder und außerdem scheinen sie mimecodiert zu sein. Siehe Anhang.
Wie bekomme ich nun den Mailtext in mein Dokument? Die normale Methode RTF-Inhalte zu kopieren, mit AppendRTItem, funktioniert nicht.
Was funktioniert ist CopyAllItems, aber ich will nicht alle Felder des Mails in meinem Vorgangsdokument haben.
Kann mir jemand weiterhelfen? ???
Axel
-
... ich habe das gleiche Problem in meiner persönlcihen Support-Datenbank. Bei der Problemlösung habe ich so viel Zeit verschoosen, daß ich der einfach-heit-halber dazu übergegangen bin, das Dokument als Kopie zu übernehmen - die ganzen Fallunterscheidungen konnte ich nicht abfangen, da ich es mit sehr vielen Mail-Clients zu tun hatte, und bald jede Mail anders herinkam. Ich nehme also lieber die überflüssigen Felder in Kauf...
ata
-
Gerade im Zusammenhang mit
- Kodierungen
- grossen Attachments
- OLE-Objekten
- u.ä.
folge ich hier zu 100% Antons Vorgehen. Die "Nebengeräusche" sind lässlich, bestimmte unerwünschte Items kann man auch nach dem CopyToDatabase wieder entfernen. Wenn man eine sichere Item-Liste (entspr. der vorliegenden Situation) hat, kann man sogar alle Items, die nicht der eigenen white list entsprechen, entfernen. Aber auch hier muss schon wieder Aufwand und Nutzen (und Risiken) abgewogen werden.
Bernhard
-
Hi,
vielen Dank für die Hinweise.
Einen Punkt hatte ich bei meiner Fragestelung vergessen. Es soll eine andere Maske sein, also nicht die Memo-Maske aus der Mail-DB. Die Maske enthält außer den Mailinfos (Absender, Mailinhalt usw.) auch noch infos zur Adresse, Bearbeiter usw.
Hab' gestern Abend auch noch eine Lösung gefunden. Die zielt in eure Richtung.
Übernahme mit CopyAllItems
Alle Felder außer Body und $File löschen (ForAll item in newdoc.items...)
Zuweisen der Maske (newdoc.Form = ...)
Füllen der entsprechenden Felder
Scheint soweit ich das getestet habe, mit allen möglichen Mailinhalten zu funktionieren.
Axel
-
... ich hätte das Dokuemnt kopiert und nur die Maske umgeschossen...
ata
-
Hi,
auch eine Alternative. Ich denke mal, dass sich die beiden Lösungsansätze von der Perfomance nicht viel unterscheiden.
Da zeigt sich wieder mal, dass viele Wege nach Rom führen.
Axel
-
Wie wäre es damit, die Mail einfach per doc.RenderToRTItem in das Zieldokument einzufügen?
-
Hi,
in dem Fall nicht, denn dann hab ich das ganze Mail in einem Feld. Ich brauche aber die Infos in getrennten Feldern.
Außerdem, was passiert mit Dateianhängen?
Axel
-
Die Infos kann man vorher auslesen und hat sie halt doppelt.
Dateianhänge werden mitgenommen.
-
Hi,
ich werde es mal probieren. Wahrscheinlich werde ich das aber nicht verwenden können, da soeben, sozusagen als neue "Gemeinheit" :o, die Anforderung kam, dass gewählt werden soll, ob die Anhänge übernommen werden sollen oder nicht.
Wegen der DB-Größe.
Ich glaube am flexibelsten bin ich mit der anderen Variante (CopyToDatabase bzw. CopyAllItems ...)
Axel
-
Hi Axel,
vielleicht siehe ich das jetzt zu simpel, aber geht das nicht einfacher?
Gegeben ist ein Maildokument. Ausgewählte Items sollen in ein Zieldokument übertragen werden.
Wie wäre es denn dann mit einem simplen:
Dim itemBody As NotesItem
Set itemBody = doc.GetFirstItem( "Body" )
Call itemBody.CopyItemToDocument( docNew, "myBody" )
Dim itemMaildatum As NotesItem
Set itemMaildatum = doc.GetFirstItem( "PostedDate" )
Call itemMaildatum.CopyItemToDocument( docNew, "myDate" )
Matthias
-
Jo, Matthias. Und Notes ist so freundlich, bei grossen RT-Fields mit dieser Methode auch mehrere gleichnamige Items samt zugehöriger Attachments mitzukopieren. Dein Vorschlag ist m.E. der praktikabelste.
Nur kodiert darf nix sein ...
Bernhard
-
Hi,
ich hab nochmal ein bisschen rumprobiert und bin zu folgendem Ergebnis gekommen.
Meine usprünglich favorisierte Lösung,
Übernahme mit CopyAllItems
Alle Felder außer Body und $File löschen (ForAll item in newdoc.items...)
Zuweisen der Maske (newdoc.Form = ...)
Füllen der entsprechenden Felder
funktioniert nicht immer zuverlässig. Bei manchen Mails bekomme ich in der ForAll - Schleifen die Fehlermeldung Object variable not set. Warum auch immer. Ich konnte das selbst im Debugger nicht nachvollziehen.
@TMC
Deine Lösung funktioniert auch nicht ganz sauber, denn bei HTML-Mails wird manchmal die Formatierung nicht sauber durchgeführt und Bilder die aus dem Internet nachgeladen werden, werden nicht dargestellt (es steht an der Stelle nur ein roter Text "Image").
Ich bin nun soweit, auch aus Zeitgründen, mit CopyAllItems zu arbeiten und halt den überflüssigen Feldbalast mit in Kauf zu nehmen. Aber sei's drum. :-\
Ein Phänomen ist mir bei den Versuchen noch aufgefallen, dass ich mir nicht erklären kann.
Die Auswahl der Mails erfolgt über eine PicklistCollection und der Zugriff auf das Dokument dann über collection.GetFirstDocument. Wenn ich mit aber nun im Debugger die Item-Liste des Dokumentes anschaue, sehe ich nicht alle Felder. Sehr oft fehlt z.B. das Feld $File, obwohl in Mail vorhanden. Kann sich das einer erklären? ??? ???
Axel