Autor Thema: Mal wieder Richtextfeld kopieren  (Gelesen 2896 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Mal wieder Richtextfeld kopieren
« am: 26.11.09 - 16:35:34 »
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?

Code
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
« Letzte Änderung: 27.11.09 - 20:28:37 von iukhdh »
Thomas von der IuK

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Mal wieder Richtextfeld kopieren
« Antwort #1 am: 26.11.09 - 17:44:40 »
Hallo iukdh (Was für Name)
Thomas wie ich gerade entdeckt habe  ;)

Würde zum Test mal so was

Code
If rtitem2 is nothing then
   print "rtitem2 ist nicht da"
end if

vor
Code
Call rtitem.AppendRTItem(rtitem2)
einfügen.

Und falls der Text ausgegeben wird schauen warum er rtitem2 nicht bekommt.

Gruss
Remo
« Letzte Änderung: 26.11.09 - 17:47:11 von Fedaykin »
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mal wieder Richtextfeld kopieren
« Antwort #2 am: 26.11.09 - 17:55:43 »
... dass aus meiner Maske, die ich gerade erfasst habe, ein Richtextfeld in eine Mail kopiert wird ...

Ist dieses "gerade erfasste" Dokument überhaupt schon gespeichert? Sonst wird das nämlich nix.

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mal wieder Richtextfeld kopieren
« Antwort #3 am: 26.11.09 - 18:01:12 »
@ Fedaykin (Was für ein Name)  ;)

Hallo Remo,
nö,da kommt keine Meldung

Und iukhdh kommt daher, weil in der iuk von hdh arbeite :)

@Bernhard

öh ... das wird wohl der Tipp sein, um den ich mich morgen gleich kümmern muss, denn jetzt steht die Holde da und holt mich ab ;-)

Danke an beide
Thomas von der IuK

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mal wieder Richtextfeld kopieren
« Antwort #4 am: 26.11.09 - 19:25:33 »
@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

Code
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  :-\
« Letzte Änderung: 26.11.09 - 19:27:37 von iukhdh »
Thomas von der IuK

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Mal wieder Richtextfeld kopieren
« Antwort #5 am: 26.11.09 - 23:36:28 »
Hallo Thomas

Ändere mal
Code
Dim rtitem2 As NotesRichTextItem
zu
Code
Dim rtitem2 As NotesItem

und
Code
Set rtitem = New NotesRichTextItem( doc, "Body" )
Call rtitem.AppendRTItem(rtitem2)
zu
Code
rtitem2.CopyItemToDocument doc, "Body"

Gruss
Remo
« Letzte Änderung: 26.11.09 - 23:41:10 von Fedaykin »
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mal wieder Richtextfeld kopieren
« Antwort #6 am: 26.11.09 - 23:45:47 »
Hallo Remo,

das CopyItemToDocument wollte ich auch vorschlagen, aber solange nicht geklärt ist, ob da überhaupt etwas zu kopieren da ist (sprich :Wurde das Dokument gespeichert) bringt das nichts.

Und ob Thomas das tut, wissen wir immer noch nicht. Obwohl das doch eigentlich eine einfache Frage war ...
Wenn er nicht soeichert / nicht speichern will (was ja durchaus denkbar ist), muss er über das Frontend gehen und darüber kopieren.

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mal wieder Richtextfeld kopieren
« Antwort #7 am: 27.11.09 - 08:56:01 »
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  ::)


Code
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
Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mal wieder Richtextfeld kopieren
« Antwort #8 am: 27.11.09 - 11:56:11 »
Der Debugger kann nicht laufen, wenn modale Fenster vom Code geöffnet werden. Das ist unschön, aber korrekt so. Normalerweise wird Dir dies vorher auch vom Debugger als letzter Hinweis eingeblendet - vermutlich hast Du das nicht gelesen oder irgendwann mal abgeschaltet.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz