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

8.0.0-alpha10
TopLogic Release

2026-10-09

enhancement

major
#29651
TL Views: Container <accordion> mit einklappbaren Abschnitten
#29652
TL Views: Hinweisbox <alert> im Inhalt einer View
#29654
TL Views: Auswahlfeld als Radio-Gruppe für beliebig viele Optionen
#29661
TL Views: Prototyp "TopLogic UI on MUI" – Adaptermodul mit Material UI für die ersetzbaren Komponenten
#29692
TL Views: Formularfelder, Tabellenzellen und das Bearbeiten eines Formulars richten sich nach den Modell-Zugriffsrechten
#29693
TL Views: Große und mehrwertige Werte erscheinen in Tabellenzellen als einzeilige Vorschau mit einem Knopf, der den vollständigen Editor in einem Dialog öffnet
#29707
Reduce PR CI build time: parallel reactor build, sharded scripted tests, affected-module builds
#29730
React-Oberfläche: Kanban-Board als View-Element (Karten per Drag & Drop zwischen Spalten verschieben)
#29735
User menu: the application cannot say what the account is called
#29741
anonymous-Benutzer soll per Default nicht in Personenauswahlfeldern auftauchen
#29744
TL Views: Entwicklerwerkzeuge (Designer, Aufzeichnen, Untersuchen, Agentenzugriff) in einem eigenen Entwicklungsmenü der App-Leiste
#29752
React-UI: Kleine Verbesserungen der Oberfläche (Snackbar, Hover, Tooltips, Schieberegler, Abstände)
#29758
ModelAccessRights: Anlegerecht in Kompositionsattribut für Spezialisierung des Zieltyps prüfen
#29759
React-UI: Commit-Nachrichten für Änderungen aus Sichten (TL-Script-Aktionen, Transaktionen, Löschen) konfigurierbar, sinnvolle Standard-Nachrichten
#29760
Improve the React UI of the model-based security configuration; let a TL-Script function determine the access parent of a type
#29765
Engine developer docs (FAQ) are not discoverable when developing an application based on the engine
minor
#29513
Drag&Drop: Commit-Nachricht für Drop-Operationen konfigurierbar, sinnvolle Standard-Nachricht
#29747
Make the LDAP configuration ldapConf.xml configurable by system properties / environment variables
#29754
OpenAPI-Server: Variablenname für Request-Parameter, deren Name kein gültiger TL-Script-Bezeichner ist (z.B. Header X-Gitea-Event)

defect

major
#29581
TopLogicServlet: Vertrag dokumentieren - eine Anfrage hat nur im Fenster einen Benutzer
#29642
React dialog size memory: one key for every dialog, stored size beats the declared width and is never clamped to the window
#29646
TL Views: Der Build der React-Client-Module prüft die TypeScript-Typen nicht, in com.top_logic.layout.react sind dadurch 29 Typfehler aufgelaufen
#29697
HistoryQuery: Start- und Stop-Revision aus HistoryQueryArguments werden bei der Suche ignoriert.
#29701
TL Views: a form shown again after its sidebar section or tab was hidden keeps the values it had when hidden; a reload renders the stale values again
#29711
Setzen einer geordneten Liste (ListStorage) ist beim Einfügen vor bestehenden Elementen überquadratisch langsam; TestListStorage misst Wanduhrzeit und scheitert unter Last
#29712
Problem beim Zurücksetzen einer Selektion im Baum
#29716
Modellbasierte Leseprüfung: Rollen-Lookup kompiliert pro Objekt und Gruppe neue KB-Abfragen, Nicht-Admin wartet 70 s statt 9 s
#29723
Model editor class diagram fails with "Comparison method violates its general contract!"
#29724
PathNavigation: abstract attribute rejected by isDerived() check even though concrete overrides exist and are tracked
#29728
FlowChartComponent: Ein Neubau des Diagramms entfernt Objekte aus der Selektion, die im Diagramm nicht dargestellt werden
#29731
TL Views: <persist-transient> copies the draft's empty values over the creation defaults; a sequence number or creation date computed at commit is lost
#29732
TL Views: <create-transient container="…"> creates the draft without the container's context; option lists and context-dependent defaults of the draft see no container
#29734
View form: <store-form-state/> does not persist new rows of a <composition-table>, so saving a persistent owner fails
#29737
TL Views: a collapsing toolbar measures its commands only when its groups change; a command that shows itself later keeps a 0 px toolbar and draws over the panel title
#29740
Fehlender Schutz für den anonymous-Benutzer
#29745
Zugriff auf ein abstraktes Attribut meldet einen Fehler, der nicht sagt, dass das Attribut abstrakt ist: eigene Storage für abstrakte Attribute
#29746
FileManagerOverlay/FileManagerDelegate cannot read resources inside web-fragment WARs (tl_config overlay fails on engine configuration files)
#29773
PostgreSQL: Große SQL-Migrationen werden durch nicht freigegebene Autosave-Savepoints quadratisch langsam
minor
#29029
Incrementally deactivated drop-down select box can still be operated
#29514
Befehlsfreigabe und Berechtigung von Drag&Drop
#29696
Scheduler: Start- und Cluster-Verhalten von Tasks bereinigen – <on-startup/> pro Knotenstart, Tasks erst ab RUNNING, run-on-startup entfernen, kein Default für isNodeLocal()
#29699
TL-Script: htmlText(htmlSource($text), images) drops the images of a stored structured text, since it does not accept the "ref:" references it writes itself
#29700
TL Views: the open session of a deleted account keeps evaluating as that account; every model event logs "DeletedObjectAccess … was already deleted" from its observers
#29722
FlowDiagram: Fehlerhafte Baum-Layout-Berechnung
#29727
TL-Script Auswertungen mit Filtern können zu "null"-Literalen führen.
#29733
TL Views: a click on the padding of the React rich-text editor's content area does not focus the editor; the typed text is lost
#29736
Click-region menu opens flush on the window edge and under the trigger's tooltip
#29738
TL Views: the menu cliques of a toolbar are labelled in English in every language ("More", "View", "Export")
#29739
React tooltip stays open at the window's top-left corner when its anchor is removed under the pointer
#29743
React UI: Tooltip eines Menüeintrags erscheint hinter dem Menü
#29753
OpenAPI-Client: NullPointerException bei Antwort ohne Body (z.B. 204) mit Status ungleich 200
#29774
OpenAPI server: API key authentication cannot resolve an account — Person.byName called without an InteractionContext

