Domino 9 und frühere Versionen > ND8: Entwicklung
RichTextFeld in anderes Dokument kopieren
RunRevilo:
Hallo,
ich möchte gerne ein RichTextFeld, in welchem Text und Anhänge sein können, von einem Dokument in ein anderes Dokument kopieren. Solange ich beim eingeben vom Text keine ENTER-Taste benutze klappt es auch einwandfrei.
Wird im zu kopierende RichTextFeld jedoch mit der ENTER-Taste ein Absatz gemacht, so wird alles nach der Enter-Taste beim kopieren weggelassen.
Im zu kopierenden RichtTextFeld soll noch vor dem eingefügten Inhalt eine Text mit dunkelroter Farbe stehen, mit den Mitarbeiter wer das eingefügt hat.
Hier die betreffenden Codezeilen
--- Code: ---'Richtextitem aus Doc1 holen
Set rtitemInt=doc1.GetFirstItem(Betreff)
'Farbe auf Dunkelrot stellen und gewünschten Text in neues RichTextItem schreiben
'damit ich es vor dem eingefügten Inhalt stellen kann.
richStyle.NotesColor=COLOR_DARK_RED
Call rtitemText.AppendStyle(richStyle)
Call rtitemText.AppendText(strInfo)
'Ein neues RichTextItem erstellen und zuerst den roten Text einfügen und dann den Inhalt des anderen Richtextfeldes
'dann dieses RichTextItem in das doc2 kopieren.
Set rtitemBericht=docGespr.CreateRichTextItem("value")
Call rtitemBericht.AppendRTItem(rtitemText)
Call rtitemBericht.AppendRTItem(rtitemInt)
Call rtitemBericht.CopyitemtoDocument(doc2,"Bericht")
--- Ende Code ---
Zur Veranschaulichung die Screenshots
Bild1: RichTextFeld aus Doc1 mit Text und Bild, ohne Verwendung der ENTER-Taste
Bild2: RichTextFeld aus Doc2 in welchem richtig hineinkopiert wurde.
Bild3: RichTextFeld aus Doc1 mit Text und Bild, mit Verwendung der ENTER-Taste, damit Bild in eigener Zeile steht
Bild4: RichTextFeld aus Doc2, wo alles nach der ENTER-Taste nicht mitkopiert wurde.
Tode:
Also: Wenn man Richtext- Items manipuliert, sollte man immer ein "NotesRichtextItem.Update" druchführen, bevor man den Inhalt "weiterverwendet". Auszug aus der Hilfe:
--- Zitat ---Operations on a rich text item are queued for efficiency. The order and time of completion are not predictable. Use this method to ensure that processing is complete at a certain point.
--- Ende Zitat ---
Grundsätzlich halte ich das verwenden eines "Zwischen- Richtext- Feldes" nicht für nötig, und WENN, dann würde ich dieses nicht in einem der beteiligten Dokumente anlegen, denn ein versehentliches Speichern führt dazu, dass jeder weitere Aufruf den "alten Quatsch" mitkopiert.
Du hast also -imho- viel zu viele Richtext- Items involviert. Woher kommt eigentlich "rtItemText" und dessen Inhalt? Das fehlt noch im Code- Beispiel. Wenn Du das angibst, kann man Dir sicher besseren Code mit weniger involvierten RT- Items geben.
Mitch:
Hallo,
das kenne ich auch. Richtextstyles verhalten sich manchmal seltsam. Ich habe die Erfahrung gemacht, dass Styles nicht auf leere Richtextitems angewendet werden können, sondern dass dort schon etwas drin stehen muss. Zum Beispiel eine Leerzeile.
Also anstatt:
--- Code: ---Set rti = doc.GetFirstItem("Comment")
Call rti.AppendStyle(rtsBold)
Call rti.AppendText("Text der nicht fett wird wenn Comment vorher leer war")
--- Ende Code ---
... eine Leerzeile einfügen:
--- Code: ---Set rti = doc.GetFirstItem("Comment")
Call rti.AddNewline(1)
Call rti.AppendStyle(rtsBold)
Call rti.AppendText("Text wird fett, auch wenn Comment vorher leer war")
--- Ende Code ---
Ursachenforschung habe ich nicht betrieben, der Workaround reichte mir aus.
Gruß,
Mitch
RunRevilo:
@Tode: habe jetzt NotesRichtextItem.Update eingebaut und es kopiert jetzt auch den Teil nach dem Enter
Das "rtItemText" benutzte ich um als erste Zeile das Datum und den User in dunkelroter Farbe zu schreiben.
strInfo="> " +strDatum + " " + user + " Intensivierungsgespräch:" + Chr(10)
Ich Frage zuerst ab ob es as "rtItem Text" gibt oder nicht. Und sicherheitshalbe lösche ich es auch immer nach dem Aufruf der Methode
--- Code: ---strInfo="> " +strDatum + " " + user + " Intensivierungsgespräch:" + Chr(10)
..
If Not doc1.HasItem("red") Then
Set rtitemText=docGespr.CreateRichTextItem("red")
Else
Set rtitemText=docGespr.GetFirstItem("red")
End If
Call rtitemText.AppendStyle(richStyle)
Call rtitemText.AppendText(strInfo)
..
..
Call doc1.save(True,False)
Call rtitemText.remove
--- Ende Code ---
Ich benutze die ganzen Richtext-Items, da es wenn es im doc2 bereits was im RichtextFeld steht, der zu kopierende Teil, am Anfang angehängt werden soll. Und das ist mir anders nicht gelungen. Da hat es mir den kopierten Teil immer ans Ende eingefügt.
Muss diesen Teil des Skripts aber erst noch mal inplementieren, da ich dort auch das Problem mit der Enter-Taste hatte und das zuerst lösen wollte.
Inzwischen Danke für die Hinweise.
Danke inzwischen
Tode:
OK, dann will ich mich in die "Logik" nicht weiter einmischen. Wenn das mit dem "Update" nun funktioniert, ist ja Dein Problem wenigstens behoben.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln