Domino 9 und frühere Versionen > ND9: Entwicklung
Umkopieren von RichText-Feldern, komischer Effekt im Frontend
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