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

8.0.0-alpha11
TopLogic Release

2026-10-20

enhancement

major
#29659
TL Views: Popover-Element mit beliebigem Inhalt an einer auslösenden Schaltfläche
#29713
TL Views: a user cannot hide a tile of a <dashboard> and add it again later
#29755
React-UI: Auswahl in Objektlisten (<object-list selection>) – Karten direkt anwählbar
#29756
React view table: Excel export (parity with classic TableComponent) and generic download view action
#29757
React view table: show row count (total / filtered / selected) like the classic table
#29776
TL Views: Einheitliches Drag & Drop für Tabellen, Baum-Tabellen, Bäume und Kanban-Boards mit mehreren Drop-Operationen, Drop-Positionen und Drag-Arten
#29782
Concept: Discover right for the model based security (filtered object sources, masked form fields)
#29785
OpenAPI server: request bodies are not validated against the declared schema
#29786
MUI: Avatar (TLAvatar) mit Material UI darstellen
#29787
React UI: Atomare Bausteine (Schaltflächen, Menü-Auslöser, Checkboxen, Eingabefelder, Chips, …) sehen überall gleich aus und lassen sich durch eine Komponentenbibliothek (z.B. Material UI) ersetzen
#29797
XML import into existing data: resolve IDs against existing objects, skip known subtrees, optional references, language and variables from the input
#29799
Form dependencies: derived fields do not follow edited values; Java script functions cannot report what they read to the ScriptTracer
#29811
TL Views: a <button> ignores the display mode of its command and always shows icon and label
#29812
TL Views: a table column declares its own comparator; enumeration columns follow the enumeration's order
#29814
TL Views: no supported way for a server-side background source (a bus listener) to push a channel value into a view; only <start-job> does it through internal API
#29815
TL Views table: no per-row CSS class (a row cannot be marked as changed, stale or own)
#29816
TL Views table: a <computed-column> cannot be hidden by default (shown only through the column chooser)
#29821
Design System wave 3b: table, tree, column selection and text read the design system package
#29825
Design System: column selection of the React table – grouping as one select, checkbox first, visible and hidden columns apart
#29829
TL Views: Beschreibbarer Kanal, der aus anderen Kanälen vorbelegt wird
#29830
Transaction monitor: Select a time range or a revision range instead of a single day.
#29836
Design System wave 4a: dialog, window, drawer, snackbar and notice bar read the design system package
#29840
Persistent object wrapper hierarchy: remove dead and duplicated code, move stateless behavior into interface defaults, replace class identity checks
#29849
Configuration: an encrypted property value that is not a valid encrypted value is silently "decrypted" to garbage instead of being rejected
#29854
PowerPoint-Präsentationen aus TL-Script erzeugen: deklarative Folienbausteine, Export in eine Firmenvorlage, Analyse von Vorlagen
#29858
Privileged TL-Script functions: authorize a configured script as a whole by a command group on a computed security object
#29859
React-Einfachauswahl: Die aktuell gewählte Option fehlt in der Optionsliste
#29866
Design System wave 4b: app shell, app bar, sidebar and bottom bar read the design system package
#29870
Design System wave 4c: layout containers read the design system package
#29907
Entwicklerkommandos und Skript-Rekorder außerhalb des Produktivmodus für alle Benutzer
minor
#28605
Möglichkeit zum Download eines aufgezeichneten Skripts
#28995
Spaltenfilter sollte Comparator der Spalte bei Sortierung der Optionen berücksichtigen
#29801
TL Views: the split of <adaptive-detail> is configurable (size, unit, min-size on <selector> and <detail>; drawer width as drawer-size)
#29805
TL Views: a <value-input> is declared like a model attribute (mandatory, annotations) - a mandatory enumeration input offers no "no value" option

defect

