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

7.6.0
TopLogic Release

2023-09-15

Verbesserung

Wichtig
#27105
Dynamisches Abonnieren von Modell-Events durch UI-Elemente
#27174
Komponenten sollen benötigte Model Events abonnieren
#27185
TopLogic als Open-Source bereitstellen
#27189
Performance: Viele Anfragen an FLEX_DATA beim Löschen großer Mengen von Fachobjekten
#27195
Modell-Editor: Unter-Strukturierung von Modulen
#27247
CRUD-Sichten One-Click definieren
#27263
Anzeige von Lizenzinformationen für alle Nutzer
#27313
Formattierung von Werten in berechneten Tabellenspalten
#27321
HTML-Rendering-Templates
#27327
TL-Script: Benannte Parameter
#27330
DropDown mit Tooltip
#27332
Templates für komplette Anwendungssichten
#27339
Sichten mit Dokumentenordner in-app konfigurieren
#27351
TL-Script: Unterstützung für Binary-Data
#27378
Links mit benutzerdefiniertem Label
#27411
Smart Startup/Shutdown
#27431
App-Archetype nach MavenCentral deployen
#27488
TL-Script: Funktionen zum Übersetzen
Detail
#23724
Dialoge durch Klick auf Hintergrund schließen
#27114
TableModel: Optimiertes Einfügen vieler Objekte
#27224
Formulare über HTML-Templates rendern
#27232
Deklaration von Kommandos / Buttons auf Dialogebene
#27248
Icons/Cliques für Knöpfe/Dialoge wenn möglich mit Theme-Variablen vorbelegen
#27272
Standardwert über Sequenz für zahlenwertige Attribute
#27274
Header von Objektanlagedialog customizen
#27276
Konstanter Standard-Wert für Icon-Attribute
#27284
Build: Einfluss auf den "Build-Timestamp" nehmen
#27304
Listeinträge in deklarativen Formularen zuklappen
#27320
Layout-XML: Nutzung von Template-Parametern bei inneren Templateaufrufen
#27329
Tooltips über HTML Templates rendern
#27333
LayoutEditor: Hinweistext bei leerer Kachelliste anpassen
#27334
Header für Bearbeitung der Antwort eines Open-API Call verfügbar machen
#27336
TL-Script Funktion um eine gewisse Zeit zu warten
#27338
Fehlende Fehlermeldung bei Verwendung von `attribute` bei Referenzen
#27347
Deklaration von ThemeVar in Icons Klassen verschieben
#27350
Tabellen über HTML Templates rendern
#27354
TabBar HTML Template deklarieren
#27358
ButtonComponent HTML Template deklarieren
#27365
Default-Selektion basierend auf der letzten (aktuellen) Selektion wählen
#27380
Bulk-Löschung von Fachobjekten
#27384
Formularelement "Objekte": Als Nur-Lesen anzeigen
#27406
Module außerhalb von tl-engine aus Dependency-Management von tl-parent-all entfernen
#27409
Collapsible und DialogWindow Template deklarieren
#27412
Bulk-Dependency-Update 2023/06
#27413
CKEditor auf v4.21.0 updaten
#27442
Lucene aktualisieren auf 8.11.2
#27452
Button-Konfigurationen standardmäßig zusammenklappen
#27462
Selektion in der Grid verhindern wenn die bearbeitete Zeile Fehler hat
#27468
Application-Scripting: LayoutComponent's nur aufgelösen wenn sie sichtbar sind
#27474
Einfache Installationsmethode mit Docker
#27475
Standard Tooltip Design aktualisieren
#27476
InfoService neu mit Zeitstempel und unterschiedlichen CSS Klassen
#27494
Formulareditor zur Ansicht öffnen
#27498
Bei allen explizit gestarteten Threads ungefangene Exceptions loggen
#27518
Modellbasierte Expertensuche soll den vollen Platz benutzen
#27519
Tabellen-Footer über HTML Templates rendern
#27535
Dual-Lizensierung in Source-Files anzeigen
#27538
Dokumentation in die Anwendungen übernehmen

Fehlerbehebung

