TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha1
  4. #29080

8.0.0-alpha1
TopLogic Release

2026-03-31

enhancement

major
#28994
TableComponent: ConfigKey sollte anpassbar sein
#29055
User-specified CSS classes cannot override default numeric alignment in table columns
#29084
JSON Schema Support for Typed Configuration
#29092
Multi-factor authentication and self-service account management
minor
#29037
Workflows beim Anwendungsstart hochladen/aktualisieren
#29095
Keine feste Referenz auf tl-build-processor in tl-parent-build
#29204
TreeGrid Modelbuilder API: Knotenprädikat bekommt Komponentenmodell nicht
nice-to-have
#29103
REST Client JSON Parser gegen leeren Content robust machen

defect

critical
#29080
Unerwünschte Zeilenobjekte in Tabellen bei Änderungen aus anderen Session
#29199
XSS-Schwachstelle in /jsp/openapi/server/displayAPISpec.jsp
major
#28674
Security Issues im UMLJS Projekt
#28710
Accounts mit wiederverwendetem Kontakt haben keine Berechtigung
#28993
Filter von dynamischen Spalten ignorieren den Attributtyp
#29042
Fehler in Spaltenfilter nach Double-Werten
#29107
StackOverflowError beim Zurückrollen im Transaktionsmonitor
#29111
JavaDoc-based I18N generation ignores custom ResKey in I18NConstants
minor
#27850
Modelleditor verschluckt Klassifikation mit Kleiner-Zeichen im Namen
#28456
Referenz auf fehlende Dateien in subsession.jsp
#28485
Immutable/Disbled Booleanfelder über Tab erreichbar/fokusierbar
#28651
Unnötiger Platz bei Inline-Tabellen
#28725
Sinnlose Scroll-Bar im Hilfe-Editor
#29053
TL-Script: format() mit null input liefert IllegalArgumentException
#29061
Fehlende Ersetzung von KnowledgeItem durch ObjectKey in Collections in Queries
#29066
"SafeHTML not started" Fehler bei scripted Tests
#29069
Ein berechnetes Attribut vom Typ "Allg. Suchausdruck" kann keine Closure zurückgeben
#29073
Auf abstrakte Attribute kann in transienten Objekten zugegriffen werden
#29074
In einer Wertetransformation eines Komponentenkanals kann nicht auf die Formulardaten einer Komponente zugegriffen werden
#29075
Nach Modell-Änderung können invalide gewordene berechnete Attribute nicht mehr editiert werden
#29076
API-Key in REST-Schnittstellenkonfiguration wird nicht verborgen
#29087
Fehlerhafter Zugriff auf den D&D Cache im Browser
#29091
Werte eines Kompositionsattribut nicht bearbeitbar, wenn im gleichen Formular vorher verwendet
#29106
Fehler beim Restart der KnowledgeBase
#29112
Update minimatch and serialize-javascript to fix CVE-2026-27903, CVE-2026-27904, and GHSA-5c6j-r48x-rmvq
#29197
Eclipse-Fehler nach Dependency-Update: maven-jar-plugin 3.5.0 verursacht „outside of a scoping block"-Fehler in m2e

update

critical
#29110
Update dependency com.fasterxml.jackson.core:jackson-core to v2.21.1 [SECURITY]
defect

critical

#29080

Unerwünschte Zeilenobjekte in Tabellen bei Änderungen aus anderen Session

LayoutFrameworkMigrationSecurityIssue

Aufgrund der aktuellen Implementierung von receiveModelChangedEvent und receiveModelCreatedEvent in der TableComponent kann es vorkommen, dass in einer Tabelle unerwünschte Zeilenobjekte auftauchen, nachdem diese Zeilenobjekte vorher in einer anderen Session geändert oder angelegt wurden.

Dies sorgt dafür, dass Benutzer auf diese Weise Elemente zu sehen bekommen, die sie (aus Berechtigungsgründen) gar nicht sehen dürfen.

**Beispielsituation:**

  • Man hat einen Baum, der Projektelemente anzeigt.
  • Die Selektion des Baumes dient als Modell für eine Tabelle, die z.B. die Komponenten des selektierten Projektelements anzeigt.
  • Die Tabelle hat einen Editor / Dialog, in dem die in der Tabelle selektierte Komponente angezeigt wird.

