Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: wuschel am 12.06.06 - 16:26:22

Titel: berechnetes rich text-Feld
Beitrag von: wuschel am 12.06.06 - 16:26:22
Hallo,
der Umgang mit RT-Feldern ist ja offensichtlich in Notes nicht so ganz problemlos, wie sich das auch hier im Forum ablesen lässt. Leider habe ich beim Recherchieren keinen Lösungsansatz für mein Problem gefunden, daher schilder ich das hier einmal in der Hoffnung, jemand hat einen Tip oder einen Verweis auf einen helfenden Thread:
Ich habe in einer Maske für jedes Erfassungsfeld ein berechnetes Anzeigefeld. Je nach Status des Dokumentes werden entweder die Erfassungsfelder oder die Anzeigefelder angezeigt. Leider klappt das nicht für ein RT-Feld, das sowohl Text als auch Attachments enthalten soll (die Attachments für ich per Aktionsbutton und dahinterliegendem Formelsprachencode ein):
Das berechnete RT-Feld, das auf ein anderes RT-Feld verweist, bleibt immer leer, selbst wenn ich das Dokument speichere, schließe und wieder öffne.
Dann habe ich ein weiteres berechnetes RT-Feld eingefügt, das auf sich selbst verweist. Per LS-Aktion und folgendem Code versuche ich jetzt, dieses Feld zu befüllen. Klappt aber auch nicht (s.o.):
...
   Dim Beschreibung As Variant
   Dim Beschreibung_RTF_1 As Variant
   
   Set Beschreibung = doc.GetFirstItem( "Beschreibung" )
   Set Beschreibung_RTF_1 = doc.GetFirstItem( "Beschreibung_RTF" )
   
   Call Beschreibung_RTF_1.AppendRTItem(Beschreibung )
   Call doc.Save(False,True)

(Ein berechnetes Textfeld funktioniert übrigens grundsätzlich, aber damit gibt es an anderer Stelle Probleme)
Danke und Gruß Matthias
Titel: Re: berechnetes rich text-Feld
Beitrag von: ghost am 12.06.06 - 17:05:22
Hallo Matthias,

RichTextfelder verhalten sich etwas anders als andere Felder. Im RT Feld können Hide-Whens für die einzelnen Abschnitte gespeichert werden, diese überschreiben dann die Voreinstellungen in der Maske. Daher eignen sich Hide-When Formeln nicht für das beschriebene Vorhaben - jedenfalls so weit ich es richtig verstanden habe. Auch wird die Formel eines berechneten Rich Text Feldes nur ein einziges Mal ausgeführt, also vergleichbar mit Computed When Composed.
Es ist zwar möglich das RT Feld per LS Code zu befüllen, allerdings muss das Dokument gespeichert, geschlossen und dann wieder geöffnet werden, damit die Änderung in den RT Feld sichtbar wird. Es gibt dazu zahlreiche Beschreibungen hier im Forum und auch im Redbook (Chapter 15):

http://www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246854.html?Open

Vielleicht sollte ein anderer Ansatz gewählt werden. Computed Subforms oder die Auslagerung der RT-Felder in Antwordokumente könnten evt. weiterhelfen.

Viele Grüße
ghost
Titel: Re: berechnetes rich text-Feld
Beitrag von: koehlerbv am 12.06.06 - 18:06:56
Wie es der "Geist" schon beschrieben hat: Da RTFs ihr eigenes Hide-when-Handling haben (dafür sind sie ja auch rich text), kannst Du hide-whens für Maskenabschnitte, die RTFs enthalten, vergessen. Ist ja auch logisch so.
Mit berechneten Teilmasken, die dann wiederum ein berechnetes RTF enthalten (welches sich auf das rich text ITEM im Dokument bezieht), habe ich beste Erfahrungen. Und das Füllen eines weiteren rti's sparst Du Dir komplett.

Bernhard
Titel: Re: berechnetes rich text-Feld
Beitrag von: wuschel am 13.06.06 - 07:58:37
Dank Euch für die Antworten, insbesondere den Hinweis auf das Redbook.
Ich werde das mal ausprobieren.
Den Code zum Befüllen eines RT-Feldes habe ich ja beigefügt, aber er funktioniert nicht. Habt Ihr da noch eine Idee?
Gruß Matthias
Titel: Re: berechnetes rich text-Feld
Beitrag von: Untitled am 13.06.06 - 08:39:13
Versuche, "Variant" als Datentyp wann immer möglich zu verhindern.

"Beschreibung" und "Beschreibung_RTF_1" wären also besser als "NotesRichTextItem" deklariert.

Ausserdem wäre eine Prüfung, ob die RTFs überhaupt existieren nicht schlecht.

Grüsse
Moritz
Titel: Re: berechnetes rich text-Feld
Beitrag von: wuschel am 13.06.06 - 09:17:18
Hallo,
habe den Code gem. Moritz überarbeitet:
...   Dim Beschreibung As notesrichtextitem
   Dim Beschreibung_RTF_1 As notesrichtextitem
   
   Set Beschreibung = doc.GetFirstItem( "Beschreibung" )
   Set Beschreibung_RTF_1 = doc.GetFirstItem( "Beschreibung_RTF_1" )
   
   If ( Beschreibung.Type = RICHTEXT And Beschreibung_RTF_1.Type = RICHTEXT ) Then
      Call Beschreibung_RTF_1.AppendRTItem(Beschreibung )
      Msgbox "Append"
   End If
   
   Call doc.Save(False,True)
...

Die Msgbox kommt, aber das RT-Feld ist nach Schließen und erneutem Öffnen weiterhin nicht sichtbar gefüllt.
--
Mit der berechneten Teilmaske klappt das jetzt gut, allerdings gilt ja auch hier die Einschränkung, dass das berechnete Feld in der Teilmaske nur einmal berechnet wird. Sollte das Bearbeitungs-RT-Feld jetzt noch geändert werden, behält das berechnete RT-Feld in der Teilmaske den alten Inhalt. Habt Ihr hier auch noch eine Idee?

Außerdem habe ich gerade festgestellt, dass bei Zeilenumbrüchen der nachfolgende Text nicht mit in das berechnete RT-Feld übertragen werden. Hat hier jemand eine Lösung?

Gruß Matthias
Titel: Re: berechnetes rich text-Feld
Beitrag von: koehlerbv am 13.06.06 - 10:01:32
Mit der berechneten Teilmaske klappt das jetzt gut, allerdings gilt ja auch hier die Einschränkung, dass das berechnete Feld in der Teilmaske nur einmal berechnet wird. Sollte das Bearbeitungs-RT-Feld jetzt noch geändert werden, behält das berechnete RT-Feld in der Teilmaske den alten Inhalt.

Ich befürchte, Du hast mein Posting nicht richtig geschrieben. In meiner Lösung gibt es kein zweites Item, was noch einmal berechnet werden müsste - es gibt nur ein einziges. Es gibt lediglich zwei Felder (in je einer Teilmaske).

Bernhard
Titel: Re: berechnetes rich text-Feld
Beitrag von: wuschel am 13.06.06 - 10:11:10
@koehlerbv:ich hatte tatsächlich deine Lösung nicht verstanden, nämlich dass es sich hierbei um DASSELBE Feld nur mit unterschiedlichen Attributen in den jeweiligen Teilmasken handelt.
Danke und Gruß
Matthias