Wichtig
#27369
Check-Changed-Dialog (viel) zu klein
#27388
Keine Anzeige des Fehlertextes in Kompositionstabellen
#27407
Selektion der Grid verschwindet bei F5
#27408
AbstractFlexDataManager loggt Warnung beim mehrfachen Laden des selben Objektes
#27446
Falsche Lizenzanzeige für die TopLogic-Module in der Lizenzübersicht
#27471
In-app Konfiguration von Button-Spalten
#27543
Wenn für ein Layout keine englische I18N hinterlegt wurde, wird technische ID exportiert
#27546
Dokumentation exportiert Dateien mit Leerzeichen am Dateiende, was Windows nicht erlaubt
Detail
#25608
Die Formular-Preview unterscheidet sich von ihrer Produktivsicht
#25706
Kein Export von HTML-Attributen nach Excel möglich
#26912
Datei-Upload mit ScriptingRecorder aus dem Dateisystem nicht möglich
#27230
Befehlsfreigabedienst: Ausnahmeregel funktioniert nicht
#27268
<pre>-formattierter Text kollabiert in HTML-Feldern zu einer Zeile
#27275
I18N-String als Namensattribut liefert Fehler
#27306
Optionprovider aktualisieren berechnete Wertvorschläge weiterhin nicht
#27310
Theme-Editor: Es kann kein unabhängiges Theme erstellt werden
#27311
Theme-Editor: Dialog "Neues Stylesheet" sieht defekt aus
#27312
Applikationstests: Keine Aufzeichnung von Eingaben in I18N-String-Attributen in Grid möglich
#27326
Speicherloch: Persönliche Konfiguration wird nicht richtig abgeräumt
#27335
Fehler bei Dokumentenattribut in Kompositionstabelle
#27340
Administration: Wartungsmodus funktioniert nicht richtig
#27341
TL-Script: NPE, wenn reguläre Ausdrücke auf "null" ausgewertet werden
#27343
LayoutEditor: Komponenten-Kanal-Auswahl für Dialog-Öffner-Buttons falsch
#27344
Unerwünschtes Inlinen von Properties beim Erstellen einer neuen App
#27345
FolderComponent ohne Modell führt zu Fehlern
#27349
Verschwindene Design-Knöpfe in Kacheln
#27352
TL-Script: Falscher Hash-Code für JSON-Objekte
#27364
Scheduler: Task-Ausführung schlägt bei längeren Ergebnissen fehl
#27379
Open API Service: Abfrageparameter vom Typ Datum funktionieren nicht
#27381
Fehlerhafte Vorbelegung im Chart-JS Template
#27385
Fehlerhafte Berechnung der Sort-Order in Referenzen
#27393
Baum - Tabellen: Selektion von mehrfach vorkommenden Zeilenobjekten expandiert Teilbäume / wählt falsche Zeile
#27397
GridComponent: Zeilenwechsel bei Fehlern möglich
#27400
ResKey: Fehlendes Quoting von nicht-primitiven Argumenten
#27402
Setzen des Wertes einer geordneten Assoziation führt ggfs. zu NullPointerException
#27403
Synthetische `UpdateChainLink`-Kette des `KBDataProducerTask`führt ins nichts
#27414
ScriptingRecorder loggt Error beim Übersetzen
#27424
"Container" für neue Grid-Zeile nicht mandatory, aber versteckte NPE, wenn Wert gelöscht wird
#27427
Potentielle NullPointerException beim Sortieren der Ergebnisse der Schnellsuche
#27429
Assertion-Error, wenn man inkompatiblen Wert in ComplexField setzt
#27430
NPE im Script-Recorder, beim Speichern des Scripts
#27433
GanttChartExporter nutzt verwundbare Bibliothek JTidy unnötigerweise
#27434
HttpUnit nutzt verwundbare Bibliothek JTidy
#27439
Schnellsuche: Nullpointer Exception bei Klick mit GUI Inspektor auf Textfeld
#27440
Schnellsuche: Suche nach Phrasen und Termen mit (Lucene-) Steuerzeichen funktioniert nicht
#27450
Anzeige des "Vorlagen" Feldes im Formulareditor führt zu Fehlern
#27451
Label-For defekt
#27461
Verwerfen beim DirtyHandling mit mehreren Editoren nicht möglich
#27463
Boolean-Mandatory-Felder nicht mehr dreiwertig
#27464
Benutzerhistorie aktualisiert sich nicht
#27478
Javascriptfehler beim Window-Resize
#27484
Fehlendes Theme-Reset bei "Theme neuladen"
#27492
Unnötige Prüfung auf ungespeicherte Änderungen beim Umsortieren der Spalten in der Grid
#27499
Falsche Position wenn fix. Spalte in flex-Bereich gedraggt wird
#27500
Toolbar-Buttons nicht mehrzeilig im Tabellentitel darstellen
#27501
Tooltip der Spalte bleibt nach Umordnung weiter bestehen
#27502
Placeholder Animation statt Tabellenzeile in jeder Tabellenzelle
#27504
Teilweise CSS-Klassenduplikate in Tabellenzellen
#27506
Fehlende Default-Icons nach Theme-Reload
#27508
Galerie Attribut sieht kaputt aus
#27510
Inkrementelle TreeTable Updates können Sortierung zerstören
#27511
Konfigurierte Zeilenhöhe des Tabellenheaders wird nicht benutzt
#27515
Kommandos zum Starten von Services sind für alle Nutzer mit Lese-Berechtignung auf den Service-Editor ausführbar
#27516
Beacon Felder zeigen im Status "immutable" im Dezent Theme riesiges Icon an
#27520
Doppelte PropertyDescriptor beim collect mit "unordered properties"
#27522
Fehlendes Key-Property bei Überschreibung von ConfigurationItem
#27526
Fehlende Berücksichtigung der Annotation ReferenceDisplay in Kompositionen
#27529
RowClassProvider werden ignoriert
#27533
Unnötige Ausführung des Control-Kommandos "visibleButtonCount"
#27544
NPE beim Verlinken von Hilfeseiten in anderen Hilfeseiten
Verbesserung

