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:
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")
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.
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")
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:
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
Bye,
Markus