**Ablauf:**

  • Benutzer 1 selektiert ein Projektelement und sieht in der Tabelle (nur) die Komponenten zum selektierten Projektelement.
  • Benutzer 2 selektiert ein anderes Projektelement, selektiert dort eine Komponente und ändert diese im Editor / Dialog.
  • Benutzer 1 aktualisiert die GUI (z.B. durch F5 oder Spaltenverschiebung in der Tabelle oder durch einen Klick innerhalb der Tabelle, ohne dadurch das Modell im Baum zu ändern.)
  • Fehler: Die von Benutzer 2 geänderte Komponente taucht plötzlich in der Tabelle von Benutzer 1 auf, obwohl diese gar nicht zu dem aktuell selektierten Projektelement gehört.
  • Eine Umselektion im Projektebaum "repariert" die Tabelle wieder, bis erneut in einer anderen Session eine Komponente geändert (oder angelegt) wird.

**Ursache:**

Das Problem liegt an der Implementierung / Konfiguration und unterschiedlichen Auslegung der Methode supportsListElement im ListModelBuilder.

  • Wird ein Element geändert oder angelegt, wird supportsListElement an der Tabelle für dieses Element aufgerufen. Falls das Element "unterstützt" wird, fügt die Tabelle dieses Element direkt der Liste der Zeilenobjekte ohne weitere Prüfungen hinzu, anstatt den ModelBuilder erneut aufzurufen.
  • In der Praxis sind die Methoden meist in der Form element instanceof MyType implementiert, wodurch jedes Objekt dieses Typs in der Liste hinzugefügt wird, unabhängig, ob diese zur Selektion des Masters passt oder zu sonstigen in ModelBuilder implementierten (fachlichen) Filtern.
  • Wird im Editor / Dialog durch ein Goto oder Bookmarklink eine Komponente als Modell gesetzt, versucht die Tabelle, diese Komponente als Selektion zu setzen und sich ein dazu passendes Model zu setzen. Hierbei wird auch supportsListElement geprüft, diesmal jedoch mit einer anderen Semantik, die genau diese übliche Implementierung von element instanceof MyType erwartet.

**Lösung:**

In den entsprechenden receive-Methoden der TableComponent muss statt addRow() ein invalidate() aufgerufen werden, so dass der ModelBuilder auf normalen Weg berechnet, welche Komponenten nach der Änderung nun dargestellt werden sollen und welche nicht.

Das Ganze muss auch bei anderen receive-Methoden implementierenden Klassen geprüft werden, z.B. TreeTableComponent, GridComponent, ...

Umsetzung

  • Wenn Objekt-Typen in der Tabelle angegeben werden, wird automatisch ein instanceOf check durchgeführt. Nur Elemente die den instanceOf check überstehen werden an die ListModelBuilder#supportsListElement-API übergeben.
  • Es wurde eine neue ElementUpdate-Konstante com.top_logic.mig.html.ElementUpdate.UNKNOWN eingeführt. Wenn diese in ListModelBuilder#supportsListElement zurückgegeben wird, dann wird die Tabelle invalidiert und die Liste neu erstellt.
  • ListModelByExpression wurde angepasst, so dass wenn kein Script supportsElement gesetzt ist, immer ElementUpdate.UNKNOWN zurückgegeben wird. Neue Tabellen/Grids werden ohne supportsElement erstellt um zu verhindern, dass der Entwickler "elements" anpasst, aber "suportsElement" vergisst.

Code-Migration

  • Wenn bei einem Objekt unklar ist, ob es in die Liste aufgenommen werden soll oder aus der Liste entfernt werden soll, muss der ListModelBuilder in ListModelBuilder#supportsListElement ElementUpdate.UNKNOWN zurückgeben.
  • InApp-Tabellen und Grids müssen überprüft werden. Wenn die Tabelle/Grid alle Objekte eines Typs anzeigt, muss "true" zurückgegeben werden. Wenn die Tabelle/Grid die Liste neu aufbauen soll, wenn ein Element des unterstützten Typs erstellt wird, muss "supportsElement" leer gelassen werden.
  • 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