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

Enhancement

Major
#27105
Dynamic subscription to model events through UI elements
#27174
Components should subscribe to required model events
#27185
Deploy TopLogic as open source
#27189
Performance: Many requests to FLEX_DATA when deleting large numbers of subject objects
#27195
Model editor: sub-structuring of modules
#27247
Define CRUD views One-Click
#27263
Display license information for all users
#27313
Formatting of values in calculated table columns
#27321
HTML rendering templates
#27327
TL-Script: Named parameters
#27330
DropDown with tooltip
#27332
Templates for complete application views
#27339
Configure views with document folder in-app
#27351
TL-Script: Binary data support
#27378
Links with custom label
#27411
Smart Startup/Shutdown
#27431
Deploy App Archetype to MavenCentral
#27488
TL-Script: Translate functions
Detail
#23724
Close dialogs by clicking on background
#27114
TableModel: Optimized insertion of many objects
#27224
Render forms via HTML templates
#27232
Declaration of commands / buttons on dialog level
#27248
Predefine icons/cliques for buttons/dialogs with theme variables if possible
#27272
Default value via sequence for number-valued attributes
#27274
Customize object creation dialog header
#27276
Constant default value for icon attributes
#27284
Build: Influence the "build timestamp".
#27304
Collapse list entries in declarative forms
#27320
Layout XML: Use of template parameters for inner template calls
#27329
Render tooltips via HTML templates
#27333
LayoutEditor: Customize hint text for empty tile list
#27334
Make headers available for processing the response of an Open API call
#27336
TL-Script function to wait for a certain time
#27338
Missing error message when using `attribute` for references
#27347
Move declaration of ThemeVar to Icons classes
#27350
Render tables via HTML templates
#27354
Declare TabBar HTML Template
#27358
Declare ButtonComponent HTML Template
#27365
Select default selection based on the last (current) selection
#27380
Bulk deletion of subject objects
#27384
Objects form element Show as read-only
#27406
Remove modules outside tl-engine from dependency management of tl-parent-all
#27409
Declare Collapsible and DialogWindow Template
#27412
Bulk Dependency Update 2023/06
#27413
Update CKEditor to v4.21.0
#27442
Update Lucene to 8.11.2
#27452
Collapse button configurations by default
#27462
Prevent selection in the grid if the edited row has errors
#27468
Application scripting: resolve LayoutComponent's only if they are visible
#27474
Simple installation method with Docker
#27475
Update default tooltip design
#27476
InfoService new with timestamp and different CSS classes
#27494
Open form editor for viewing
#27498
Log uncaught exceptions for all explicitly started threads
#27518
Model-based expert search should use the full space
#27519
Render table footer via HTML templates
#27535
Show dual licensing in source files
#27538
Transfer documentation to the applications

Bugfix

Major
#27369
Check-Changed dialog (much) too small
#27388
No display of error text in composition tables
#27407
Selection of the grid disappears with F5
#27408
AbstractFlexDataManager logs warning when loading the same object multiple times
#27446
Incorrect license display for TopLogic modules in the license overview
#27471
In-app configuration of button columns
#27543
If no English I18N was stored for a layout, technical ID is exported
#27546
Documentation exports files with spaces at the end of the file, which Windows does not allow
Detail
#25608
The form preview differs from its production view
#25706
No export of HTML attributes to Excel possible
#26912
File upload with ScriptingRecorder from the file system not possible
#27230
Command release service: exception rule does not work
#27268
<pre>-formatted text collapses to one line in HTML fields
#27275
I18N string as name attribute returns error
#27306
Option providers still do not update calculated suggested values
#27310
Theme editor: no independent theme can be created
#27311
Theme editor: "New stylesheet" dialog looks broken
#27312
Application tests: No recording of inputs in I18N string attributes in grid possible
#27326
Memory hole: Personal configuration is not cleared properly
#27335
Document attribute error in composition table
#27340
Administration: Maintenance mode does not work properly
#27341
TL script: NPE when regular expressions evaluate to "null".
#27343
LayoutEditor: Component channel selection for dialog open buttons wrong
#27344
Unwanted inlining of properties when creating a new app
#27345
FolderComponent without model leads to errors
#27349
Disappearing design buttons in tiles
#27352
TL script: Incorrect hash code for JSON objects
#27364
Scheduler: Task execution fails with longer results
#27379
Open API Service: Query parameters of type Date do not work
#27381
Incorrect preassignment in the chart JS template
#27385
Incorrect calculation of the sort order in references
#27393
Tree - Tables: Selection of multiple row objects expands subtrees / selects wrong row
#27397
GridComponent: Row change possible in case of errors
#27400
ResKey: Missing quoting of non-primitive arguments
#27402
setting the value of an ordered association may lead to NullPointerException
#27403
Synthetic `UpdateChainLink` chain of `KBDataProducerTask` leads nowhere
#27414
ScriptingRecorder logs error while translating
#27424
"Container" for new grid line not mandatory, but hidden NPE when value is deleted
#27427
Potential NullPointerException when sorting the results of a quick search
#27429
Assertion error when setting incompatible value in ComplexField
#27430
NPE in the script recorder, when saving the script.
#27433
GanttChartExporter uses vulnerable library JTidy unnecessarily
#27434
HttpUnit uses vulnerable library JTidy
#27439
Quick search: Null pointer exception when clicking with GUI inspector on text field
#27440
Quick search: Search for phrases and terms with (Lucene) control characters does not work
#27450
Display of the "Templates" field in the form editor leads to errors
#27451
Label-For defective
#27461
Discarding not possible during DirtyHandling with multiple editors
#27463
Boolean mandatory fields no longer trivalent
#27464
User history does not update
#27478
Javascript error during window resize
#27484
Missing theme reset on "reload theme".
#27492
Unnecessary check for unsaved changes when reordering columns in the grid
#27499
Wrong position when fix. Column is dragged into flex area
#27500
Toolbar buttons do not appear multiline in table title
#27501
Tooltip of the column remains after reordering
#27502
Placeholder animation instead of table row in each table cell
#27504
Partial CSS class duplicates in table cells
#27506
Missing default icons after theme reload
#27508
Gallery attribute looks broken
#27510
Incremental TreeTable updates can destroy sort order
#27511
Configured row height of the table header is not used
#27515
Commands to start services are executable for all users with read permission to the service editor
#27516
Beacon fields display huge icon in "immutable" status in Dezent theme
#27520
Duplicate PropertyDescriptor when collecting with unordered properties
#27522
Missing key property when ConfigurationItem is overwritten
#27526
Missing consideration of the annotation ReferenceDisplay in compositions
#27529
RowClassProviders are ignored
#27533
Unnecessary execution of the "visibleButtonCount" control command
#27544
NPE when linking help pages in other help pages
Enhancement

