Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Alexander 28 am 09.11.16 - 12:16:54

Titel: RichText zu PlainText
Beitrag von: Alexander 28 am 09.11.16 - 12:16:54
Ich habe folgende Herausforderung.

In einer Maske befindet sich ein RichText-Feld, welches einfach nur während des Speichervorgangs, im Event QuerySave zu PlainText konvertiert werden soll. Hört sich erst mal ganz einfach an, scheint es aber nicht zu sein, denn die besondere Herausforderung ist, dass sämtliche Zeilenumbrüche die im RichText-Feld eingebunden wurden erhalten bleiben. Aus diesem Grund scheiden die klassischen Mechanismen @Abstract bzw. @AbstractSimple schon einmal aus, da beide Funktionen sämtliche Zeilenumbrüche entfernen. Auch kann ich nicht auf die NotesItem Klasse zugreifen, weil das Dokument ja noch nicht gespeichert wurde und die Items somit noch nicht zur Verfügung stehen. Die einzige Funktion, mit der ich den Text ordnungsgemäß aus dem RichText-Feld abgreifen und in ein anderes Feld übertragen kann befindet sich im uidoc. Mithilfe von fieldgettext kriege ich den Text und kann ihn auch ordnungsgemäß in das neue Zielfeld des gleichen Dokumentes (ein reines Textfeld) übertragen. Bedauerlicherweise entfernt aber auch diese Funktion sämtliche Zeilenumbrüche.

Somit meine Frage. Gibt es irgendeine Möglichkeit, den Inhalt des RichText Feldes während des Speichervorganges in ein Textfeld zu übertragen und im Rahmen dieser Maßnahme sämtliche Zeilenumbrüche zu erhalten?
Titel: Re: RichText zu PlainText
Beitrag von: Tode am 09.11.16 - 12:28:10
Du musst ins PostSave- Event ausweichen, und dort nochmal ein doc.Save (NICHT uidoc.Save) hinterherschiessen nach Deinen Änderungen, weil eben im QuerySave das Richtextitem noch nicht die aktuellen Informationen enthält...
Titel: Re: RichText zu PlainText
Beitrag von: Alexander 28 am 09.11.16 - 13:37:29
hi tode. aber genau das wollte ich eben nicht. naja trotzdem danke für deine mühe
Titel: Re: RichText zu PlainText
Beitrag von: jBubbleBoy am 09.11.16 - 14:25:03
mit Zeilenumbrüche, geht bei mir so:
Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Msgbox source.document.GetFirstItem("Body").text
	source.Document.txt = source.document.GetFirstItem("Body").text
End Sub

Titel: Re: RichText zu PlainText
Beitrag von: Alexander 28 am 09.11.16 - 17:02:31
Klappt bei mir nur bei bereits bestehenden (also keinen neuen) Docs oder in TextItems (nicht RT Items).
Schade. Trotzdem Danke
Titel: Re: RichText zu PlainText
Beitrag von: jBubbleBoy am 09.11.16 - 17:22:02
Welche NotesClient Version habt ihr im Einsatz?
Auch ein @Abstract entfernt bei mir nicht alle Zeilenumbrüche, meine Testergebnisse beziehen sich auf das erste QuerySave.
Titel: Re: RichText zu PlainText
Beitrag von: Flachmann am 10.11.16 - 07:49:52
Auch ein @Abstract entfernt bei mir nicht alle Zeilenumbrüche, meine Testergebnisse beziehen sich auf das erste QuerySave.
Ich glaube das bezieht sich auf die Hilfe. Dort heißt es:
Note  This function removes all carriage returns and linefeeds, regardless of which keywords are selected.

Aber bloß weil es dort steht heißt natürlich nicht, dass das auch so ist.  :-X
Titel: Re: RichText zu PlainText
Beitrag von: Gutierrez am 10.11.16 - 12:06:11
Probier mal:
Code
Sub Postopen(Source As Notesuidocument)
	
	Dim rt As NotesRichTextItem
	
	If Source.Isnewdoc Then
		Set rt = Source.Document.CreateRichTextItem("Body")		
	End If
	
End Sub
Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	
	Dim rt As NotesRichTextItem
	
	Call Source.Refresh(True)
	Set rt = Source.Document.GetFirstItem("Body")
		
End Sub

In der Maske gibt es natürlich ein RTFeld "Body" ;)

Beste Grüße
Titel: Re: RichText zu PlainText
Beitrag von: Alexander 28 am 11.11.16 - 12:31:32
Hi Gutierrez. Das sieht vielversprechend aus. Werde das mal am WE testen und ein Feedback geben.

@Flachmann  + @jBubbleBoy
Notes 9.0.1
@Abstract killt bei mir alle Zeilenumbrüche!!!
Titel: Re: RichText zu PlainText
Beitrag von: thkn777 am 14.11.16 - 12:06:32
Unter der Voraussetzung, daß beide Felder bearbeitbar sind - wie wäre es mit:

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	Call Source.GotoField("frtf")
	Call Source.SelectAll()
	Call Source.Copy()
	
	Call Source.GotoField("ftxt")
	Call Source.SelectAll()
	Call Source.Paste()
End Sub

Dabei ist frtf das RTF-Feld und ftxt das Textfeld. Unter 8.5.3 geht das bei mir  ;D

Gruss,
Th.