Domino 9 und frühere Versionen > ND9: Entwicklung

Umkopieren von RichText-Feldern, komischer Effekt im Frontend

(1/2) > >>

rambrand:
Hallo,

ich hab eine Tabelle mit 10 Zeilen. Diese ist mittels einer Teilmaske in einem Dokument eingebettet.
Über Buttons kann der Benutzer beginnend mit einer Zeile bis zu diesen 10 Zeilen aktivieren. Die erste Zeile ist aber immer fix.
Die nicht aktivierten Zeilen habe ich mit einer Verbergen-Wenn-Formel verborgen, dazu nutze ich ein Feld mit der aktuellen Anzahl der aktivierten Zeilen.
Erste aktivierbare Zeile Verbergen-Formel wf_anzahlteilauftraege<2, zweite aktivierbare Zeile wf_anzahlteilauftraege<3, etc. Das Feld wf_anzahlteilauftraege hat initial den Wert 1 für die fixe Zeile.
Vor jeder aktivierbaren Zeile wird ein Plus- bzw. Minus-Button angezeigt.
Wählt der Benutzer mit dem Plus-Button eine zusätzliche Zeile aus, erhöht sich der Zähler. Es kann immer nur die nächste Zeile aktiviert werden, nicht einfach die 3. und dann die 7. oder so, damit das kein Durcheinander gibt.
Verwendet er den Minus-Button vor einer aktivierten Zeile, wird der Zähler um eins reduziert. Soweit funktioniert alles.
In jeder Zeile befinden sich drei Felder (antragkom_komptypx, antragkom_analogzux), darunter ein RichTextFeld (antragkom_beschreibungx). Die Felder sind entsprechend der Zeile nummeriert.
Soweit der Aufbau der Tabelle.

Nun soll ich gewährleisten, dass wenn der Benutzer innerhalb dieser Tabelle eine mittige Zeile löschen will und die Werte der Felder der darunter liegenden Zeilen dann um eins aufrücken.
Mit den normalen Felder kein Problem. Aber mit dem RTF.

Erster Versuch:

--- Code: ---Set feld1 = doc.GetFirstItem("antragkom_komptyp3")
Call feld1.CopyItemToDocument(doc,"antragkom_komptyp2")
Set feld1 = doc.GetFirstItem("antragkom_beschreibung3")
Call feld1.CopyItemToDocument(doc,"antragkom_beschreibung2")
Set feld1 = doc.GetFirstItem("antragkom_analogzu3")
Call feld1.CopyItemToDocument(doc,"antragkom_analogzu2")

--- Ende Code ---

Hier war dann aber in RTF antragkom_beschreibung2 der kombinierte Inhalt von antragkom_beschreibung2 und antragkom_beschreibung3 - im nachhinein auch logisch :-)

Also die Idee, ich remove das Feld antragkom_beschreibung2.


--- Code: ---Set feld1 = doc.GetFirstItem("antragkom_komptyp3")
Call feld1.CopyItemToDocument(doc,"antragkom_komptyp2")
Set feld1 = doc.GetFirstItem("antragkom_beschreibung3")
Call doc.RemoveItem("antragkom_beschreibung2")
Call doc.CreateRichTextItem("antragkom_beschreibung2")
Call feld1.CopyItemToDocument(doc,"antragkom_beschreibung2")
Set feld1 = doc.GetFirstItem("antragkom_analogzu3")
Call feld1.CopyItemToDocument(doc,"antragkom_analogzu2")

--- Ende Code ---

Zum Abschluss nutze ich das ReOpen von Anton hier aus dem Forum um das Dokument neu zu laden.

Resultat: Im Backend steht der Wert von ehemals antragkom_beschreibung3 in antragkom_beschreibung2. Im Frontend aber erscheint kein RTF-Feld antragkom_beschreibung2.

Erst hatte ich die Verbergen-Wenn-Formel in Verdacht und habe diese für die Zelle in der das Feld antragkom_beschreibung2 gemäß Maske enthalten sein soll deaktiviert. Dazu habe ich nach dem Feld ein Testzeichen "x" gesetzt, das sollte vom Löschen der Feldes im Backend-Dokument ja überhaupt nicht betroffen sein.

Aber auch bei diesem Versuch erscheint kein Feld antragkom_beschreibung2 im Frontend, ebensowenig wie das "x".
Ich komm nicht dahinter, wieso das Feld nicht mehr im Frontend angezeigt wird und vor allem, warum verschwindet das "x"?

Hier noch die ReOpen-Funktion die ich nutze - wie gesagt, die habe ich hier gefunden:

--- Code: ---Function ReOpen(docThis As NotesDocument) As Integer
        Dim ws As New NotesUIWorkspace
        Dim uidoc As NotesUIDocument
        Dim dbThis As NotesDatabase
        Dim unid As String
 
        ReOpen = 0
        Set dbThis = docThis.ParentDatabase
        Call docThis.Save(True , True)
        unid = docThis.UniversalID
        docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden
        Set uidoc = ws.CurrentDocument
        Call uidoc.Close
        Set docThis = dbThis.GetDocumentByUNID(unid)
        Set uidoc = ws.EditDocument(True , docThis)
        Set docThis = uidoc.Document
        If docThis.HasItem("SaveOptions") Then  
            ' # ... das Feld SaveOptions wieder entfernen...
            docThis.RemoveItem("SaveOptions")
            Call docThis.Save( True , True )
        End If
        ReOpen = 1
        Print "Das Dokument wurde erneut geöffnet"
End Function

--- Ende Code ---

Bye,
Markus

rambrand:
Hi,

hab eben mal zum Spaß - oder aus Verzweiflung - die Verbergen-Wenn Formel der Zelle mit dem Feld antragkom_beschreibung3 in der darunterliegenden Zeile deaktiviert aus der ja in das Feld antragkom_beschreibung2 kopiert wird und den Test wiederholt. Jetzt erscheint Feld antragkom_beschreibung2 und das Testzeichen in der zweiten Zeile.

Das impliziert für mich, dass CopyItemtoDocument nicht nur das Item, sondern auch die Texteigenschaften mit kopiert. Denn wenn in der Zelle nun die Formel wf_anzahlantraege<3 kopiert wird, dieser Wert aber korrekt auf 2 reduziert wurde, dann wird in der 2. Zeile in dieser Zelle der Inhalt verborgen.
Liege ich da richtig?

Bye,
Markus

Tode:
Tja, so ist das leider: Richtextitem speichern ihre eigenen Hide- Whens IM FELD. Wenn Du die kopierst, dann kopieren Sie Ihre Hide- whens mit...
Workarounds gibt es einige, aber alle erfordern einen kompletten Neu_ aufbau Deiner Maske...

Und das x verschwindet deshalb mit, weil Notes immer nur EINE Hide- When- Formel pro Abschnitt erlaubt. Machst Du zwischen Feld und x ein Enter, dann bleibt sicher das x sichtbar...

rambrand:
Hi Torsten,

ich hatte es inzwischen befürchtet. Danke für die Info.
Dann muss ich das wohl mit Teilmasken in der Teilmaske lösen. Was für ein Aufwand, gnah.

Bye,
Markus

Tode:
Nein, Teilmasken helfen nicht wirklich. Entweder Du arbeitest mit Abschnitten, die Du automatisch komprimierst und verbirgst (derInhalt hat dann keine Hide- When) oder mit einer Computed- Table, die programmatisch auf einen "leeren" Tab wechselt...

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln