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

Enhancement

Major
#26586
Direct updating of calculated attributes in forms and grids when editing input values
#26702
TLScript: sendMail() function
#27216
Attribute annotation "fallback value" as replacement in case of empty value
#27457
Conditional formatting in tables/grids/forms
#27784
Java 17 as a development environment
#28122
Layout editor: Generalized form templates
#28151
TLScript: new ParseCSV function
#28263
Allow to specify the deletion policy for a reference in the model
Detail
#27920
Removal of old themes and adaptation to the core theme
#28144
Display button line via template, no more button lines in administration views
#28214
Update pac4j-oidc
#28292
Set tl-license-professional version in tl-parent-all
Nice to have
#28282
tl-demo: Example for TreeGrid with synthetic root node

Bugfix

Major
#28197
Sorting a composition table by a column with SelectField leads to ClassCastException
Detail
#27787
Missing context suggestions for TL script functions with underscore in the name
#28071
Deletion of inline composition elements in the form fails if deleted object triggers further deletions
#28175
Script Recorder: Saving scripts does not display the file name field
#28184
Eclipse settings: Update of the webfragment version to 6.0
#28283
Migration processor for cleaning up multiple references to the same composition
#28288
Dynamic visibility requires fields for dependent attributes
Enhancement

Major

#27216

Attribute annotation "fallback value" as replacement in case of empty value

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
  • DE
  • Login