Wichtig

#27105

Dynamisches Abonnieren von Modell-Events durch UI-Elemente

Code-MigrationControlGlobalModelEventForwarderRendering

Aktuell können nur Komponenten auf Modell-Events reagieren. Dabei erhält jede Komponente alle Modell-Events (einzeln). Es gibt keine Möglichkeit, wie ein UI-Element (tl:Control) auf eine Modell-Änderung reagieren kann. Das UI-Element ist davon abhängig, dass die Komponente auf die Änderung reagiert und das Modell des Controls aktualisiert. Dafür muss die Komponente aber alle in ihrem Kontext dargestellten Modelle kennen.

Verbesserung

Ein tl:Control soll ein Fachobjekt direkt als Modell verwenden können und z.B. eine Darstellung dafür produzieren. Im Gegenzug soll das Contrl in der Lage sein, selbstständig auf Änderungen an dem dargestellten Fachobjekt zu reagieren und seine Darstellung zu aktualisieren.

Neue API

  • tl:FrameScope erhält eine Methode getModelScope(), die einen tl:ModelScope liefert.
  • Ein tl:ModelScope stellt Methoden zur Verfügung um tl:ModelChangeEvent Benachrichtigungen zu abonieren.
  • Ein Empfänger von Modell-Events muss das Interface tl:ModelListener implementieren.

Code Migration

Updates für TLObjects