critical
#29784
OpenAPI server: basic authentication of a technical user accepts an empty password when the configured password is empty (e.g. unset environment variable)
#29823
HistoryCompaction: Löschen von REVISION/REVISION_XREF und Umschreiben der Revisionsbereiche in je einer Transaktion lässt die Datenbank explodieren
major
#29580
RowSourceObserver: a disposed observer is still notified and throws NPE (_scope null) from DerivedViewChannel and GlobalModelEventForwarder
#29783
TLScriptFunctions: a script function is bound to an arbitrary overload of the same name, including a private one
#29788
Configuration: the error for an undecodable encrypted property echoes the value (e.g. a plain-text password) into the log
#29789
tl:generate-java fails on the first build after a TopLogic version change: it neither resolves the engine web fragments nor reads the project's own model sources
#29791
TL Views table: the row activation button runs the activation command without selecting its row, so commands reading the selection channel see another row (wrong breadcrumb label)
#29792
TL Views: a closed dialog (and a left tile-stack frame) stays visible for 1 s unless the application ships its own exit animation - move the demo's animations into the engine
#29800
Model patch of an existing database fails when a class gains a generalization and overrides its attributes in the same change
#29806
WrapperGenerator: every top-level class of a module with a singleton extends StructuredElement (regression of #26716)
#29807
WrapperGenerator: classifier constants of two enumerations collide, the generated factory does not compile
#29808
TL Views: the <on-submit> command of a text or number <value-input> runs on Enter only, not when the field is left with a changed value
#29810
TL Views: the selection channel of a <tree> keeps an object deleted in another view, and scripts over it fail
#29813
TL Views: a <tree> does not react to a change of an object it does not display yet, so a node that becomes a child of a shown node does not appear
#29822
CompactHistoryTask: Wartungsfenster bleibt nach dem Lauf aktiv, Task-Ende geht im Neustart der Persistenzschicht verloren
#29824
TL Views table: "Standard wiederherstellen" in the column selection drops a declared group-by (and does not restore the declared sort)
#29837
TestCompileJSPs modifies the module's source webapp and breaks concurrently running scripted tests of the same module
#29838
ClusterManager: a database connection that failed in a cluster transaction is returned to the pool and keeps failing every refetch
#29846
Changing the type of a column with content fails on Oracle (ORA-01439) and of an indexed column on MS SQL Server
#29848
ReportQueueTest.testAddJob fails sporadically: the queue thread may process the job before the test checks that it is queued
#29871
TestZipper.testEmptyFolder fails depending on the order in which the file system lists a folder
#29878
React UI does not react behind a proxy that buffers or refuses the window event stream
minor
#29766
TL-Script add() wirft UnsupportedOperationException bei Multi-Referenz auf transientem Objekt
#29804
XML import: line and column of a message location are formatted with a thousands separator ("line 4,433")
#29809
TL Views: a <value-input type="tl.core:Binary"> shows the file name as text instead of the binary field (no upload, no download)

task

minor
#29790
Upgrade guide 7.11 to 8.0: add the Maven >= 3.8.9 requirement, state that 7.10.x applications can follow it, and point to it from the release notes
#29793
Developer docs: recipe for an application-defined primitive type whose display depends on the owning object (custom datatype, value class, type-level storage, label provider, input control)
enhancement (Nutzer-sichtbar)

major

#29776

TL Views: Einheitliches Drag & Drop für Tabellen, Baum-Tabellen, Bäume und Kanban-Boards mit mehreren Drop-Operationen, Drop-Positionen und Drag-Arten

MigrationReactUI

Kontext

In der React-Oberfläche (.view.xml-Schicht, com.top_logic.layout.view / com.top_logic.layout.react) ließen sich Objekte bisher nur zwischen Tabellen und auf Kanban-Boards ziehen. Bäume unterstützten Drag & Drop nicht, Baum-Tabellen ließen sich in einer View nicht konfigurieren, und eine Tabelle mit mehreren Drop-Operationen konnte nicht unterscheiden, ob ein Objekt zwischen zwei Zeilen eingefügt oder auf eine Zeile fallen gelassen wird.

Drag & Drop ist jetzt für alle listen- und baumartigen Komponenten der React-Oberfläche einheitlich – Tabelle, Baum-Tabelle, Baum und Kanban-Board:

  • Auf einem Ziel können mehrere Drop-Operationen konfiguriert werden, die sich nach der Art der gezogenen Daten und nach der Drop-Position unterscheiden.
  • Während des Ziehens sieht der Anwender genau die Markierung (Einfügelinie zwischen Zeilen/Knoten oder hervorgehobene Zeile/Knoten) der Operation, die beim Loslassen ausgeführt wird, bzw. den Grund, warum nicht abgelegt werden kann.
  • Objekte lassen sich zwischen allen diesen Komponenten in beide Richtungen ziehen.

Die klassische Oberfläche bleibt unverändert. Das entsprechende Problem dort ist in #29515 beschrieben.

Konfiguration

Drag-Art

  • <drag kind="…">: optionaler, frei gewählter Name für die Art des Drags (z. B. ticket). Ohne Angabe hat der Drag keine Art.
  • <drop accept="k1, k2">: optionale Liste von Arten. Leer nimmt jeden Drag an (mit oder ohne Art), sonst nur Drags einer der genannten Arten. Der Client prüft die Art bereits beim Überfahren.
  • Einschränkungen nach Modelltyp der gezogenen Objekte werden mit refuse-if formuliert.

Drop-Art (target)

Element target Bedeutung refuse-if Kanäle
<table> table auf die Tabelle als Ganzes objects -> target -> reason (target = null) target-channel
<table> row auf eine Zeile objects -> target -> reason target-channel
<table> ordered zwischen die Zeilen (Einfügelinie); neben den Zeilen = am Ende objects -> before -> reason before-channel
<tree> tree / node / ordered wie oben; ordered = zwischen Geschwister oder als Kind objects -> parent -> before -> reason (ordered) parent-channel, before-channel
<tree-table> table / row / ordered wie beim Baum wie beim Baum wie beim Baum

Die gezogenen Objekte sind immer das erste Argument; ein Skript mit weniger Parametern ignoriert die übrigen (objects -> reason genügt, wenn die Referenzen nicht gebraucht werden). before ist das Objekt, vor dem eingefügt wird (null = am Ende bzw. als letztes Kind), parent der Elternknoten. Falsch platzierte Optionen (z. B. target-channel bei ordered, parent-channel in einer flachen Tabelle, target-executability außerhalb von row/`node`) sind Konfigurationsfehler.

Auswahl der Operation

Der Client teilt eine Zeile bzw. einen Knoten je nach den angebotenen Drop-Arten in Zonen: flache Tabelle nur geordnet → Hälften, nur „auf Zeile“ → ganze Zeile, beides → Drittel; Baum und Baum-Tabelle mit geordnetem Drop → Drittel (oberhalb / innerhalb / unterhalb). Der Server geht die Drop-Operationen in der deklarierten Reihenfolge durch (Art → Position für die Drop-Art der Operation → Ausführbarkeit / refuse-if); die erste, die annimmt, wird angezeigt und beim Ablegen ausgeführt. Baum-Zonen: oberhalb von X → (Eltern von X, X); innerhalb von X → (X, erstes Kind); unterhalb von X → (Eltern von X, nächstes Geschwister) bzw. bei aufgeklapptem X → (X, erstes Kind).

Baum-Tabelle

Neues Element <tree-table>: Wurzel und Kinder-Funktion wie bei <tree> (root, children, parents, observed-types), Spalten, Auswahl, Filter, Presets und Personalisierung wie bei <table>, Drag & Drop wie oben.

Technische Umsetzung

  • com.top_logic.layout.react.control.dnd: DragSourceControl#dragKind() / isDragEnabled(), DropTarget#acceptedKinds() (AcceptedKinds) und #dropModes(), DropMode (CONTROL/ONTO/ORDERED), DropZone, DropLocation (Control, Onto, Insert(parent, before)), DropRequest, DropVerdict.accepted(location), DropMarker, DropPlace, TreeDropPlace über DropTreeNavigation (gemeinsame Baum-Regeln für Baum und Baum-Tabelle). DropSupport bündelt Probe, Drop, Aufzeichnung und Wiedergabe (aufgezeichnet wird die gewählte Drop-Art mit ihren Referenzobjekten). DropPosition entfällt.
  • ReactTreeControl / TLTreeView: auf die gemeinsame Schicht umgestellt; das bisherige eigene Protokoll und die Abhängigkeit von TreeDropTarget entfallen.
  • TableViewControl im Baum-Modus: Baum-Zonen und -Positionen über RowHierarchy (TreeRowSource).
  • View-Schicht: DropReference / DropSignature legen pro Drop-Art die Referenzobjekte (Kanäle und refuse-if-Argumente nach den gezogenen Objekten) fest. AbstractTableElement (gemeinsame Basis von <table> und <tree-table>), TreeStructureConfig / TreeFunctions (gemeinsam für <tree> und <tree-table>).
  • Dokumentation: view-layer/tables.md (Tabelle und Baum), view-layer/tree-tables.md.

Prüfung

  • Demo com.top_logic.demo.react: Demos → Drag and Drop (dnd-demo.view.xml, Modell demo.dnd) mit Notiz-Palette, Liste, Baum, Baum-Tabelle und Kanban-Board; Knoten werden zwischen allen Komponenten verschoben, Notizen auf Knoten abgelegt, das Board setzt die Spalte; Verschieben eines Knotens in sich selbst wird mit Begründung abgelehnt.
  • Tests: TestTableViewDragDrop, TestTableViewTreeDragDrop, TestReactTreeControlDragDrop, TestDropBinding, TestTableElementDragDrop, TestTreeElementDragDrop, TestTreeTableElement, TestKanbanBoardDragDrop.

Migration

  • <drag type="modul:Typ"> gibt es nicht mehr: durch <drag kind="…"> mit einem frei gewählten Namen ersetzen.
  • <drop accept="…"> nennt keine Modelltypen mehr, sondern Drag-Arten: accept="modul:Typ" durch die Art der passenden <drag kind> ersetzen (oder accept weglassen, um jeden Drag anzunehmen). Eine Einschränkung auf einen Modelltyp (bisher inkl. Untertypen) wird in refuse-if formuliert, z. B. objects -> !$objects.filter(o -> !$o.instanceOf(`modul:Typ)).isEmpty()`.
  • refuse-if erhält die gezogenen Objekte als erstes Argument: target -> objects -> … wird zu objects -> target -> ….
  • Mehrere <drop> an einem Element werden in deklarierter Reihenfolge geprüft (bisher: Zeilen-Drops vor Tabellen-Drops). Bei gemischten Drops ggf. die Reihenfolge anpassen.
  • Java: DropTarget#dropOnRows() → dropModes(), acceptedTypes() → acceptedKinds(), check(DropEvent) → check(DropRequest), DragSourceControl#dragType() → dragKind()/`isDragEnabled(), `DropEvent trägt eine DropLocation statt Ziel und DropPosition.
  • 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