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

7.2.0
TopLogic Release

2020-07-31

Enhancement

Critical
#22685
PostgreSQL support
#23383
Form Editor
#23471
Context menu
#23854
Theme editor
#24071
Theme "discreet
#24085
Create new views in the application
#24188
TL Script Editor with Context Help
#24863
Model export to the development environment
#24926
JavaDoc for Top-Logic
#24936
Translation service
Major
#23468
Grid: Unification of selection behavior
#23469
File upload via drag&drop directly from the client's file system
#23470
Grid: merging filter and sort buttons in column header
#23681
Tables: Evaluation row
#23912
Control rendering via templates
#23962
XML editor with syntax highlighting
#24044
Replace hardcoded icon references with theme variables
#24122
Create ConfigurationDescriptor from XML file
#24158
Themes export and import
#24255
Allow sending emails that have recipients only in CC or BCC
#24375
Simplify the "Document lock" function.
#24377
Comment field for documents
#24378
Persistence of settings in selection dialogs
#24461
Optimized Jetty Startup in the IDE
#24464
Simplified layout templates with calculated alias variables
#24499
TL script: Count function
#24540
Create values for composite attributes inline
#24620
Migration: Rewriter that transforms attribute with XSL
#24679
Representation of foreign objects in BPE
#24701
Transferring specialist definitions to BPE Ex/Importer
#24728
Optionally inherit type default from attribute annotations
#24729
Set model annotations to table definitions
#24733
Internationalizable log messages
#24757
Typed configuration: allow properties with ValueFormat and ValueBinding simultaneously
#24760
Enter translations for `ResKey`s in declarative forms
#24888
Exact version information on the monitor page
#24905
New login page
#24997
Automatic data migration for newly created tables
Detail
#23917
Parameterize renderer
#23919
Generalize Config Item Templates to Rendering Templates
#23969
LockStrategy for Interfaces
#23970
BreadcrumbComponent
#23973
Upload binary data in declarative forms
#24024
Theme configurations in a separate file
#24167
Dialog for creating multiple ConfigurationItems
#24196
Update Jetty to 9.4.22
#24200
Use model factory with default name without factory annotation
#24210
Upload option of fonts in theme editor
#24318
GUI assertion FormField#isMandatory()
#24319
Configurative "Mandatory" Override for Properties in Declarative Forms
#24367
Typed configuration: serialize BinaryData properties by default
#24373
Script recorder - export/import of templates
#24374
Script Recorder: Make "Select Server Script" hideable.
#24376
Make TLKafkaProducer extensible.
#24407
Layout refactoring: restructure (admin) layouts so that .layout.xml and component XML are adjacent
#24410
MigrationProcessor for deleting the saved application model
#24419
Multiple inheritance for themes
#24457
External module for PostgreSQL driver
#24492
Using TL Script Editor for Script Attributes and Properties
#24494
Annotate width of text field at model attribute
#24495
Title for table definitions in workflow steps
#24503
Possibility to open an editor in dialogs in edit mode
#24516
Display of non-process attributes
#24521
General layout option: resetInvisible
#24524
No points in environment variables
#24535
GenericObject as default database table
#24537
Service inspection
#24538
remove loginscreen.png in POS
#24548
Configurable exception lists in EditAttributedComponent
#24552
Grid: Deselection with Ctrl-Click
#24561
Automatic text wrapping for long lines for the code editor
#24567
TL-Script expression to evaluate a dynamic attribute
#24569
LabelProvider by expression
#24570
Main properties for MetaAttributes table
#24580
Customization of grid layouts in the Element module
#24581
ShowSystemEnvironment.jsp: Alphabetical sorting.
#24584
Remove hard icon reference in grid.xml
#24588
Use of labels of subject objects in messages
#24590
BPE: Unify task transition error text and condition
#24656
Display of "_self" column in FormEditor table
#24672
Display of a static HTML in the form editor
#24673
Enable "Standard" Links in WYSIWYG Editor
#24692
Migration: Enable version downgrade
#24697
Directory (LDAP) Account Sync without explicit group access
#24703
Scripting: ModelNamingScheme for the selection of selectables
#24715
Dealing with large file sizes during uploads through file drops
#24716
FileDropHandler: Improve error messages
#24718
Improving the completion of a task
#24744
Dynamic dialog titles
#24745
Missing JSP attribute "wholeLine" for basic:fieldset
#24747
Macro as GUI element in the form editor
#24755
Introduce feature sets in StructuredTextConfigService
#24756
Typed configuration: no error when accessing mandatory properties that are not set
#24758
ResKey: Optional key for literal `ResKey`s, better XML format
#24765
com.top_logic.layout.form.template.model.Template for HTML code
#24768
Make FormEditor dialog in a programmatic dialog
#24803
Better positioning of administration components
#24813
Display hidden attributes in shape editor
#24816
MediaQueryControl should be LayoutControlAdapter
#24853
Dynamically adjust the number of lines to the content of the code editor
#24856
Enhanced API for TypedAnnotatable
#24869
Specify a reason if lines cannot be removed
#24873
Typed configuration: use short cut format for item-value properties for serialization
#24884
Update Font Awesome to version 5.13.0
#24895
Focus tables
#24902
PropertyEditor for TLFormDefinition
#24906
FormBuilder for a type using the implicit FormDefinition.
#24913
Offer forms of super types as templates to extend
#24916
Buttons to reset the form
#24925
Provide checkAll to FormContainer
#24928
Be able to prevent recording of all actions in the dialog
#24932
Save layout back to file system
#24982
Assertion on the error text of a FormField
#24999
Treat deploy aspects like "normal" web apps
#25012
Show Teminplan in Tile Demo
#25013
Register WindowComponent to the MainLayout of the opener
#25027
Scripting of creation of new views
#25039
Display of the messages of an exception in the info service
#25040
Better error behavior if layout configuration is invalid
#25041
Declarative configuration shall extend programmatic
#25044
Differentiation between active and disabled buttons in the "modern" header
#25055
BinaryDataFactory: Create BinaryData from InputStream and name
#25067
Info type display without icon and header in info service
#25081
DefaultProvider via expression
#25083
Special group "Other attributes" in the shape editor
Nice to have
#23964
Abstract base class for ControlProvider for FormMember
#23979
TableData: getOwner() to be included in the API
#24195
ConfigurationItem for internationalized texts without description
#24197
TL-Sync: Set Kafka bootstrap servers via Java property
#24209
Replace hover classes loaded by javascript with hover pseudo classes
#24282
Typed configuration: utility for parsing with custom root tag
#24286
Utility to integrate Maven dependencies into a TL module
#24313
Assertion for selection in TreeTableComponent
#24340
Set default encoding of files in the project
#24485
Dump JSP into the standard maintenance pages
#24504
Remove static SQL statements, instead route dynamically via DBHelper
#24575
Wrapper generation for multiple modules
#24613
Service method for creating a SortConfig
#24750
TL-Script Macros: Allow dynamic content in protected attributes (SafeHTML)

Bugfix

Critical
#24984
Incorrect AssociationCache update in commit
Major
#24380
Configured resource provider is not found for historical objects
#24452
Possible infinite loop in AbstractKBCache
#24695
Structure editor: Different line height Flex vs Fix
#24721
Tree table renders checkboxes for all nodes
#24854
Incorrect dialog name in POSDelegateStructureHTMLTree
#24977
User can no longer create bookmark links
Detail
#23952
Mandatory attributes cannot be (temporarily) set to zero
#23955
Order of buttons in *SelectorContext not consistent with the rest
#23997
Session service logs only the Apache facade address
#24152
Burger menu rendering error
#24169
Removal of unnecessary inline styles
#24241
Add missing ThemeVariables
#24302
RiskItemFactory: Switch to typed configuration
#24346
Typed configuration: U.u. Incorrect "Outer" reference resolution
#24359
Time-dependent test in Project Demo
#24397
The callback URL configuration of the Pac4jConfigFactory does not serve as a fallback for the client configuration
#24412
Tooltips of non-executable commands in the burger menu are not displayed
#24490
Missing authorization for new workflow version
#24505
Saving script templates in the Script Recorder not possible
#24514
TLScript code completion plugin does not work in Internet Explorer
#24551
GUI Inspector dialog no longer opens for buttons
#24553
Table text filter count empty entries
#24558
Incorrect export/import of ScriptRecorderTemplates
#24619
Migration: Model update may delete attributes if their type changes
#24644
Upload of a document version via drag & drop without lock not possible
#24648
TL Script Editor: code block in the description of a completion not on one line in IE
#24669
Font Awesome is missing from the third-party libraries table
#24677
Unwanted margin in the Gantt page bar
#24680
Tree-Table: Selection is lost when collapsed
#24684
Swap order jsDiagram / Themes Modern in CP
#24696
Advanced search form for wide
#24698
Unwanted line break when displaying a URL
#24704
Inactive create button of a grid is too bright in sidebar theme
#24759
Change log configuration in the application no longer possible
#24764
LabelProvider for BinaryData objects
#24769
More errors in reactive forms
#24775
FileDropHandler: waitPane sometimes does not disappear
#24785
Maxmiert property with dialogs is lost
#24862
Incorrect filtering in tree tables with non-existing attributes
#24872
Update problem company detail view
#24901
Warnings in the log for layout files
#24917
Use `config-type` configured on attributes for ColumnConfiguration
#24939
Check-Changed on selection in BPMN diagram
#24950
Label column in token table does not exist
#24959
Webfolder is rendered too small
#24965
Committee tests fail if they are executed at certain times of the day
#24974
TopLogicServlet must not redirect to login in case of errors
#24987
Erroneous update of KBCache's
#24988
New document description is not displayed in other WebFolder views
#25005
Double button in the sidebar
#25007
Changes to the edited BPMN diagram can be lost
#25009
Wrong model update when switching to edit mode
#25010
BPE Process Editor does not save "Automatic" setting for branches correctly
#25014
ModuleLayout does not resolve workspace directory properly
#25028
Dialogs of external windows are displayed in the main window
#25048
ThemeVariables of the layout are not resolved correctly
#25056
Too many buttons in sidebar layout
#25059
NullPointer during drag'n'drop of selected ApplicationAction
#25061
ReplayHistory does not find its control on fast PageReload
Nice to have
#24647
Unnecessary import in SubtypesProvider

