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

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
Fehlerbehebung

Detail

#28071

Löschen von Inline Kompositionselementen im Formular scheitert, wenn gelöschtes Objekt weitere Löschungen auslöst

CompositionDifaV7FormContext

Hintergrund

Folgendes Modell:

"A"s haben "B"s und "B"s haben "C"s. Jeweils als Komposition, mehrere Werte, geordnet. Alle Klassen haben ein Attribut "name" vom Typ String.

Ein Formular zeigt eine Instanz von A mit den Feldern "name" und "B"s. "B"s werden als Tabelle dargestellt, die nur die Spalte "name" hat:

Der Formkontext des Formulars wird dabei rekursiv über die Kompositionshierarchie aufgebaut, enthält also neben den Feldern von A auch die der verknüpften "B"s und der enthaltenen "C"s.

Problem

Wird aus der Tabelle eine Zeile (eine Instanz von B) gelöscht, scheitert das Speichern der Änderung, weil im Formkontext auch die Felder aller verknüpften Instanzen von C enthalten sind und auf Modifizierbarkeit geprüft werden, obwohl diese Instanzen als Teile von B gelöscht wurden und daher prinzipiell nicht modifiziert werden können:

Caused by: com.top_logic.knowledge.wrap.exceptions.WrapperRuntimeException: Target object is deleted: DeletedObject(DBKnowledgeObject[wrapper: AttributedWrapper(type:Test:C, id: GenericObject:623170, name: A1.B1.C3)])
	at com.top_logic.element.meta.AttributeOperations.checkAlive(AttributeOperations.java:346)
	at com.top_logic.element.meta.AttributeOperations.checkUpdate(AttributeOperations.java:240)
	at com.top_logic.element.meta.AttributeUpdate$1.checkUpdate(AttributeUpdate.java:109)
	at com.top_logic.element.meta.AttributeUpdate.checkUpdate(AttributeUpdate.java:681)
	at com.top_logic.element.meta.form.overlay.FormObjectOverlay.store(FormObjectOverlay.java:303)
	at com.top_logic.element.meta.AttributeUpdateContainer.store(AttributeUpdateContainer.java:659)
	at com.top_logic.element.meta.form.AttributeFormContext.store(AttributeFormContext.java:143)
	at com.top_logic.element.meta.form.component.AbstractApplyAttributedCommandHandler.saveMetaAttributes(AbstractApplyAttributedCommandHandler.java:48)
	at com.top_logic.element.meta.form.component.DefaultApplyAttributedCommandHandler.storeChanges(DefaultApplyAttributedCommandHandler.java:29)
	at com.top_logic.layout.form.component.AbstractApplyCommandHandler.applyChanges(AbstractApplyCommandHandler.java:196)

Anmerkung: Um das Problem zu reproduzieren benötigt man noch weitere Referenzen mit einer gesetzten Löschstrategie, die dazu führen, dass noch andere Objekte gelöscht werden, wenn Teile aus Kompositionen gelöscht werden. Siehe Testfall.

Das Problem ist auch im Instanzenreiter reproduzierbar:

Caused by: com.top_logic.knowledge.wrap.exceptions.WrapperRuntimeException: Target object is deleted: DeletedObject(DBKnowledgeObject[wrapper: AttributedWrapper(type:Test:C, id: GenericObject:623170, name: A1.B1.C3)])
	at com.top_logic.element.meta.AttributeOperations.checkAlive(AttributeOperations.java:346)
	at com.top_logic.element.meta.AttributeOperations.checkUpdate(AttributeOperations.java:240)
	at com.top_logic.element.meta.AttributeUpdate$1.checkUpdate(AttributeUpdate.java:109)
	at com.top_logic.element.meta.AttributeUpdate.checkUpdate(AttributeUpdate.java:681)
	at com.top_logic.element.meta.form.overlay.FormObjectOverlay.store(FormObjectOverlay.java:303)
	at com.top_logic.element.meta.AttributeUpdateContainer.store(AttributeUpdateContainer.java:659)
	at com.top_logic.element.meta.form.AttributeFormContext.store(AttributeFormContext.java:143)
	at com.top_logic.element.layout.grid.DefaultGridApplyHandler.storeChanges(DefaultGridApplyHandler.java:30)
	at com.top_logic.element.layout.grid.GridComponent.storeRowValues(GridComponent.java:1363)

Test

  • /com.top_logic.demo/src/test/java/test/com/top_logic/demo/scripted/model/attribute/composition/TestDeleteNestedCompositions.script.xml
  • 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