Komponenten werden nur noch über das Erstellen, Ändern und Löschen von TLObjects informiert, wenn sie das abonnieren. Dazu gibt es folgende Hooks in tl:LayoutComponent:

  • getObjectsToObserve(): Die Komponente wird über Änderungen und Löschungen dieser Objekte informiert.
  • getTypesToObserve(): Die Komponente wird über alle Instanzen dieser Typen und deren Ableitungen informiert. (Erstellung, Änderung, Löschung)
  • observeAllTypes(): Wenn eine Komponente über alles informiert werden muss. Das sollte nur benutzt werden, wenn es unbedingt notwendig ist, da es unnötige Last erzeugt.
  • Alle Komponenten werden automatisch für ihr Modell (getModel()) als Listener registriert. Wenn eine Komponente in ihrem Modell ein oder mehrere TLObjects "eingepackt" hat, aber das Modell ist nicht einfach eine Collection von TLObjects, dann muss die Komponente extractTLObjects(model) überschreiben. Sonst werden diese TLObjects nicht gefunden, die Komponente wird nicht als Listener dafür registriert, bekommt keine Updates, aktualisiert sich nicht, und zeigt veraltete Daten an, wenn diese TLObjects geändert oder gelöscht werden.
  • Soll eine Komponente nicht migriert werden, dann kann observeAllTypes() mit return true; überschrieben werden. Dann wird sie über alles informiert.
  • Die folgenden Methoden von tl:LayoutComponent wurden deprecated:
    • receiveModelCreatedEvent
    • receiveModelChangedEvent
    • receiveModelDeletedEvent
  • Statt dessen die folgenden Methoden verwenden:
    • handleTLObjectCreations
    • handleTLObjectUpdates
    • handleTLObjectDeletions
    • notifyChange (Falls alle drei Arten von Events gleichartig behandelt werden sollen.)
  • Die folgenden Konstanten in tl:ModelEventListener wurden deprecated:
    • MODEL_MODIFIED
    • MODEL_CREATED
    • MODEL_DELETED
  • tl:TableComponent, tl:TreeTableComponent und tl:GridComponent müssen korrekt konfiguriert haben, welche Typen sie enthalten. Sonst bekommen sie keine Modell Events mehr und aktualisieren sich nicht.
  • Ableitungen von TreeModelBuilder und AbstractTreeGridBuilder müssen die Methode getTypesToObserve() überschreiben, wenn sie persistente Objekte in ihrem Baum verwenden.
  • GridBuilder.receiveModelCreatedEvent(...) wurde durch handleTLObjectCreations(...) ersetzt
Weitere Umstellungen
  • Wenn eine Klasse ModelEventAdapter.receiveAnyModelEvent(...) überschreibt, muss sie angepasst werden. Diese Methode wird nicht mehr für Model Created, Modified und Deleted aufgerufen. Wenn das aber benötigt wird, müssen die drei dazugehörigen Methoden überschrieben werden und dort receiveAnyModelEvent aufrufen.
  • DynamicModelService.Config.getDefaultFactory() (also Property default-factory) wurde entfernt. Es wurde nicht mehr verwendet. Verwendungen in .config.xml Dateien müssen entfernt werden.
  • Das Interface ModelEventReveiver (sic) wurde gelöscht.
  • MainLayout.GlobalConfig.getEventForwarderClass() (also Property eventForwarderClass) wurde durch getEventForwarder() ersetzt.
  • Die Klasse ModelEventForwarder wurde zu einem Interface. Außerdem wurden etliche Methoden entfernt.
  • Es ist nicht mehr möglich zu erkennen, ob ein Event aus der eigenen Session kam. Wenn Event aus der eigenen Session besonders behandelt werden sollen, muss das Kommando, das diese Änderung verursacht, sich auch um diese Sonderbehandlung kümmern.
    • ModelEventForwarder.SENDER_IN_OTHER_SESSION wurde gelöscht.
    • ExpressionSelectorComponent.isFromOwnSession(...) wurde gelöscht.
  • TreeTableComponent.getQualifiedTypeNames() wurde durch getTypes() ersetzt.
  • Folgende Methoden wurden entfernt:
    • MainLayout.doBroadcastModelEvent(LayoutComponent, Object, Object, int)
    • TLMainLayout.broadcastEvent(Collection, Object, LayoutComponent, int)
    • TLMainLayout.doBroadcastModelEvent(LayoutComponent, Object, Object, int)
  • Die Klasse com.top_logic.layout.component.model.ModelChangeEvent wurde deprecated. Statt dessen soll com.top_logic.model.listen.ModelChangeEvent verwendet werden.

Test

  • test.com.top_logic.mig.html.layout.TestGlobalModelEventForwarder
  • 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