Administration

Detail
#25036
Optimization Memory Virtual Machines
Enhancement (User-visible)

Critical

#23471

Context menu

Code migrationContextMenu

In applications, a context menu should generally be available, in which on the one hand certain standard commands (edit, delete, ...) always appear, but on the other hand also existing application-specific functionalities are offered, which are available for the currently selected object - either globally in the application, or specifically in individual views.

The application developer should be able to decide which of the entries are enabled/disabled for a specific object (by code, for example, depending on an attribute value of the object). The enabled/disabled status must be the same as for the corresponding command in the toolbar, button line or burger menu.

User interface

The context menu should be accessible via right mouse button on the one hand, on the other hand also via other means for touch devices.

Functionalities

Standard functionalities should always appear in the context menu, but must be able to be disabled in the application in a view-specific way (e.g. delete, edit).

Further functionalities should be able to be added type-specifically by the applications, and should then be available in all views of the application for objects of this type (e.g. "Rename", "Send (Mail)").

Further functionalities shall be able to be added by applications type- and view-specific, and shall then be available in the respective view of the application for objects of this type.

Configurability

It should be possible for the application developer to configure existing commands in burger menu, button line, toolbar into the context menu.

The application developer must generally be able to decide which of the entries should be enabled/disabled for a specific object (by code, for example depending on an attribute value of the object). The enabled/disabled state must always be the same as for the corresponding command in the icon bar or burger menu.

Implementation

See TL/ContextMenu

Code migration

  • Commands that have an icon, were previously displayed in the toolbar, and now also appear in the context menu must be checked to see if they work on both backgrounds. It may be necessary to use an icon font icon instead that can adjust its Fordergund color. This was done for the edit/save/cancel icons.
  • All methods in BoundChecker must get the object to be checked as argument and must not implicitly include the current model (e.g. of the component)
    • BoundChecker.hideReason(Object)
    • getCurrentObject(BoundCommandGroup, Object)
  • Methods at BoundChecker which are not passed a current object can only be called at BoundCheckerComponent and must not be included in the authorization check of commands (only in display check e.g. after tab change)
    • allow(BoundCommandGroup)
    • allow(BoundCommand)
  • Commands which do not require the current component model (e.g. "Refresh") must be given null() as target configuration, so that they are not included in the context menu of elements of parent components. This configuration can be done either by setting target="null()" when configuring the command, or as a default annotation when implementing the command:
