Liebes Forum,
ich steh auf dem Schlauch.
Ich möchte eigentlich nur, dass aus meiner Maske, die ich gerade erfasst habe, ein Richtextfeld in eine Mail kopiert wird, und diese weitersenden. Ich bekomme aber immer eine Fehlermeldung "Missing rich text object".
Leider zeigt mir der Debugger diesen Code nicht an.
Ich gebs zu, mein erster Versuch mit Richtext, der bisher kläglich scheitert. Kann mir mal bitte jemand auf die Sprünge helfen?
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim session As New notessession
Dim db As NotesDatabase
Dim rtitem As NotesRichTextItem
Dim ws As New notesuiworkspace
Dim uidoc As NotesUIDocument
Dim rtitem2 As NotesRichTextItem
Dim aktdoc As NotesDocument
Set uidoc = ws.CurrentDocument
Set aktdoc = uidoc.Document
Set rtitem2 = aktdoc.GetFirstItem ("Textinhalt" )
Set db = session.CurrentDatabase
Dim altdoc As Notesdocument
Set altdoc = db.GetDocumentByUNID(source.fieldgettext("HDokumentID"))
'Abfrage, ob der OK oder der Abbruchknopf gedrückt wurde
If Not Source.DialogBoxCanceled Then
'Neues Dokument vorbereiten, mit den Inhalten für Empfänger, Betreff, Text ....
Set doc = New NotesDocument(db)
With doc
.Form = "Memo"
.SendTo = source.fieldgettext("Empfaenger")
.Subject = source.fieldgettext("Meldungsart")+" - Servicefall "+source.fieldgettext("Servicenummer")
End With
'Ein Richtextitem wird erstellt für den Body, inkl. Link
Set rtitem = New NotesRichTextItem( doc, "Body" )
Call rtitem.AppendRTItem(rtitem2)
Call doc.Send(False)
End If
End Sub
Hallo iukdh (Was für Name)
Thomas wie ich gerade entdeckt habe ;)
Würde zum Test mal so was
If rtitem2 is nothing then
print "rtitem2 ist nicht da"
end if
vor
Call rtitem.AppendRTItem(rtitem2)
einfügen.
Und falls der Text ausgegeben wird schauen warum er rtitem2 nicht bekommt.
Gruss
Remo
@Bernhard
So, bin daheim, auf der Fahrt hierher ging mir aber noch folgendes durch den Kopf:
Wenn ich statt mit AppendRTItem mit AppendText arbeite, dann bekomme ich es hin. Das würde doch ohne gespeichertes Dokument auch nicht gehen, oder? Aber der Fehler kommt eindeutig aus der Zeile
Call rtitem.AppendRTItem(rtitem2)
wie ich herausgefunden habe.
Dieses "gerade erfasste Dokument" erstelle ich von einem DokumentA über eine Dialogbox, wie wir es letzhin hier im Forum erarbeitet hatten, da hast du mir glaub ich auch den Tipp dazu gegeben.
Wie du siehst ist der Code im Queryclose, und wird ausgeführt wenn die Dialogbox mit OK geschlossen wird.
Ich habe letzthin bei meinen Versuchen versucht das Dokument per Code zu speichern, da kam dann immer eine Fehlermeldung das schon ein Dokument mit dieser UNID vorhanden sei. Aus der Ferne heraus meine ich, dass ich dann im DokumentA gespeichert habe.
Kann es sein, dass ich diesen Code nicht in der Dialogboxmaske ausführen muss, sondern erst nachdem ich diese verlassen habe und dann wieder im DokumentA bin?
Vielleicht noch eine Frage zum Abschluss? Hast du eine Ahnung, warum mir der Debugger den Code in der Dialogbox nicht anzeigt? Er zeigt mir alles bis zum Sprung in die Dialogbox, und danach auch wieder, aber Code in der Dialogbox wird irgendwie ignoriert. Nicht sehr hilfreich :-\
Hallo Thomas
Ändere mal
Dim rtitem2 As NotesRichTextItem
zu
und
Set rtitem = New NotesRichTextItem( doc, "Body" )
Call rtitem.AppendRTItem(rtitem2)
zu
rtitem2.CopyItemToDocument doc, "Body"
Gruss
Remo
Guten Morgen Remo und Bernhard,
erstmal Dank für eure Rückmeldungen gestern (da war Hektik im Schuppen) und heute morgen schon wieder.
Letztlich hat mich Bernhards Frage auf den richtigen Weg gebracht. Das Dokument wird schon gespeichert, aber erst nach dieser Aktion, wenn die Dialogbox wieder verlassen wird.
Wenn ich es recht verstehe, funktioniert das mit dem AppendRTItem etwas anders als mit dem AppendText, den dieser wurde auch schon vor dem Speichern übergeben.
Da ich den Code aber weiterhin wegen der Übersichtlichkeit gerne im Queryclose der Dialogbox lassen würde, habe ich ihn wie unten angehängt geändert, was nun funktioniert. Den Hinweis auf diese Lösungsmöglichkeit habe ich aus einem anderen Thread hier im Forum gesehen. Bernhard, du schienst in diesem Thread nicht so ganz überzeugt davon zu sein, aber mir scheint es so als ob es funktioniert.
Vielleicht kurz nochmal meine Frage: Kann sich jemand vorstellen, warum der Debugger, wenn ich in eine Maske in einer Dialogbox verzeige, den Code dort nicht anzeigt? Ist das ein Bug oder ein Feature, das ich nicht verstehe?
So, und nun werd ich meine Maske noch etwas anpassen, und dann kommt das nächste Highlight dran: Mail abholen und in eine Maske packen, also der umgekehrte Weg. Ich denke, wir werden voneinander hören ::)
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim session As New notessession
Dim db As NotesDatabase
Dim rtitem As NotesRichTextItem
Dim ws As New notesuiworkspace
Dim uidoc As NotesUIDocument
Dim rtitem2 As NotesRichTextItem
Dim aktdoc As NotesDocument
'Erstmal refreshen, damit alles ins Backend kommt.
Call source.refresh(True)
Set aktdoc = source.Document
'Inhalte holen
Set rtitem2 = aktdoc.GetFirstItem ("Textinhalt" )
Set db = session.CurrentDatabase
Dim altdoc As Notesdocument
Set altdoc = db.GetDocumentByUNID(source.fieldgettext("HDokumentID"))
'Abfrage, ob der OK oder der Abbruchknopf gedrückt wurde
If Not Source.DialogBoxCanceled Then
'Neues Dokument vorbereiten, mit den Inhalten für Empfänger, Betreff, Text ....
Set doc = New NotesDocument(db)
With doc
.Form = "Memo"
.SendTo = source.fieldgettext("Empfaenger")
.Subject = source.fieldgettext("Meldungsart")+" - Servicefall "+source.fieldgettext("Servicenummer")
End With
'Ein Richtextitem wird erstellt für den Body, inkl. Link
Set rtitem = New NotesRichTextItem( doc, "Body" )
Call rtitem.AppendText ("HINWEIS: Bitte antworten Sie nicht direkt auf diese Mail sondern geben Sie eine evtl. Rückantwort im Servicefall ein."+Chr$(10)+"Bitte verwenden Sie dazu diesen Link -> ")
Call rtitem.AppendDocLink( altdoc, "Link zum Servicefall " + source.fieldgettext("Servicenummer"))
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText (source.fieldgettext("Anrede"))
Call rtitem.AddNewLine( 2)
Call rtitem.AppendRTItem(rtitem2)
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendText (source.fieldgettext("Abschluss"))
Call rtitem2.Remove
Call doc.Send(False)
End If
End Sub