Domino 9 und frühere Versionen > ND9: Entwicklung
Body zu Rich Text wandeln
wittmann_franz:
Hallo zusammen,
ich verarbeite in einer Anwendung eingehende Mails und muss in diesem Zusammenhang die body Felder bearbeiten.
Der eingehende Inhalt des body Feldes so einer Mail wird am Ende mit einem weiteren RichText Feld mittels AppendRTItem zusammengeführt.
Das klappt so weit auch gut, bis das body Feld der eingehenden Mails nicht im Richtext sonder als Text Feld hereinkommen.
Hier mal ein paar Script Schnipsel:
Dim s As NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim doc, docVor As NotesDocument
Dim docFW As NotesDocument
Dim rtitem, rtitem2 as NotesRichTextItem
Set s = New NotesSession
Set db=s.CurrentDatabase
Set v = db.Getview("MeldungenZumWeiterleitenAll")
Set doc = v.Getfirstdocument()
xxxxxxxx
If doc.Body = "" Then
Set rtitem = doc.GetFirstItem("Bemerkung")
Else
Set rtitem = doc.GetFirstItem( "Body" )
End If
xxxxxxxx
Am Ende kommt dann noch:
Call rtitem2.AppendRTItem(rtitem )
zum zusammenführen der beiden Felder.
Wie gesagt es klappt alles gut solange das eingehende Mail ein Body Feld im Rich Text Format dabei hat.
Sobald es ein Text Feld ist kommt es zum Typ Mismatch bei If doc.Body = "" Then und am Ende bei Call rtitem2.AppendRTItem(rtitem )
Wie kann ich das an der Stelle beheben.
Ich denke wenn ich in der Lage bin das rtitem wieder nach Richt Text zu überführen wäre mir geholfen, doch ich weiß leider nicht wie es geht.
Würde gern folgende Überprüfung mit laufen lassen:
If ( rtitem.Type <> RICHTEXT) Then
mach was ????????????
Else
'mach nix, Script läuft weiter
End If
Danke vielmals für Eure Unterstützung
rambrand:
Hallo,
mit dem Type bist Du schonmal richtig. Wenn Du dann merkst, das Feld ist ein Textfeld, dann machst Du beim rtitem2 kein appendrtitem, sondern ein appendtext ... klingt logisch oder?
Bye,
Markus
ERR:
Hallo Franz,
--- Code: ---If doc.Body = "" Then
--- Ende Code ---
Wenn man doc.Feldname verwendet, wird ein Array zurückgeliefert. Bei deinem Beispiel bedeutet das, das ein Array mit einem String verglichen wird und das liefert die "Type mismatch"-Fehlermeldung zurück. Da hättest du also mindestens noch "(0)" dahinter hängen müssen, damit das überhaupt funktioniert könnte.
Das eigentliche Problem ist, das du mit dem Item vom Typ NotesRichTextItem arbeitest (dein "rtitem"). Da kommt auch ein "Type mismatch" her.
Du musst ein NotesItem verwenden und dann den Type abfragen, so wie du es geschrieben hast. Dann kannst du auch das machen, was Markus geschrieben hat (entscheiden ob AppendRTItem oder AppendText genutzt wird).
--- Code: ---Dim item As NotesItem
Set item = doc.GetFirstItem("Body")
If item.Type = 1 Then
' Richtext - AppendRTItem verwenden
... weiterer Code
Else
' kein Richtext - AppendText verwenden
... weiterer Code
End If
--- Ende Code ---
MFG
ERR
wittmann_franz:
Hallo,
vielen Dank schon mal für die Hilfe.
habe ich so umgesetzt und es funktioniert jetzt auch bei den Dokumenten mit Text Body Feld.
Nur leider nicht mehr wenn es als RichText herein kommt.
Nun habe ich bei der Zeile If doc.Body(0) = "" Then den Fehler Variant enthält keinen Container.
Wo steckt denn jetzt das berühmte Detail.
Danke noch einmal
ERR:
Hallo,
du musst mit dem NotesItem arbeiten. Ich hätte auch noch schreiben müssen "es kommt normalerweise ein Array zurück, außer bei z.B. RichText..." ::)
--- Code: ---If item.Type = 1 Then
' Richtext - AppendRTItem verwenden
' item ist ein RICHTEXT, also AppendRTItem
Call rtitem2.AppendRTItem(item)
Else
' kein Richtext - AppendText verwenden
' item ist kein RICHTEXT, also AppendText
Call rtitem2.AppendText(item.Text)
End If
--- Ende Code ---
Anhand des Item.Type wird geprüft, wie es weiter gehen soll. Bei RichText mit AppendRTItem, bei Text mit AppendText. Da brauchst du dann keine Prüfung des Body-Feldes mit
--- Code: ---If doc.Body(0) = "" Then
--- Ende Code ---
.
MFG
ERR
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln