Autor Thema: Umkopieren von RichText-Feldern, komischer Effekt im Frontend  (Gelesen 2537 mal)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
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")

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")

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 

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
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
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
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
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Also für meinen Zweck haben Teilmasken geholfen. Ich lasse die berechnet anzeigen anhand des Zählers.
Wenn eine Zeile gelöscht werden soll, verschiebe ich die Werte der Felder im Backend "zeilenweise" nach oben und lösche die Felder der letzten aktiven Zeile aus dem Backend-Dokument. Zudem setze ich den Zähler um eins zurück.
Dann öffne ich das Dokument neu, der Zähler ist ja um eins heruntergesetzt, die entsprechende Teilmaske erscheint nicht und der "überzählige" Satz Felder ist auch nicht mehr im Dokument, da ich ihn vor dem ReOpen ja aus dem Backend-Dokument gelöscht habe.

Ist etwas umständlicher Code, funktioniert aber allem Anschein nach :-)

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz