5.4 Changelog
This page lists all the changes introduced in 5.4 releases. See also the release notes.
5.4.13 (2022-03-11)
Features
-
Improve MasterDetail usage
Details
MasterDetail form is no more displayed by default, but only when a line is selected and we want to create new record from. Also, when we add a new record, cancel current edit or click on back button, MaterDetail form is hidden. Add a new button "Add and new" to allow pushing current record in grid and quickly create a new one.
-
Add support to use MasterDetail with editable grid
Details
When MasterDetail is used with editable grid, the form is readonly and record is now live sync with the changes made in editable grid.
Fixed
-
Fix downloading attachment of action-report
-
Fix permission checking with charts and custom views
Details
Should not check for permission on
MetaViewwhen executing actions from charts.onInitaction on charts use current model if calling fromaction-viewelse,ScriptBindingsis used, so that we still have a context. -
Fix file name downloaded in notify box
-
Prevent grid sorting when there are dirty rows
-
Allow dashboard drag&drop according to view customization permission
Security
-
Add model attribute to action-report
Details
If a model is not specified on action-report, permission is checked against context.
-
Check context read perm on action-report in case of attachment
Details
If action-report attach the generated report to current object, it now check for read permission on that object.
5.4.11 (2022-02-23)
Features
-
Allow access to custom fields in StringTemplate via dotted notation
Details
StringTemplate doesn’t allow
$character in expressions. This is the way we use to access custom field from context :$extraAttrs.myCustomField. Accessing custom fields need to be prefixed by the related json field name (ex:<SaleOrder.extraAttrs.myField>`or `<SaleOrder.attrs.anotherField>). For custom fields in defaultattrsfield, it is not needed to use prefix (ex:<SaleOrder.myField>). However, it is recommended to always use the related json field name as prefix. -
Add
axelor.view.watch.delayandaxelor.view.watch.kindsVM argumentsDetails
Defaults are as follows (working on Eclipse/IntelliJ on Linux):
-Daxelor.view.watch.kinds=ENTRY_CREATE -Daxelor.view.watch.delay=300
axelor.view.watch.kindsis a list of comma-separated strings of the following values:ENTRY_CREATE,ENTRY_MODIFY,ENTRY_DELETE.axelor.view.watch.delayis the update delay in milliseconds.Varying development environments may require special configuration in order to have view hotswap working.
For example, on Windows, only
ENTRY_MODIFYevents might be triggered in some cases. Moreover, there may be a big gap between those events, requiring to increase the update delay. So one might want to use:-Daxelor.view.watch.kinds=ENTRY_CREATE,ENTRY_MODIFY -Daxelor.view.watch.delay=4000
Fixed
-
Fix parsing field widgetAttrs to preserve type depending on attribute
Details
Extra widget attributes doesn’t takes into account the type of each attributes. This result of some unexpected behaviors. For example, the
x-true-text="true"cause error onBooleanSelectwidget. Depending on the attribute, the value is converting to the right type. -
Preserve selected flags from action values
Details
Preserve selected flags when using
response.setValue(field, collection)with collection of maps without version field. -
Sort advanced search fields in lexicographic order
-
Fix view hotswap when running embedded Tomcat
-
Fix JS error when having favorite menus with duplicate names
Details
In "Organize favorites", in the user changes a menu link, they may then add another menu with the same name, causing AngularJS error tracking for unique names.
-
Fix panel
showTitleattribute -
Translate toolbar menu customization shown to technical staff
-
Fix back button when view-parem
forceEditis used -
Fix m2m field update upon select record
Details
Populated the m2m items all data. Only omit the version field (not fully populated as the record is already saved)
-
Fix position of field error message to be always to bottom of the field
-
Fix file upload when using filename pattern
Details
Property
file.upload.filename.patternshould be evaluated on each upload in order to evaluate{year}/{month}or{day}keys. Moreover, when using a custom filename pattern,{name}should be placed at the end of the pattern. If omitted, he is appended by default at the end.
5.4.9 (2022-01-31)
Deprecated
-
Deprecate legacy form layout in favor of panel layout
Details
Form widgets
<notebook>,<break>,<group>,<portlet>, and<include>are deprecated.colsandcolWidthsform attributes used for legacy form layout are also deprecated. Those will be removed in the next major version. Use panel layout instead. -
Deprecate Groovy domain models
Details
In next major release, domain models will be generated in Java only.
Features
-
Add application setting to disable permission check on actions
Details
Use
application.disable.action.permission = trueto disable permission checking on actions. That setting severely breaks security. It should be used with extreme caution and as a last resort only. It will be removed in the future. -
Add application setting to disable permission check on relational fields
Details
Use
application.disable.relational.field.permission = trueto disable permission checking on relational fields. That setting severely breaks security. It should be used with extreme caution and as a last resort only. It will be removed in the future. -
Better visibility in DMS file details
-
Add setting "auth.saml.logout.request.signed"
Fixed
-
Allow to select multiple records in o2m/m2m inside an editor
-
Prevent sorting when any row is dirty in o2m/m2m grid
Details
This fixes losing changes after sorting on a column.
-
Fix default value of Boolean custom fields
-
Fix checking for create permission on add actions
-
Fix static/tooltip/button-group widget in views extensions
-
Translate "Use offline…" text in dms file details
-
Fix view hotswap with IntelliJ IDEA
-
Check for permission in suggest box create actions
5.4.8 (2022-01-03)
Fixed
-
Fix going into edit mode in editable grid with large horizontal scrolling
-
Don’t trigger popup’s onLoad upon closing
Details
When a popup was closing when saving the record, onLoad actions was triggered. This is unnecessary as the popup will be closed in all cases. It was also causing errors because the actions results was applied on a closed popup/form.
-
Fix m2m field update issue
Details
The m2m items, upon select/edit should not be fully populated as the record is already saved (similar to m2o). In controllers, make sure to return a compact map in m2m fields, ie a list of map with the records ids. Then, the view will fetch the records with all necessary fields by itself.
5.4.7 (2021-12-17)
Changes
-
Only show access type error for all users
Details
Technical and non-technical users are now notified the same undetailed access type error message. Details are shown in the logs only.
Features
-
Add support to UTF-8 BOM file in CSV Importer and
CSVFilehelpers class -
Log technical message for AuthSecurityException
Fixed
-
Do not test pattern on empty string
-
Check for create permission when adding row in editable grid
-
Fix web service
permsignoringactionparameter when noidis specified -
Translate tree node Expand/Collapse tooltip
-
Exclude auditable fields,
created(On|By)andupdated(On|By), when copying record
5.4.6 (2021-11-30)
Changes
-
Improve editable grid shortcuts to confirm/cancel edit
Details
We can now use
ENTERkey to confirm current edit andESCAPEkey to cancel.
Features
-
Add
view.grid.editor.buttonsapplication configuration -
Add
canEditattribute topanel-dashletDetails
The new
canEditattribute onpanel-dashletwill control whatever we can edit dashlet records even if the dashlet is in readonly. By default, when apanel-dashletis in readonly (or main view is readonly mode or top container element is readonly), the record will be opened in popup. We can’t edit the records. If editable, the record will be opened in a new tab, in readonly mode. We can then switch to edit mode to edit the record.Few more improvements :
-
Show file icon in grid dashlet when in readonly mode
-
Show pencil icon in grid dashlet when editable
-
Fix ignored dashlet attributes in dashboard
-
Fixed
-
Fix login failure event
Details
Fire login failure event with form client, LDAP, and Basic Auth.
Can’t be triggered with other indirect clients like OAuth 2.0, OpenID Connect, SAML 2.0, etc.
-
Fix memory leak in session listener
-
Fix horizontal scrolling in editable grid
-
Fix field sometimes blank on initialization with CodeEditor widget
-
Check for permission on messages requests
-
Fix
commons.codecdependency conflict when using SAML -
Check for read permission on action-record changing dummy fields
-
Translate grid selection checkbox tooltip
-
Fix readonly dashlet with forceEdit should open readonly popup in readonly mode
-
Fix Gantt view sometimes blank on initialization
-
Fix resetting of shared custom views
-
Fix keyboard shortcuts on Mac-like devices
Details
When Macintosh is detected, use specific keyboard shortcuts. Macintosh keyboards don’t have AltGr nor Insert keys.
-
Fix concurrent update error when moving tasks in Gantt view
-
Check for permission on followers requests
-
Fix NPE with null password to
AuthService#passwordMatchesPattern() -
Fix blocked loading of custom translations
-
Fix ignored regex on custom field
-
Check for permission on attachments requests
-
Fix dashlet with popup should open editable popup in editable mode
5.4.5 (2021-10-21)
Changes
-
Add view customization permission on Group and
view.customizationapplication configurationDetails
All users used to be allowed to customize views, and only admins could share. Now, view customization permission is checked on Group, and can be set to "Not allowed" (default), "Can customize", or "Can share".
view.customizationapplication configuration defaults totrue. If set tofalse, Customize menu and custom views are disabled.
5.4.4 (2021-10-01)
Fixed
-
Check for permission on action model if defined
-
Fix infinite recursive popup grid loading
-
Fix alignment of meta JSON field using contextField
-
Fix JS error when M2O field has no namecolumn
-
Add scrollbar in DMS Permission dialog box
-
Fix missing ID on created records from TagSelect widget
-
Fix detaching of one-to-one from non-owning side
5.4.3 (2021-09-08)
Changes
-
Serialize Time with seconds
Details
Time is now serialized with formatter "HH:mm:ss". Seconds are still not displayed by default in client (need to use
x-seconds="true"). -
Require manual closing of datetime picker
-
Disable translation joins on queries by default
Details
Add Query.translate() and Filter.translate() to enable translation joins.
REST API now accepts parameter
translateto enable translation joins on criteria and for ordering, but never for domains.Web client always uses the
translateparameter.
Features
-
Clarify title/placeholder of user password fields
Details
Clarify title/placeholder of user password fields in form view and change password page.
-
Change title depending on existing or new user
-
Add help popovers
-
Add password pattern help using
user.password.pattern.title(customized via translation)
-
-
Use select control type on year, month, and time in datetime widget
-
Add support for related parameters in domain expressions
Details
Character
$is used to access related fields in domain expression parameters. This can be used to access other JSON fields. Example:"self.product = :$extraAttrs$myCustomProduct"
-
Add view-param
grid-widthto set width of grid in details-viewDetails
Example:
<action-view name="sale.orders" model="com.axelor.sale.db.Order" title="Sale Orders"> <view type="grid" name="order-grid" /> <view type="form" name="order-form" /> <view-param name="details-view" value="true" /> <view-param name="grid-width" value="25%" /> </action-view> -
Add multi-tenant aware thread implementation
Details
The
com.axelor.db.tenants.TenantAwareis a customThreadimplementation that keeps track of current tenant and runs the thread in transaction with current tenant in the context. -
Add setter methods for all attributes in XMLInput/XMLBind CSVInput/CSVBind
-
Support adaptive date/time/datetime quick search in grid view
-
Add support for CSV/XML data import of custom fields
Details
Example:
<!-- for CSV data --> <input file="some-data.csv" ...> <bind column="some" to="$attrs.some" /> </input> <!-- for XML data --> <input file="some-data.xml" ...> <bind node="some" to="$attrs.some" /> </input>For custom model records, you can specify
json-modelin order to automatically bind jsonModel, handle search domain, and set namecolumn.CSV import example:
<input file="data.csv" json-model="ElectricityBillSubscription" search="json_extract_text(self.attrs, 'name') = :name"> <bind column="name" to="$attrs.name" /> <bind column="startDate" to="$attrs.startDate" adapter="LocalDate" /> <bind column="endDate" to="$attrs.endDate" adapter="LocalDate" /> <bind to="$attrs.billSubscription" search="json_extract_text(self.attrs, 'name') = :billName"> <bind column="billName" to="$attrs.name" /> </bind> </input>name,startDate,endDate,billName "Bill Jan2021","01/01/2021","31/01/2021","Test01" "Bill Feb2021","01/02/2021","28/02/2021","Test02"XML import example:
<bind node="electricityBillSubscription" json-model="ElectricityBillSubscription" update="true" search="json_extract_text(self.attrs, 'name') = :_electricityBillSubscriptionName"> <bind node="name" to="_electricityBillSubscriptionName" /> <bind node="name" to="$attrs.name" /> <bind node="startDate" to="$attrs.startDate" adapter="LocalDate" /> <bind node="endDate" to="$attrs.endDate" adapter="LocalDate" /> <bind node="billSubscription" to="$attrs.billSubscription" update="true" search="json_extract_text(self.attrs, 'name') = :_billSubscriptionName"> <bind node="@name" to="_billSubscriptionName" /> <bind node="@name" to="$attrs.name" /> </bind> </bind><electricityBillSubscription> <name>Bill Jan2021</name> <startDate>01/01/2021</startDate> <endDate>31/01/2021</endDate> <billSubscription name="Test01"/> </electricityBillSubscription> -
Support
x-secondsattribute on DateTime and Time widgets -
Add ui-action-context attribute to use with ui-action-click
Details
The
ui-action-context="scopeVariable"can be used withui-action-clickin custom view template to provide extra details in action context. -
Expose $scope.openTab as axelor.$openTab
Details
The api can be useful for some apps loading in iframe.
-
Improve the indicator and delay the wait cursor
Details
-
delay showing of loading indicator by 1 second
-
delay wait cursor till the wait spinner appears
-
-
Add support for view auto-reloading
Details
Use
view-paramnamedauto-reload, with value specified in seconds. Example:<view-param name="auto-reload" value="30" />Auto-reloading is paused when tab is not selected or when record is in edit mode.
-
Add JSON field meta info on all views
Fixed
-
Fix CSS of invalid BinaryLink
-
Fix value update action after save in one-to-many/many-to-many editor
-
Fix dirty form when there are custom multirelational fields
-
Fix grid search on custom fields
-
Fix grid customization when view has duplicate fields
-
Fix duplicate computed views after upgrade
-
Fix
ActionResponse.setReloadandrefresh-tabsignal from editor -
Fix NavSelect widget with M2O record having an empty name
-
Fix attribute
x-currencynot taken into account -
Fix user notifications for followers added by email address
-
Fix dashlet search triggering buttons
-
Log errors when persisting JpaFixture items
-
Exclude UI custom fields from exports
-
Fix missing handling of LocalTime in JpaFixture::load
Details
When loading fixture in tests with LocalTime fields, the JpaFixture throw a exception because LocalTime hasn’t appropriate constructor.
Caused by: org.yaml.snakeyaml.error.YAMLException: No single argument constructor found for class java.time.LocalTime : null
-
Wait for actions before confirming line on editable grid
-
Fix unsupported regular expression in WebKit causing empty grid
-
Fix currency filter with symbols other than $, €, ¥, £
-
Use number input type on number fields
-
Fix text value escape on M2O names
-
Fix multi-tenant datasource configuration
-
Fix generated code when setting
default="null"on nullable boolean -
Fix broken free search
-
Fix stuck login dialog after wrong attempt
-
Fix recursive child grid view in popup
-
Fix readonly input in mass update form when grid has readonlyIf in fields
-
Fix grid export IndexOutOfBoundsException with collection columns and translatable order by
-
Fix ignored grid orderBy when applying default search filters
-
Fix empty PDF tab with latest Chrome
-
Fix readonly button on grid
-
Fix mass applying same permission to children DMS files
-
Fix free search with custom fields
-
Fix button showIf/hideIf on editable grid
-
Fix unnecessary fetch from field editor
-
Fix missing "contains" search with MultiSelect widget
-
Fix dirty checking issue with relational fields
Details
When some o2m has an onChange action that updates parent record with
setValues(instance)the o2m items were wrongly marked as dirty if the o2m doesn’t have named column. -
Fix multi-tenant datasource configuration
-
Preserve view-param showArchived when clearing filters
-
Fix uploading of meta files in form view
-
Fix Binary/BinaryLink in editable grid
Security
-
Check for permissions when calling actions
-
Check for permissions on dotted fields
Details
Check for permissions on dotted fields:
-
Filter permitted dotted fields in fetch request
-
Filter permitted dotted fields in search request
-
Filter permitted fields in ActionRequest.setValue
-
Check for create/write permissions on related fields in save request
-
Check for write permissions on editable grid
-
Hide dotted fields if user has no read permissions
Users are still permitted to read dotted fields’ id, version, and namecolumn regardless of permissions.
-
5.4.2 (2021-04-15)
Changes
-
Default setting
data.export.encodingto UTF-8Details
When UTF-8 is used, BOM is added so that Excel recognizes the encoding.
-
Remove jcenter and prevent dependency confusion risk
-
Migrate from opencsv to commons-csv
-
Format exported dates and times with client locale
Details
Setting
data.export.localeto set a fixed locale for all exports. Settingdata.export.separatordefaults to ';'. Only numbers (integer, long, decimal) were formatted using client locale. Dates, times, and datetimes now also use client locale. Settingdate.formatis removed.
Features
-
Improve grid customization
Details
<ul> <li>Show translated field titles besides field names</li> <li>Allow to save column widths</li> <li>Add removed fields as hidden as to preserve expressions</li> <li>Add reset customization button</li> <li>Don’t delete customized grids when clearing cache</li> <li>List fields from search filters in selector</li> <li>Remove move icons in selector</li> </ul>
-
Add action to select a
panelinpanel-tabsDetails
Example:
<form ...> ... <panel-tabs> <panel title="One" name="t1"></panel> <panel title="Two" name="t2"></panel> </panel-tabs> </form> <action-attrs ...> <attribute name="active" for="t1" expr="true" /> </action-attrs> -
Apply translations on translatable fields and enums for data exports
Details
Only headers and selections were translated. Translatable fields and enums are now also translated.
-
Add "auth.ldap.user.dn.format" and "auth.ldap.user.username.attribute" configurations
-
Add
view-paramnameddefault-search-filtersto apply filters by defaultDetails
Example:
<view-param name="search-filters" value="filter-sales"/> <view-param name="default-search-filters" value="confirmed,highValue"/>Filters named
confirmedandhighValuewill be applied by default. For that usage, use new attributenamefor eachfilterinsearch-filters. -
Use thin scrollbars on grids inside form views
-
Add workflow status help
Details
Example:
public void onFetch( @Observes @Named(RequestEvent.FETCH) @EntityType(Order.class) PostRequest event) { @SuppressWarnings("unchecked") final Map<String, Object> values = (Map<String, Object>) event.getResponse().getItem(0); if (values != null) { List<Map<String, Object>> status = new ArrayList<>(); status.add( ImmutableMap.of( "name", "s1", "title", I18n.get("Status 1"), "color", "red", "help", "Some help…")); values.put("$wkfStatus", status); } }
Fixed
-
Fix NPE when loading extension views without corresponding base views
-
Fix "cn" used as ID attribute with LDAP
-
Fix Unexpected character '’ when running npm-build
-
Fix evaluation of filter
ifandif-moduleattributes -
Fix grid column widths when popup is opened as maximized
-
Fix attrs reset for bpmn use case
-
Fix looped view loading when grid has o2m/m2m fields referencing themselves
-
Fix duplicate onChange call with BooleanRadio widget
-
Merge menus into mobile toolbar
-
Fix fetching LDAP attributes with Active Directory
-
Fix row height when using Image widget in editable grid
-
Fix missing ID in context after 'save' action in multirelational editor
-
Apply view attributes to new records as well
-
Fix "Cannot change session ID" exception when using basic auth on non-secure requests
-
Fix search query causing dirty form
-
Fix Phone widget readonly width adjustment
-
Fix wrong query string append with dynamic URL in HTML view
5.4.1 (2021-02-10)
Features
-
Add relative dates and current user/group criteria to advanced search
-
Add support for defining Column attributes
insertableandupdatable -
Add tel link on grid view when using Phone widget
-
Add support for aggregation with Duration widget
-
Add flag dropdown to Phone widget
Fixed
-
Fix requiredIf with some widgets (BinaryLink, CodeEditor…)
-
Fix setting null on nullable number field with min/max attributes
-
Preserve per module web resource inclusion order
-
Fix sidebar="false" panel attribute evaluation
-
Fix URL widget in grid view
-
Fix grid field hilite overwritten by grid view hilite
-
Fix parent toolbar/menubar displayed in dashlet
-
Fix search engine action menu selection
-
Group M2O/O2O by ID in grid, but show namecolumn
-
Set "SameSite=None" attribute on cookies to allow CORS requests
-
Set first day of week according to browser locale
-
Fix modern theme button alignment in O2M editor
5.4.0 (2020-12-18)
Changes
-
equalsIncludeattribute marks field to be included in equality test, instead ofhashKey -
Improve keyboard shortcuts
Details
The keyboard shortcuts Ctrl+F and Ctrl+G were conflicting with browser shortcuts, they are now changed to Alt+F and Alt+G respectively. Also fixed some broken shortcuts.
Also added a dialog to show keyboard shortcuts which can be shown from the top-right corner menu.
-
Add support for toolbar and menubar on dashlet and o2m/m2m widgets
Details
For the toolbar, only first 3 buttons will be visible. For the menubar, only first menu will be visible.
Deprecated
-
Deprecate
LoginRedirectExceptionin favor ofWebUtils.issueRedirect -
Deprecate
hashKeyandhashAllin favor ofequalsIncludeandequalsIncludeAll
Features
-
Add support for separators in editors
-
Add menu item in form view to show workflow
-
Add support for x-show-icons on panel-related
-
Add
refresh-tabresponse signal -
Add helper api to easily open html tabs
-
Add support for defining view attrs externally
-
Improve Context api to allow overriding proxy usage
-
Add support searching on translatable fields
-
Override/add filters: currency, percent, number, date
-
Implement grid view customization
Details
We can now customize the top-level grid view with a customize column menu and selecting/removing/reordering fields.
The customized view can be shared to all users by admins.
-
Add support for more hilite colors
Details
We can now use more named colors with hilite besides the hilite styles.
-
Alert when DMS files and exported files are not found
-
Implement
json_setfunctionDetails
The function can be used to update json values using JPQL.
For example:
UPDATE Product p SET p.attrs = json_set(p.attrs, 'seller.name', '"Some NAME"') WHERE json_extract(p.attrs, 'seller', 'id') = 1 -
Add before transaction complete event
Details
The event is for internal purpose only. We may promote it as public api in some future version. The event is fired with total number of records updated/deleted in current transaction.
-
Numeric and Decimal format support based on browser language
-
Date and DateTime format support based on browser language
-
Add support for
helpattribute to panel widgets -
Add support for field tooltip templates
-
Support CSS on grid buttons
-
Add
mail.smtp.fromapplication setting -
Add support to show workflow status on top of the form
-
Charts decimal/date format support based on browser language
-
Add current view type and view names in action context
-
Add reset search terms icon to advance search box
-
Add support for maximized popups for relational fields
Details
We can specify
x-popup-maximized="all|editor|selector" to specify whether to show the `editor,selectoror both popups in maximized state.
Fixed
-
Fix random mail sender test failure
-
Fix save action in editable grid
-
Fix onChange issue on html widget
-
Fix select image button text in HTML widget
-
Fix
LoginRedirectException -
Fix js error when clicking on html view tab
-
Fix Response#setValue with $-prefixed dummy field
-
Fix PDF visibility in DMS when changing tab content with Chrome
-
Fix image-select widget issues
-
Fix updating of selected flags for JavaScript expressions
-
Fix dotted target-name on TagSelect and many-to-one fields
-
Prevent sorting/searching on transient/dummy field in grid
-
Reset attributes when navigating and refreshing records from form view
-
Fix image height in *-to-many editor
-
Prevent searching on relational field without namecolumn in grid
-
Fix OK/Cancel button order on editable grid and master-detail
-
Fix needless recomputing of views
-
Fix visibility evaluation of field using master-detail widget
-
Fix empty selection in grid when action initialized selection state
-
Fix $fmt with dotted fields and custom views
-
Remove unsupported grid button attributes from autocompletion
-
Add missing Indian momentjs locales
-
Fix o2m/m2m field button bar display
-
Fix
target-nameattribute issue on m2o field of grid view -
Fix save action in master-detail
-
Apply view extensions by matching name and groups
-
Fix NPE when finding computed field dependencies
-
Fix translation of dotted target names
-
Fix touchpad click to confirm on a popup
-
Fix custom field value expression doesn’t make form dirty
-
Fix Thai momentjs locale
-
Fix rendering of buttons and action execution on editable grids
-
Fix TypeError when several editable grids have the same dummy fields
-
Add missing English momentjs locales
-
Fix reference names in json fields
Details
When name field of the reference record is changed, the name value saved in json field is updated to reflect the updated name.
-
Fix custom fields support in string templates
-
Fix editable row reset to old value issue
-
Fix context issue with chart click actions