Major

#27105

Dynamic subscription to model events through UI elements

Code migrationControlGlobalModelEventForwarderRendering

Currently, only components can react to model events. Each component receives all model events (individually). There is no way for a UI element (tl:Control) to react to a model change. The UI element depends on the component reacting to the change and updating the control's model. However, for this to happen, the component must be aware of all models represented in its context.

Enhancement

A tl:Control should be able to use a subject object directly as a model and produce a representation for it, for example. In return, the contrl should be able to react independently to changes in the represented subject object and update its representation.

New API

  • tl:FrameScope gets a method getModelScope() that returns a tl:ModelScope.
  • A tl:ModelScope provides methods to subscribe to tl:ModelChangeEvent notifications.
  • A model event receiver must implement the tl:ModelListener interface.

Code Migration

Updates for TLObjects

Components will only be notified about the creation, modification and deletion of TLObjects if they subscribe to it. For this purpose there are the following hooks in tl:LayoutComponent:

  • getObjectsToObserve(): The component is informed about changes and deletions of these objects.
  • getTypesToObserve(): The component will be informed about all instances of these types and their derivatives. (creation, modification, deletion)
  • observeAllTypes(): When a component needs to be informed about everything. This should only be used if absolutely necessary, as it creates unnecessary load.
  • All components are automatically registered as listeners for their model(getModel()). If a component has one or more TLObjects "wrapped" in its model, but the model is not simply a collection of TLObjects, then the component must override extractTLObjects(model). Otherwise, these TLObjects will not be found, the component will not be registered as a listener for them, will not get updates, will not update itself, and will display outdated data when these TLObjects are modified or deleted.
  • If a component should not be migrated, then observeAllTypes() can be overridden with return true;. Then it will be informed about everything.
  • The following methods of tl:LayoutComponent have been deprecated:
    • receiveModelCreatedEvent
    • receiveModelChangedEvent
    • receiveModelDeletedEvent
  • Use the following methods instead:
    • handleTLObjectCreations
    • handleTLObjectUpdates
    • handleTLObjectDeletions
    • notifyChange (If all three types of events should be handled in the same way).
  • The following constants in tl:ModelEventListener have been deprecated:
    • MODEL_MODIFIED
    • MODEL_CREATED
    • MODEL_DELETED
  • tl:TableComponent, tl:TreeTableComponent and tl:GridComponent must have correctly configured which types they contain. Otherwise they will no longer get model events and will not update.
  • Derivatives of TreeModelBuilder and AbstractTreeGridBuilder must override the getTypesToObserve() method if they use persistent objects in their tree.
  • GridBuilder.receiveModelCreatedEvent(...) was replaced by handleTLObjectCreations(...)
Other changes
  • If a class overrides ModelEventAdapter.receiveAnyModelEvent(...), it must be adjusted. This method is no longer called for Model Created, Modified and Deleted. But if it is needed, the three related methods must be overridden and call receiveAnyModelEvent there.
  • DynamicModelService.Config.getDefaultFactory() (i.e. Property default-factory) was removed. It was no longer used. Usages in .config.xml files must be removed.
  • The ModelEventReveiver (sic) interface was deleted.
  • MainLayout.GlobalConfig.getEventForwarderClass() (i.e. Property eventForwarderClass) was replaced by getEventForwarder().
  • The ModelEventForwarder class became an interface. In addition, several methods were removed.
  • It is no longer possible to detect if an event came from its own session. If event from own session should be handled specially, the command that causes this change must also take care of this special handling.
    • ModelEventForwarder.SENDER_IN_OTHER_SESSION has been deleted.
    • ExpressionSelectorComponent.isFromOwnSession(...) has been deleted.
  • TreeTableComponent.getQualifiedTypeNames() has been replaced by getTypes().
  • The following methods were removed:
    • MainLayout.doBroadcastModelEvent(LayoutComponent, Object, Object, int)
    • TLMainLayout.broadcastEvent(Collection, Object, LayoutComponent, int)
    • TLMainLayout.doBroadcastModelEvent(LayoutComponent, Object, Object, int)
  • The com.top_logic.layout.component.model.ModelChangeEvent class has been deprecated. Instead, com.top_logic.model.listen.ModelChangeEvent should be used.

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
  • DE
  • Login