#!java public class InvalidateCommand extends AJAXCommandHandler { public interface Config extends AJAXCommandHandler.Config { @Override @FormattedDefault(TARGET_NULL) ModelSpec getTarget(); } ... }
  • Dialog openers which use the option targetComponent="..." must additionally get target="model(self())" as configuration. Since most dialogs don't get their model explicitly set on opening, but get the model "behind the scenes" from their dialogParent(), the default setting for target of OpenModalDialogCommandHandler has changed from model(self ()) to null( ). This causes such dialog openers that do not work with a model other than the one currently set in the parent component not to be included in the context menu of parent components, e.g:
#!patch Index: webapp/WEB-INF/layouts/history/historyDialog.xml =================================================================== --- webapp/WEB-INF/layouts/history/historyDialog.xml (revision 278883) +++ webapp/WEB-INF/layouts/history/historyDialog.xml (working copy) @@ -43,6 +43,7 @@ clique="history" group="${openerCommandGroup}" resourceKey="${defaultI18n}" + target="model(self())" targetComponent="${namePrefix}Table" >${executability}</open-handler> </dialogInfo>
  • If a dialog is no longer displayed, or if the opener has the wrong executability, this may be due to the changed default for target of the OpenModalDialogCommandHandler. This is the case, if e.g. an executability rule was configured at the open handler, which refers to the target model of the trader, although the opened dialog does not work with the target model of the handler at all, but gets its model "behind the scenes" from its dialog parent. In this case the dialog must be changed so that its model is set via targetComponent="..." at the open handler and the configuration target is set as described in the last point, e.g:
#!patch
Index: webapp/WEB-INF/layouts/com.top_logic.contact/admin/orgUnits/EditOrgUnit_shared.xml
===================================================================
--- webapp/WEB-INF/layouts/com.top_logic.contact/admin/orgUnits/EditOrgUnit_shared.xml (revision 278881) +++ webapp/WEB-INF/layouts/com.top_logic.contact/admin/orgUnits/EditOrgUnit_shared.xml (working copy) @@ -56,17 +56,23 @@ <include name="/element/createStructuredElement.xml" detailComponent="${createComponent}" jSPNewPage="${createJSP}" + model="null()" namePrefix="${namePrefix}OrgUnit" > <inject> <dialogInfo - defaultI18n="layouts.contact.EditOrgUnit_Shared.newOrgUnit" - executability="CreateElementRule" height="250" - openerClique="create" - openerCommandGroup="Create" width="450" - /> + > + <open-handler id="displayDialog_${namePrefix}OrgUnitnewElementDialog" + clique="create" + executability="CreateElementRule" + group="Create" + resourceKey="layouts.contact.EditOrgUnit_Shared.newOrgUnit" + target="model(self())" + targetComponent="${namePrefix}OrgUnitnewElementDialog" + /> + </dialogInfo> </inject> </include> </dialogs>

Open items

  • Context menu for tree components and tree controls
  • Context menu for table components and table controls
  • Context menu for tree table components
  • Context menu for all component backgrounds
  • Context menu for inline displayed objects ("resource renderer")
  • Context menu for charts
    • Not in this ticket.
  • Type-specific context menu entries
  • Resource provider provides context menu?
    • No: There is an additional interface ContextMenuCommandsProvider that can be used to provide context menu commands for an object. A configured variant of this is the LabelProviderService.
  • Collapse form groups via context menu
    • No: Too much context menu space reserved for too little functionality.
  • Context menu for form fields
  • Heading for context menus
  • The context menu opens directly at the mouse position, regardless of whether the entire menu can be displayed at this position. Instead, the menu must be displayed in such a way that it also fits on the screen - like the filter popups, for example.
    • See #24641.

