TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_7.9.0
  4. #27216

7.9.0
TopLogic Release

2024-10-04

Verbesserung

Wichtig
#26586
Direkte Aktualisierung berechneter Attribute in Formularen und Grids bei Bearbeitung der Eingangswerte
#26702
TLScript: sendMail() Funktion
#27216
Attribut-Annotation "fallback value" als Ersatz bei leerem Wert
#27457
Bedingte Formatierung in Tabellen/Grids/Formularen
#27784
Java 17 als Entwicklungsumgebung
#28122
Layout-Editor: Verallgemeinerte Formulartemplates
#28151
TLScript: neue Funktion ParseCSV
#28263
Allow to specify the deletion policy for a reference in the model
Detail
#27920
Entfernen alter Themes und Anpassung an das Core Theme
#28144
Buttonzeile über Template anzeigen, keine Buttonzeilen mehr in Administrationssichten
#28214
Update pac4j-oidc
#28292
tl-license-professional Version in tl-parent-all festlegen
Kleinigkeit
#28282
tl-demo: Beispiel für TreeGrid mit synthetischem Root-Knoten

Fehlerbehebung

Wichtig
#28197
Sortieren einer Kompositionstabelle nach einer Spalte mit SelectField führt zu ClassCastException
Detail
#27787
Fehlende Kontextvorschläge bei TL-Script-Funktionen mit Unterstrich im Namen
#28071
Löschen von Inline Kompositionselementen im Formular scheitert, wenn gelöschtes Objekt weitere Löschungen auslöst
#28175
Script Rekorder: Speichern von Scripten zeigt das Dateinamensfeld nicht an
#28184
Eclipse-Einstellungen: Update der webfragment Version auf 6.0
#28283
Migrationsprozessor zur Bereinigung von mehrfachen Verweisen auf die gleiche Komposition
#28288
Dynamische Sichtbarkeit benötigt Felder für abhängige Attribute
Verbesserung

Wichtig

#27216

Attribut-Annotation "fallback value" als Ersatz bei leerem Wert

Code-MigrationFallbackAttributeMetaModel

Aktuell können für Attribute Default-Werte konfiguriert werden. Diese Werte werden bei Objektanlage in das Attribut gesetzt und gespeichert. Die Werte können später durch den Nutzer bearbeitet werden. Bei dem Wert ist aber nicht mehr erkennbar, ob der Nutzer den Wert explizit eingegeben hat oder ob der Default-Wert beibehalten wurde. Wird der Defaultwert aus dem Kontext berechnet, so gilt immer der Wert bei Objektanlage. Ändert sich der Kontext und würde die Defaultwertberechnung später einen anderen Wert berechnen, hat das keinen Einfluss mehr auf den Default-Wert.

Verbesserung

Gewünscht ist eine Attribut Annotation für einen "Ersatzwert", den das Attribut annehmen soll, wenn kein Wert explizit gesetzt wurde. Der Ersatzwert soll dynamisch sein und sich wie ein berechnetes Attribut ändern können, solange bis ein expliziter Wert in dem Attribut gespeichert wurde.

In der Frontend-Präsentation muss erkennbar sein, ob es sich bei dem angezeigten Wert um den tatsächlichen Wert, oder um den Ersatzwert handelt. Bei Text-Feldern im Edit-Modus soll ein Ersatzwert als Platzhalter-Wert (grau im Eingabefeld) angezeigt werden.

Die Schnittstelle getValue() soll immer den Wert (entweder den explizit gesetzten oder den Ersatzwert) liefern, so dass von dem Wert abhängige Berechnungen keine Unterschied zwischen Wert und Ersatzwert machen müssen.

Wenn in dem Attribut ein expliziter Wert gesetzt wurde, soll es möglich sein, diesen wieder auf den Ersatzwert zurückzusetzen. An der GUI kann dies durch Löschen des dargestellten Wertes geschehen, im Code durch Setzen des Wertes "null".

Hintergrund

Anwendungsfälle für eine solche Funktion sind Attribute die, wenn leer, als wertgleich mit anderen Attributen oder einer Berechnung betrachtet werden sollen.

So ist beispielsweise ein Ist-Termin automatisch gleich dem Plan-Termin, wenn kein Abweichender Wert gepflegt wurde: So eine Funktion ist jetzt entweder umsetzbar durch explizite (redundante) Weichen in jeder Abfrage (wenn null, dann nimm den anderen Wert)... ...oder durch Modellierung des Ist-Termins als Pflichtfeld und impliziter Initialisierung des Wertes bei der Objektanlage. Werden bei der Objektanlage die Eingabefelder für Ist-Termine allerdings angezeigt (z.B. bei tabellarischer Pflege), würde der Nutzer hierdurch zu einer Eingabe gezwungen.

Eine Deklaration dieses Verhaltens im Modell, könnte die UI - Logik extrem vereinfachen.

Anwendung

Es gibt eine neue Speichervorschrift "Attribut mit Rückfallwert", mit der man ein Attribut erzeugen kann, das einen solchen Ersatzwert bei nicht gesetztem Wert definiert.

Ein Attribut mit Rückfallwert referenziert in seiner Speichervorschrift zwei andere Attribute desselben Typs: Eines, das einen explizit gesetzten Wert speichert (das Speicherattribut) und eines, dass den Ersatzwert liefert (das Ersatzwertattribut). Das "Attribut mit Rückfallwert" verhält sich solange kein expliziter Wert gesetzt ist (solange das Speicher-Attribut keinen Wert gesetzt hat) wie ein berechnetes Attribut, dass den Ersatzwert aus dem referenzierten Attribut liefert. Anders als bei einem berechneten Attribut, kann aber ein (expliziter) Wert in dem Attribut gespeichert werden. Die Speicherung erfolgt dann transparent für den Nutzer in dem Speicherattribut. Sowohl das Speicherattribut als auch das Ersatzwertattribut können i.d.R. an der GUI versteckt werden. Nur wenn die Applikationslogik explizit wissen will, ob ein expliziter Wert gesetzt ist, können diese beiden referenzierten Attribute abgefragt werden.

Code-Migration

Die API von com.top_logic.element.meta.form.FieldProvider hat sich geändert. Statt

public FormMember getFormField(EditContext editContext, String fieldName)

muss jetzt

public FormMember createFormField(EditContext editContext, String fieldName)

überschrieben werden. Der FieldProvider ist jetzt auch für den Initialwert eines Formularfeldes zuständig, siehe com.top_logic.element.meta.form.AbstractFieldProvider.initValue(EditContext, FormMember)

Test

  • /com.top_logic.demo/src/test/java/test/com/top_logic/demo/scripted/model/attribute/TestFallbackAttribute.script.xml
  • Demo-Sicht: Technisches Demo > Komponenten > Ersatzwerte
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • EN
  • Login