enhancement
major
#29756
React view table: Excel export (parity with classic TableComponent) and generic download view action
#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)
#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
#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
#29816
TL Views table: a <computed-column> cannot be hidden by default (shown only through the column chooser)
#29825
Design System: column selection of the React table – grouping as one select, checkbox first, visible and hidden columns apart
#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
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
enhancement
(Nutzer-sichtbar)
Problem
A <dashboard> (DashboardElement) shows every configured <tile>. The only personal part of it is the tile order: in the layout edit mode a user drags the tiles, and the order is stored in the PersonalConfiguration under dashboard.tileOrder.<id>. A user who has no use for a tile cannot remove it from their own dashboard. Every user sees every tile, however many there are.
Example: the TL Development app's landing page "My work" (my-work.view.xml) is a dashboard of five ticket and milestone tiles: assigned to me, reported by me, due and overdue, recently changed, next milestones. Someone who never reports tickets still gets the empty "Reported by me" tile on every visit.
Expected
- In the layout edit mode each tile offers a command that hides it. The dashboard then lays out without it.
- The edit mode also offers the configured tiles the user has hidden, by their titles, and adds a chosen one back. A configured tile is never lost to the user: hidden tiles are the configured ones not displayed, not a separate list.
- The visible set is personal and persisted beside the order, so a hidden tile stays hidden in the next session. A tile added to the configuration later appears for every user, as a tile missing from the stored order does today. A stored id that names no configured tile any more is ignored.
- The anonymous session gets neither command, just as it gets no reordering today: all anonymous visitors share one account.
- The configuration can mark a tile as hidden until the user adds it (optional tiles), so a dashboard can offer more tiles than it shows by default.
Lösung
- Ausblenden: Im Layout-Bearbeitungsmodus zeigt jede Kachel oben rechts eine Schaltfläche "Kachel ausblenden" (×). Sie sendet das Kommando hide an ReactDashboardControl, das die Kachel aus der Darstellung nimmt und die neue Sichtbarkeit meldet. Ausgeblendete Kacheln behalten ihren Platz in der gespeicherten Reihenfolge.
- Wieder hinzufügen: DashboardElement trägt je Kachel ein Kommando in den umgebenden CommandScope ein, beschriftet mit dem Titel der Kachel, in der Clique dashboardTiles. Diese ist im CommandCliqueService (tl-layout-view.conf.config.xml) als Menü "Kachel hinzufügen" konfiguriert. Ein Kommando ist nur im Bearbeitungsmodus und nur bei ausgeblendeter Kachel sichtbar - das Menü enthält genau die ausgeblendeten konfigurierten Kacheln.
- Werkzeugleiste: Ein Menü der Werkzeugleiste, dessen Einträge alle unsichtbar sind, zeigt keinen Auslöser mehr (bisher öffnete er ein leeres Menü; betraf auch die Cliquen view und export). Der Client liest dazu den Live-Zustand der Menüeinträge (useChildStates).
- Titel einer Kachel: optionales label am <tile>, sonst der Titel des Inhalts (TitledElement, z.B. <panel>, <card>), sonst die Kachel-ID.
- Optionale Kacheln: <tile optional="true"> ist ausgeblendet, bis der Anwender sie hinzufügt.
- Persistenz: JSON-Map dashboard.tileVisibility.<id> (Kachel-ID -> sichtbar) in der PersonalConfiguration, nur für Abweichungen vom Default. Kacheln ohne Eintrag folgen ihrem Default (sichtbar, außer optional), unbekannte IDs werden ignoriert, nicht zugängliche Kacheln werden nie angeboten.
- Anonyme Sitzung: kein Bearbeitungsmodus, daher weder Ausblenden noch Hinzufügen.
- Inhalt und Aktion einer Kachel werden erst erzeugt, wenn die Kachel zum ersten Mal angezeigt wird.
- Demo: Die Übersicht in tl-demo-react (browse.view.xml) hat eine optionale Kachel "Ergebnis" (Umsatz - Kosten).