task

major
#29725
CheckDependencies: npm-Abhängigkeiten werden nicht aktualisiert, transitive Maven-Abhängigkeiten mit bekannten Sicherheitslücken
#29726
WYSIWYG-Editor: Umstellung auf Tiptap 3 (Sicherheitslücke GHSA-cp6q-959q-f8rh)
enhancement (User-visible)

major

#29693

TL Views: Große und mehrwertige Werte erscheinen in Tabellenzellen als einzeilige Vorschau mit einem Knopf, der den vollständigen Editor in einem Dialog öffnet

MigrationReactUI

In einer Tabelle der TL Views (<table>, Zellenbearbeitung) werden Werte, deren Editor im Formular viel Platz braucht, unbrauchbar dargestellt: mehrzeilige Texte, HTML (auch internationalisiert), TL-Script- und Code-Editoren, internationalisierte Texte, mehrwertige Felder, die pro Element ein Eingabefeld zeigen, und Kompositionen sprengen die Zeilenhöhe. Kompositionen werden sogar als toString() der Teil-Liste angezeigt (siehe unten).

Nach dieser Änderung zeigt eine solche Zelle nur eine einzeilige, gekürzte Vorschau des Werts (bei HTML und mehrzeiligem Text die erste Zeile; ist die Vorschau zu lang, zeigt ein Tooltip den Text):

  • Bearbeitungsmodus: die Zelle sieht aus wie ein Eingabefeld, am rechten Rand ein Stift-Knopf. Er öffnet einen Dialog mit dem Editor, der den Wert auch im Formular bearbeitet. "OK" übernimmt (ungültige Eingaben oder fehlende Pflichtwerte werden abgewiesen, der Dialog bleibt offen), "Abbrechen" verwirft.
  • Anzeigemodus: reiner Text; ein unauffälliges Auge erscheint erst beim Überfahren der Zeile (oder bei Tastaturfokus) und öffnet den vollständigen Wert schreibgeschützt. Leere Werte und mehrwertige einfache Werte (Zahlen, Daten, kurze Texte), deren Vorschau schon der ganze Wert ist, haben keinen Knopf.
  • Kompositionen: die Vorschau nennt die Teile; der Dialog zeigt die Tabelle der Teile, deren Kompositionsspalten wieder solche Zellen sind - beliebig tief verschachtelt, im Bearbeitungsmodus editierbar (Hinzufügen, Entfernen, Ändern), im Anzeigemodus schreibgeschützt. "Abbrechen" eines Dialogs verwirft auch alles, was in darin geöffneten Dialogen bestätigt wurde; gespeichert wird mit dem Speichern der Tabelle bzw. des Formulars.
  • Mehrfachauswahl-Felder (Dropdown) bleiben in der Zelle; ihre schreibgeschützte Anzeige trennt die Werte durch Kommata.

Auf dem Weg behoben:

  • Ein Attribut vom Typ tl.model.search:Expr (TL-Script) wird in Formularen und Tabellen mit dem TL-Script-Editor bearbeitet (bisher ein einfaches Textfeld); ein Syntaxfehler ist ein Eingabefehler des Felds, der Speichern verhindert, und der Editor folgt dem Bearbeitungsmodus.
  • Ein Klick auf ein bedienbares Element in einer Tabellenzelle (Knopf, Eingabefeld, Checkbox) wählt die Zeile nicht mehr aus; ein Klick auf ein schreibgeschütztes Element wählt sie weiterhin aus.
  • Eine <composition-table> ohne <columns> zeigt die Standardspalten des Teiltyps (bisher keine Datenspalten).
  • Neue Zeilen einer Kompositionstabelle mit neuen Teilen werden vollständig gespeichert (bisher wurden Werte nur eine Ebene tief kopiert und Kopierfehler stillschweigend verworfen).