Review

  • If a context menu is already open and you right click on another element, the first context menu should be closed and a new one opened. So far the context menu stays open and additionally the browser context menu opens. This is confusing for me. Because I do this most of the time, when I clicked wrong and want to open the context menu on another element.
    • Now, if you do the context menu click with the context menu open on the background, the original context menu is closed instead of opening the browser context menu. Unfortunately, in this situation you can't open the context menu of the new target directly, because the click doesn't hit this target but a transparent pane that lies over the complete window.
  • If you click on an object with a long name, the context menu will be as wide as the name. But in some applications the customer has very long names for his subject objects. Therefore the width of the context menu should be limited.
    • The title never becomes wider than the content of the menu.
  • The width of the context menu behaves strangely: When clicking on the root object in the demo type tree, the text "Create node" breaks. Probably because the context menu is too narrow. But when I display the I18N keys, it displays much wider, without wrapping text.
    • Menu items no longer wrap.
  • If you open the gui inspector with the context menu and click something outside the context menu, the cursor becomes a wait cursor. Only after a while you notice that nothing happens and that the wait cursor is always displayed outside the context menu. This is irritating, but on the other hand it only affects us. Is there anything that can be improved? For example, that the inspection also works there. Or that the cursor changes to "not possible" when inspecting outside the context menu.
    • This is not different from previous burger menus. The cursor can't be context sensitive, because during inspection there is a pane over the whole content.
  • In the grid, I can switch to edit mode in the context menu of each row. But I can't do Cancel, Save, etc. there. This is only available when I click in the table header. This seems inconsistent. Can you still add that in?
    • In the grid you can edit all rows via the context menu, but of course you can only save/accept/cancel the one currently edited - that's the difference. It is now built in exactly so that you see save/accept/cancel only in the context menu of the currently edited object/row. This is true not only for grids but also for trees with detail views (at least when "Edit" appears in the tree's context menu, e.g. in Structures:Aspect Inheritance).
  • In the demo table views "Frozen", "Configured Sidebar" and "Tree-based Table" I cannot open the component context menu. I can only open the one for individual rows. Is this on purpose?
    • The context menu for these views has no entries. The table configuration commands do not show up in the context menu. Could certainly be wished for, but is technically difficult.
  • In the toolbars I can't open the context menu for their components.
    • Yes, technically difficult.
  • If you parameterize the context menu providers with the type of the component, the concrete derivations don't have to cast the component every time.
    • If you did that( parameterizecom.top_logic.layout.basic.contextmenu.component.ContextMenuFactory ), then you wouldn't be able to call the method (without an unchecked cast).
  • In ComponentContextMenuFactory.Provider.createButtons(...), more objects are added to a list. This list comes from super.createButtons(...). The problem: super does not give any guarantees if the list is mutable or even resizable. The list is created there using createProviderButtons(...). This in turn calls toButtons(...). And that uses Collectors.toList(...). And that says: "There are no guarantees on the type, **mutability**, serializability, or thread-safety of the List returned; if more control over the returned List is required, use toCollection(Supplier)." In the Java version I use, ArrayList::new is used there, which makes it work. But with lists coming from somewhere else, you should generally be careful.
    • Ack.
  • TypeBasedContextMenuFactory.Provider._component you can make final.
    • Ok.
  • TypeBasedContextMenuFactory.Config: Properties is missing the constants for their @name.
    • Done.
  • ContextMenuCommandsProvider: This interface has two methods: hasContextMenuCommands and getContextCommands. For the first one a trivial default implementation can be specified: !getContextCommands(...).isEmpty(). Then it would be a functional interface and could be implemented by lambda expression. Up to now you always need a new class for this. Even if it is anonymous, it is much more lines than a lambda expression. And where optimization is possible, this method can still be implemented.
    • The interface has two methods exactly because one is called extremely often and therefore must be fast and the other can be expensive. Therefore the trivial default implementation is counterproductive. This is also stated (perhaps too kindly) in the documentation: "Can be used for optimizing the decision, whether a context menu should be offered."
  • ConfiguredContextMenuCommandsProvider: You can make the instance variables final. For the property override the @Name annotation is missing. For entries a constant for the value of the @Name annotation is missing.
    • Done.
  • GridContextMenuFactory.Provider.acceptComponentCommand(...) The method is overridden, but only calls super.
    • Removed.
  • GridTableConfig: The JavaDoc says: "TabConfig with defaults for GridComponent." You must have meant TableConfig instead of TabConfig.
  • There are now two classes TestLabelProviderService. Both were introduced this year. One at #24380 in com.top_logic.element. And one under #24501 in com.top_logic.
    • This is intentional, because you can only test model references in tl-element.
  • You can make the following instance variables final:
    • ContextCommandsControl._contextMenu and _titleProvider.
    • ContextMenuControl._contextMenu
    • AbstractMenuContents._contents
    • Done.

Test

Trees

Tables

Grids

Component commands

Inline objects

Form fields
  • For form fields, Technical Demo:Layout Framework#1:Forms:Form Controls (inline) the textInputWithContextMenu field has a context menu that inserts predefined values into the field.
  • 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