Ursprünglicher Befund: Kompositionsspalte

Found on 2026-09-29 against tl-layout-view 8.0.0-alpha8, in the BOS/Consulting application (issue #347).

A <table types="..."> offers every attribute of its row type in the column chooser (Spalten), compositions included. When the user ticks a composition, each cell shows the Java toString() of the part list:

AttributedWrapper(type:consulting:Section, id: Section:7047, name: Was Giulia Ferrante erzählt hat)AttributedWrapper(type:consulting:Section, ...

and after a re-render on a thread without an interaction:

Error in toString() of 'Section:8547': java.lang.IllegalStateException: KnowledgeBase operations require a valid InteractionContext

Cause: FieldControlService#displayModel asks selectOptionSource(part), which is null for a composition on purpose (compositions are not edited through a select), so the value was wrapped in a plain AbstractFieldModel and printed by the text control.

Lösung

  • FieldSpec#isCompact(): das Feld wird auf kleinem Raum dargestellt. FieldControlService.cellSpec setzt es für bearbeitbare Zellen, FieldControlService.createDisplayControl(ReactContext, ColumnType, Object) für Anzeige-Zellen; Formulare bleiben unverändert.
  • ReactFieldControlProvider meldet über isLarge(FieldSpec), ob sein Editor mehr Platz als eine Zeile braucht, liefert über previewText(FieldSpec, Object) die einzeilige Vorschau und über isEmpty(FieldSpec, Object), ob ein Wert leer ist. Groß sind: mehrzeiliger und internationalisierter Text, Code-Editor, WYSIWYG und internationalisiertes HTML (Vorschau: erster Block mit Text, ohne das Dokument ganz zu lesen), TL-Script, Konfigurationsformulare. Die Vorschau eines Passworts zeigt nie den Wert.
  • FieldControlRegistry.createControl - die eine Stelle, an der jedes Feld-Control entsteht - ersetzt bei kompakter Darstellung ein großes Feld (oder ein mehrwertiges, das pro Element ein Eingabefeld zeigt) durch ReactCompactFieldControl, zusammengesetzt aus vorhandenen Controls. Der Dialog arbeitet über eine Editor-Sitzung (öffnen, übernehmen mit Prüfung, verwerfen); für einfache Werte bearbeitet sie eine gepufferte Kopie des Werts.
  • Kompositionen werden flach gepuffert, ebenenweise wie in der klassischen Oberfläche, aber ohne tiefe Kopien: EditLevel ist eine Bearbeitungsebene (Formular/Tabelle oder ein Dialog). Ein Dialog legt nur für die Teile, die er zeigt, Puffer an (TLObjectOverlay für bestehende, transientes Objekt für neue); "OK" schreibt die Teilliste in den Puffer der übergeordneten Ebene, "Abbrechen" verwirft die Ebene. BufferSave speichert beim Speichern nur die berührten Objekte (geänderte Attribute bestehender Teile, neue Teile einmal angelegt, entfernte Teile gelöscht). Dasselbe Verfahren gilt für die <composition-table> im Formular, editierbare Tabellen und die Dateiliste (RowSetEditSession).
  • TL-Script: TLScriptFieldControlProvider ist für den Modelltyp tl.model.search:Expr konfiguriert und liest/schreibt über dessen Storage-Mapping. Ein Java-Werttyp, den mehrere Datentypen des Modells teilen (z.B. SearchExpression für Expr, Template, Report), wird nicht mehr global für den Editor eines dieser Typen registriert.
Bekannte Grenze
  • Annotationen (AnnotationsFieldControlProvider) bleiben in der Zelle in voller Größe: ihr Editor braucht das Attribut-Feldmodell und kann nicht auf einer gepufferten Kopie arbeiten.

Demo: tl-demo-react, Seitenleiste "Attribute", Reiter "Tabelle" (Anzeige), "Editierbare Tabelle" (Bearbeiten, dann eine Zeile anklicken) und "Auswahl + Formular"; demo.react:Demo hat dazu die Attribute script und die Komposition parts, deren Teile (DemoPart) wieder Teile haben.

Migration

  • Eigene Implementierungen von com.top_logic.layout.view.form.RowSetBinding: updateMembership(FormControl, List) wird zu updateMembership(TLObject owner, List rows), commit(Transaction, FormControl, List, List) zu commit(TLObject owner, List persisted, List original). owner ist der Bearbeitungspuffer des Objekts, das die Zeilen hält (bisher form.getOverlay()); commit wird weiterhin in der speichernden Transaktion aufgerufen.
  • Anwendungen, die den Workaround für Kompositionsspalten tragen (eigener ColumnProviderService für Kompositionen, z.B. BOS/Consulting CompositionColumnProviderService mit WEB-INF/autoconf/com.top_logic.layout.view.table.ColumnProviderService.config.xml), können ihn entfernen.
  • 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