6.0 Changelog
This page lists all the changes introduced in 6.0 releases. See also the release notes and the migration guide.
6.0.4 (2022-11-02)
Changes
-
Upgrade Hibernate from 5.6.9 to 5.6.12
Details
This fixes null mapped one-to-one field on an entity loaded from L2 cache.
Features
-
Update meta field labels and descriptions when restoring meta models
Details
Update meta field labels so that they can be used in grid customization.
-
Improve details-view usage
Details
In a details-view, the form view can be closed on demand or if there is no selected line. When we delete a line in the grid, the record in the form is no more displayed.
This also fix duplicated requests, missing onLoad/onNew calls in some conditions and reset attrs states on form view.
Fixed
-
Preserve scroll position after saving form in details view
-
Fix grouped grid display when already initialized
-
Fix chart context evaluation when calling from action-view
-
Fix page on grid customization popup when containing extra fields
-
Make sure grids have committed before firing button action
Details
Fixes application that can become unresponsive after clicking on a button on a form view while having uncommitted editable grids.
-
Fix record pager display issue in popup
-
Fix missing cell css applied on item’s parent
-
Merge search-filter fields title with the model field title in grid customization popup
-
Fix query fetching missing fields in TagSelect widget
-
Fix delete metafile if target file is not found
-
Fix dependency conflict between GraalJS and Birt with package "com.ibm.icu"
-
Fix adding duplicate dotted field in grid customization
Details
Fix adding duplicate dotted field in grid customization when it exists both in view and search filters.
-
Fix customize dashboard with drag & drop
-
Fix wrong number of attachments displayed on record toolbar paper clip icon
6.0.3 (2022-09-28)
Fixed
-
Fix missing item context after creating M2M item from popup
-
Check for
view.allow-customizationsetting when saving customized view -
Fix save action on top grid preventing further actions
-
Fix wrong css class applied on editable grid
-
Fix custom fields on editable grid
-
Fix restarting jobs after scheduler shutdown
-
Fix model class resolution in Groovy expressions
-
Fix refreshing html dashlet when record changes
-
Fix non editable grid view customization popup
-
Fix required field using TagSelect widget
-
Skip default values of dotted field in editable grid
-
Fix timezone issues with date adapter
Details
When the server is running on UTC- timezone, date could be converted back by one day.
-
Fix conflicting
Ordertitle -
Fix saving boolean false filter
Details
In the case of boolean fields with operator
false, filter was transformed in order to check for null or false. But by doing that, original criteria was lost, breaking meta filter saving. Replaced client-side operatorstrueandfalseby new virtual operators$isTrueand$isFalsewhich perform client-side transformation. -
Fix ReferenceError with "⇐" operator on custom date/datetime fields
-
Fix sidebar toggle on window resize
-
Fix client authentication using path based callback url
Details
Some clients, ie AzureAd2Client, use path based callback url (/callback/AzureAd2Client) instead of default query based callback url (/callback?client_name=AzureAd2Client).
-
Fix missing TagSelect placeholder until we add and remove an item
-
Fix auth properties that exist in client and configuration
Details
When a property exists in the configuration and the client, try to set both.
For example,
scopeexists in bothGenericOAuth20ClientandOAuthConfiguration. -
Fix clipped field in Modern theme when using
css="large"on WebKit-based browsers -
Apply client-side operators on export and masss update
Details
Applying client-side operators was done on search only. Now, it is also done on exports and mass updates.
-
Fix setting $-prefixed dummy fields from onNew with default values
Details
Issue happened when setting $-prefixed dummy fields from onNew and record has some default values.
-
Fix wrong selected rows after grid sorting
-
Fix custom date/datetime criteria processing combined with column search
-
Use access token to retrieve user profile picture from OpenID Connect
Details
This fixes retrieving user profile picture from Azure Active Directory, where sending the access token is required.
-
Fix refreshing html view from tab right click
-
Fix save action with only default values
Details
This allow to save a record that contain default values (generally coming from domain definition) when calling
saveaction. This behavior will be same as the toolbar save button behavior. -
Fix changing dashlet url from
action-attrs -
Fix setting authentication map property
Details
This fixes setting
GenericOAuth20Client.profileAttrs. Issue happened when there was no getter.# profile attributes: map of key: type|tag # supported types: Integer, Boolean, Color, Gender, Locale, Long, URI, String (default) auth.provider.oauth.profile-attrs.age = Integer|age auth.provider.oauth.profile-attrs.is_admin = Boolean|is_admin
6.0.2 (2022-08-03)
Features
-
Improve report-box template in custom view
Details
-
Implement icon attribute
-
Format value
-
Translate label
-
Implement dynamic percent style
-
Implement dynamic percent level style
-
Fix tag positioning
-
-
Add config to define the maximum number of items displayed per page.
Details
Introduce new config
api.pagination.max-per-page:# Define the maximum number of items per page api.pagination.max-per-page = 1000
This config is used globally in UI to limit and set the maximum number of items displayed per page. -1 means unlimited (default value). This will block users who try to get a high number of records. Fetch a too large dataset can result in some high server side load.
-
Minor fields tracking UI improvements
Details
Add minor fields tracking UI improvements :
-
Use right arrow character instead of right angle quote
-
Display
Noneinstead of an empty value -
On create event, don’t generate tracking on empty field
-
-
Improve
report-tablecustom viewDetails
-
Translate titles
-
Use title attribute from fields
-
Preserve column declaration order from dataset if report-table columns attribute is not specified
-
Format data according to field type, including selection with translation
-
Support field translatable attribute
-
Sticky header and footer
-
Skip having to define data='data'
-
Ability to sort by columns
-
Ability to use widgets supported in grid views
-
Allow to export dataset from dashlet export button
Example:
<custom name="my-report-order-lines" title="Order lines"> <field name="statusSelect" type="integer" selection="selection-order-status" title="Status"/> <field name="product" type="string" x-translatable="true"/> <field name="total" type="decimal" x-scale="2" /> <dataset type="jpql" limit="10"> <![CDATA[ SELECT self.name AS name, self.statusSelect AS statusSelect, item.product.name as product, item.quantity * item.price AS total FROM Order self LEFT JOIN self.customer AS c LEFT JOIN self.items AS item WHERE c = :customer ORDER BY self.name ]]> </dataset> <template> <![CDATA[ <report-table sums='total'></report-table> ]]> </template> </custom> -
Fixed
-
Fix chart dashlet data export
-
Fix unregistered request scope causing database task to fail
Details
If application has any bound RequestScoped classes, it will cause the database task to fail to install AppModule with "No scope is bound to com.google.inject.servlet.RequestScoped." error.
-
Fix advanced search with custom any-to-many fields
-
Fix html view height in popup
-
Ignore forceEdit if user has no write permission
-
Fix TypeError when user has insufficient permission to display a panel tab
-
Fix duplicate data loading of kanban dashlet inside form view
-
Fix context of kanban in dashlet
Details
Apply the same context behavior as other dashlets, ie. merge action-view context with current record context.
Instead of domain, use criteria (as it is done for calendars) for the
columnByfilter, as to avoid conflict with current record context. -
Fix reload action on cards and kanban view
-
Fix grid JS error if action sent a list of IDs instead of a list of records
-
Don’t update the number value on spin events
Details
This fixes action iconsistencies between changing number value via manual input and spinner.
-
Take into account view-param limit on kanban views
-
Fix spurious invalid fields notice when master detail is not shown
-
Fix adding row on top editable grid when editor buttons are disabled
-
Prevent popup from handling editable grid key down events
Details
This fixes popup closing when pressing escape in editable grid.
-
Fix the view opened on mail thread creator link
Details
The
user-info-formview can be bypassed if we refresh the browser tab after clicking on mail thread creator. The view is now opened in popup. If no view is defined, nothing is opened (no more fallback onuser-form). -
Fix grid column search combined with predefined and custom search filters
-
Don’t check for CSRF tokens with direct clients
-
Don’t reload dashlet calendar data when the widget is not visible
-
Fix adding row on grouped editable grid
-
Fix array of strings in context
Details
For example:
<context name="_myStrings" expr="eval: ['hello', 'world']"/> -
Commit editable grid when closing popup without confirming
Details
In a popup containing an editable grid, the line being edited was not committed if we directly close the popup via the "OK" button without clicking on "Confirm" in the editable grid.
-
Fix missing group on views and menus when loading
-
Fix emptying a field using SingleSelect widget
-
Fix uninitialized injector when running database task
-
Fix broken translation popup
-
Fix exporting selection field if multi-select widget is used
6.0.1 (2022-06-27)
Changes
-
Upgrade embedded Tomcat from 9.0.62 to 9.0.63
-
Upgrade Hibernate ORM from 5.6.8.Final to 5.6.9.Final
-
Upgrade Byte Buddy from 1.12.9 to 1.12.10
-
Upgrade Infinispan from 13.0.9 to 13.0.10
-
Upgrade Redisson from 3.17.1 to 3.17.3
-
Upgrade PostgreSQL JDBC from 42.3.4 to 42.3.6
-
Upgrade Flyway from 8.5.10 to 8.5.11
-
Upgrade Jackson from 2.13.2 to 2.13.3
-
Upgrade UnboundID LDAP SDK from 6.0.4 to 6.0.5
-
Rework mail message endpoints
Details
Some mail message endpoints has been reworked to use dedicated path. This avoid to give permission to
MailMessageorMailFlagobjects in order to access the mail menus and deal with messages and flags.MailMessageaction-view is now always allowed in order to open mail views. -
Upgrade GreenMail from 1.6.8 to 1.6.9
Features
-
Update file name format for duplicate file name
Details
Update format from
file (1).txttofile-1.txt. This avoids necessary space in file name. -
Show configured application logo in about page
-
Report duplicate view items at the end of the view loading process
-
Sanitize uploaded filenames
Details
Sanitize uploaded filenames :
-
Removes special characters that are illegal in filenames on certain operating systems
-
Replaces spaces and consecutive underscore with a single dash
-
Trims dot, dash and underscore from beginning and end of filename
-
Fixed
-
Don’t save meta filters with spurious
$newattribute -
Fix saving filter with string field
Details
In the case of string fields with operators
isNullandnotNull, filter was transformed in order to check for null or empty. But by doing that, original criteria was lost, breaking meta filter saving.Instead, use new virtual operators
$isEmptyand$notEmptywhich perform client-side transformation. -
Fix MetaModule#application flag not filled
-
Take column filters into account when refreshing dashlets
-
Fix calendar dashlet refresh after refreshing/saving form view
-
Fix mail thread avatar img display
-
Fix downloaded filename from html action-view
-
Fix uploading file if a file with the same name exist
-
Fix missing name and color fields from selector with TagSelect widget
-
Fix missing
_domainActionfrom context of kanban in dashletDetails
The attribute
_domainActionis needed to reevaluate the context server-side. -
Fix ignored canNew attribute and permissions when pressing enter on last row of editable grid
-
Fix deadlock when loading views of different types with same 'id'
-
Fix meta file not found error
-
Fix downloaded filename encoding in Content-Disposition header
-
Clear dashlet filters when changing to another record
-
Allow users to paste into password fields on change password form
Details
Preventing password pasting undermines good security policy. https://web.dev/password-inputs-can-be-pasted-into/?utm_source=lighthouse&utm_medium=devtools
-
Fix duplicate data loading for grid dashlets on dashboards
-
Fix closing of resources in CSV/XML importers
-
Fix chart onAction and onClick having no context
Details
onAction and onClick should have context just like onInit.
-
Fix keyboard shortcut popup content
-
Fix grouping by extra custom field in grid view
Details
Fix grouping by custom field defined on JSON field other than default
attrs. -
Fix too many redirects error in case of missing pac4j user profile
-
Fix missing
_domainActionfrom context of calendar in dashletDetails
The attribute
_domainActionis needed to reevaluate the context server-side. -
Fix hide issue on archive/attach/log grid built-in toolbar buttons
Details
hiddenattribute on built-in toolbar buttons wasn’t taken into account for archive/attach/log buttons.For example:
<toolbar> <button name="log" onClick=" " hidden="true"/> <-- Hide audit log button --> <button name="attach" onClick=" " hidden="true"/> <-- Hide attachment button --> <button name="archive" onClick=" " hidden="true"/> <-- Hide archive/unarchive button --> </toolbar>
6.0.0 (2022-05-20)
Changes
-
Re-implement action-ws using http client
-
Update join table columns names due to database reserved words conflicts
Details
Due to reserved words added in recent versions of supported databases, change columns name
groupsandmenusto respectivelygroup_idandmeta_menu_idin the join tables namemeta_menu_groupsandmeta_view_groups.Use these SQL statements to upgrade existing database :
ALTER TABLE meta_menu_groups RENAME COLUMN groups TO group_id; ALTER TABLE meta_menu_groups RENAME COLUMN menus TO meta_menu_id; ALTER TABLE meta_view_groups RENAME COLUMN groups TO group_id; ALTER TABLE meta_view_groups RENAME COLUMN views TO meta_view_id; -
Upgrade from Guice 4.2.2 to 5.1.0
-
Remove
com.axelor.event.Priorityin favor ofjavax.annotation.Priority -
Not allowed to customize the search engine grid
-
Upgrade to Hibernate Search 5.11.10.Final
-
Search engine improvements
Details
The search engine view has been improved. It allows to implement recursive filters for more flexibility on the search condition, but also:
-
Add support for
Enumfield type in search fields. -
Allow to define
limiton eachselect. It gets preference overlimitattribute ofsearch. -
Add support for
enumandselection(also autodetectmulti-selectvalues) for fields in result fields. -
Add support for returning only distinct records (based on
id) on eachselect. -
Allow to add an
ifcondition onwhere. It the value of the expression is false, the element is skipped. -
Add support for hiliting on row as well as on field.
-
Add support for adding buttons in grid view.
Breakings changes:
-
The
orderByfields should refere to field names of the object graph (and no more theasattribute). -
When searching on a multi-valued field (O2M/M2M), it shouldn’t need to be suffixed with [] anymore. For example,
items[].productshould now beitems.product.
-
-
Improve groups and jobs
data-initDetails
The default
adminsgroup is now marked as technicalStaff. The defaultmail.fetcherjob is no more active by default. -
Upgrade to StringTemplate 4.3.3
-
Format numbers, dates, and currencies preferably according to the user language
Details
Formatting of numbers, dates, and currencies used to be based on browser locale only. Now, formatting is done preferably according to the user language. If the user language has no country information, we select the first browser locale that matches the user language.
-
Upgrade to Guava 31.1-jre
-
Rename
application.propertiestoaxelor-config.propertiesDetails
The internal configuration file
application.propertiesis renamed toaxelor-config.properties -
Upgrade from JDK 8 to JDK 11
-
Upgrade to Spotless 6.5.1
-
Use jcache in combination with Caffeine as second-level cache provider
Details
Ehcache2 second-level cache is deprecated since Hibernate 5.3. Use
jcachein combination with Caffeine by default as second-level cache. -
Rework actions on chart menu
Details
Adding buttons on chart menu was working using the following syntax :
<config name="onAction" value="some-action"/>This syntax has been updated to the following :
<actions> <action name="myBtn1" title="My action 1" action="some-action1"/> <action name="myBtn2" title="My action 2" action="some-action2"/> </actions>
This allows to support more than 1 button on chart menu, but also provide a flexible usage of the feature.
-
Upgrade PostgreSQL Jdbc to 42.3.4
Details
This add support new
SCRAM-SHA-256password encryption method which is now the default password encryption method is PostgreSQL 14.Jdbc also introduce a change about Timestamp rouding : 2018-06-03T23:59:59.999999999 is rounded to 2018-06-04 00:00:00 (previously it was rounded to 2022-03-08 23:59:59.999). This new behavior follow psql’s suit. Especially if you work with Datetime/Timestamp having
LocalTime.MAXas time, make sure to adjust your query. -
Adopt a better configurations naming
Details
A lot of configurations names has been updated to have better and uniform naming across all settings. Refer to migration notes.
-
Support indirect/direct basic auth client via setting
auth.local.basic-authDetails
Indirect basic auth allows to log in on callback, while direct basic auth requires credentials in each request.
# enable indirect and/or direct basic auth auth.local.basic-auth = indirect, directauth.local.basic.auth.enabled, which was for direct basic auth only, is removed. -
Upgrade to Hibernate 5.6.8.Final
Details
Most notably, positional parameters for native queries are now one-based.
-
Upgrade to intl-tel-input 17.0.16
-
Upgrade to Gradle 7.4.2
-
Fire PreRequest and PostRequest events outside of transactions
Details
PreRequest/PostRequestevents are now fired outside of transactions. This fixes accessing the created/update records in a multithreaded process fromPostRequestobservers. However you can no longer rollback the request process in aPostRequestobserver. -
Upgrade to Apache Tomcat® 9.x
-
Upgrade to pac4j 5.4.3
-
Reimplement code generator in Java
Details
Dropped old code generator written in Groovy in favor of a new code generator written in Java.
-
Upgrade JUnit4 from 4.12 to 4.13.2
-
Upgrade from Groovy 2.4.10 to 3.0.10
Details
Beware of breaking changes. See release note for more details :
-
Merge
com.axelor.appandcom.axelor.app-modulegradle pluginsDetails
Now there is only a single
com.axelor.appplugin. All modules should use the app plugin only.Now all axelor modules are axelor apps.
-
Upgrade to Hibernate Validator 6.2.3.Final
-
Default gantt view mode is now
monthinstead ofweekDetails
This can be changed on
<gantt>view definition using themodeattribute. -
Upgrade to Shiro 1.9.0
-
Replace nashorn script helper with GraalJS engine
Details
The nashorn script engine is deprecated in JDK-11 and has some incompatible changes than JDK-8.
The new implementation uses GraalJS which supports latest ECMAScript features.
The collection helpers
listOf,setOfandmapOfare removed as corresponding native JavaScript objects are passed with appropriate Java equivalent wrapper to the Java calls. -
Rename method
getCodeOrEmailtogetUserIdentifierinAuthPac4jProfileServiceDetails
Use a more generic method name, because users may override and use custom behavior.
-
Rework authentication implementation to use reflection and providers
Details
Reflection is now used to configure authentication clients. The new syntax is
auth.provider.<providerName>.<configurationName>. You may use any of the built-in providers:google,facebook,github,azure,keycloak,apple,oauth,oidc,saml,cas. Or you can configure any other clients supported by pac4j using your own custom provider name. You may even create and use your own custom authentication clients. -
Upgrade to Quartz 2.3.2
Features
-
Allow to customize notify/info/alert/error message modal/notification
Details
This allow to add more customization on modal/notification :
-
notify: allow to change the title of the notification -
info: allow to change the title of the popup and the title of the confirm button -
alert: allow to change the title of the popup and the title of the confirm and cancel button -
error: allow to change the title of the popup and the title of the confirm button
Example usage:
<action-validate name="my-action"> <notify message="A notification" title="My notif"/> <info message="This is an info" title="My info" confirm-btn-title="Got it"/> <alert message="This is an alert" title="My alert" confirm-btn-title="Got it" cancel-btn-title="Abort"/> <error message="This is an error" title="My error" confirm-btn-title="I understand" cancel-btn-title="Do something else"/> </action-validate>or with
ActionResponse:response.setNotify("A notification", "My notif"); response.setInfo("This is an info", "My info", "Got it"); response.setAlert("This is an alert", "My alert", "Got it"); response.setError("This is an error", "My error", "I understand", "Do something else"); -
-
Parallelize generation of computed views
-
Use Gradle Node Plugin to run npm tasks
Details
No more need to install Node.js locally to build web resource bundles, aka
npm-buildtask.If your project already depends on
gradle-node-plugin, there will be conflicts between both. As the provided plugin is only applied on root project, the best fit is to delegate the process to a subproject. That way, the subproject can process and build your needs, and the root project can depends on that subproject and gets produced build.To use it, you need to Declare Node.js repository in
settings.gradle, sectiondependencyResolutionManagement:// Declare the Node.js download repository ivy { name = "Node.js" setUrl("https://nodejs.org/dist/") patternLayout { artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") } metadataSources { artifact() } content { includeModule("org.nodejs", "node") } } -
Implement WebSocket support
-
Add support to encrypt secrets in properties
Details
Secrets defined in
axelor-config.propertiescan be encrypted. Value should be wrapped inENC()to indicate that the value is encrypted :db.default.password = ENC(<some_thing>)To use encrypted secrets,
config.encryptor.passwordproperties should be added : this is the secret key used to encrypt/decrypt data.Others optional properties can be added to use custom encryption :
config.encryptor.algorithm,config.encryptor.key-obtention-iterations,config.encryptor.provider-name,config.encryptor.provider-class-name,config.encryptor.salt-generator-classname,config.encryptor.iv-generator-classname, andconfig.encryptor.string-output-type. The default algorithm isPBEWITHHMACSHA512ANDAES_256.For convenience, a Gradle task
encryptTexthave been added to generate the encrypted value of a string :./gradlew :encryptText --text="A secret to encode" --password="MySecureKey"This will generate for you, the necessary properties and the encrypted value to used insideENC(). -
Add application setting
auth.orderto set authentication provider orderDetails
Because of multisource application settings, settings order is undefined. Use
auth.orderif you require authentication providers to be displayed in a specific order on login page. -
Add JpaRepository#findByIds(List<Long>) method to find multiple entities by their primary key
-
Add support to MySQL 8
-
Allow closing preference view manually with
canCloseorcloseaction -
Add validation support for csv import
Details
Two new attributes added to validate data being imported.
-
check- boolean expression -
check-message- the validation message
If
checkfails, thecheck-messageor default validation message is shown and import will be terminated. -
-
Add Gantt view attribute
modeDetails
Gantt view attribute
modeallows to define the default view mode. It can be set toyear,month,week, orday. -
Add some predefinied css classes for dialogs and notify components
-
Sanitize HTML where it is needed with DOMPurify
Details
Instead of sanitizing all jQuery.html calls, use DOMPurify to sanitize HTML where it is needed only. This should reduce scripting load in the web client.
-
Perform accent-insensitive navigation search
-
Refactoring menu and tags processing
Details
This is a refactoring on how menus and tags are processing. The original way was complex and mixing tags and menus rules in a single method. There is no changes on how it works.
Now, menus and tags processing are separate. Moreover, instead of parsing each menu one by one (but also recursively checking parent access), it builds a tree. The tree is a representation of the menus' hierarchy, where each menu have a parent and some child’s. Then the tree is traversed, checking each node access. When a node is allowed, it continues traversing each child’s. When a node is not allowed, it skips the node and all the child’s.
-
Support YAML configuration format, env variables and system properties
Details
Now support YAML format for internal configuration file :
axelor-config.propertiescan be in YAML format (ymloryamlext). It should only have a one internal configuration file (in properties or YAML format).External configuration file can be provided by using system properties (
axelor.config=<path_to_file>) or using env variables (AXELOR_CONFIG=<path_to_file>). Same as the internal configuration file, it also supports YAML format.The internal configuration file is now optional. Final properties are built using internal configuration file + external configuration file + env variable + system properties. If variables are redefined, they will take preferences over the previous values.
Configuration values can also be provided with system properties using
axelor.config.<key>=valueformat. For exampledb.default.userbecomesaxelor.config.db.default.user.Configuration values can also be provided with environment variables using
AXELOR_CONFIG_<key>=valueformat, where<key>is underscored uppercase equivalent of the configuration key. For exampledb.default.userbecomesAXELOR_CONFIG_DB_DEFAULT_USER. -
Add
QuickMenuto allow running actions from default pageDetails
Example usage:
public class MyQuickMenu implements QuickMenuCreator { @Override public QuickMenu create() { final QuickMenu menu = new QuickMenu(); menu.setTitle("My menu"); menu.setOrder(0); menu.setShowingSelected(false); menu.setItems( List.of( new QuickMenu.Item("All projects", "project.all"), new QuickMenu.Item("All tasks", "project.task.all"))); return menu; } }and register the QuickMenu in module configuration :
public class MyModule extends AxelorModule { @Override protected void configure() { addQuickMenu(MyQuickMenu.class); } } -
Improve index generation
Details
We can now specify order on column names with
ASCorDESC. Some examples:<index columns="code,name"/> <index columns="code ASC,name DESC"/> <index columns="code,name DESC"/>We can also specify whether the index is unique.
<index columns="code,name" unique="true"/>This will replace and makes
<unique-constraint ... />obsolete in future. -
Allow to enable/disable cache from
axelor-config.propertiesDetails
jakarta.persistence.sharedCache.modeproperty inaxelor-config.propertiescan be used to overwrite theshared-cache-modefrompersistence.xml. It allow to enable/disable the shared cache mode (ie second-level cache). -
Add support to manage multiple matching notify in
action-validate
Fixed
-
Fix undefined when calling search engine with route params
-
Fix secure cookie on login attempt or change tenant request
-
Prevent concurrent meta restoring
-
Fix usage of multiple matching
infoinaction-validateDetails
In
action-validate, if there is multipleinfomatching, only the first will be displayed on UI. -
Fix radio style for grid selector
-
Fix MySQL exception reporting
-
Use whole value comparisons in datetime searches instead of using
betweenoperatorDetails
PostgreSQL JDBC driver 42.2.3+ introduce a change on how Timestamp are rounded : https://github.com/pgjdbc/pgjdbc/issues/1211
For example,
2018-06-03T23:59:59.999999999is rounded to2018-06-04 00:00:00Previously2018-06-03T23:59:59.999999999was rounded to2022-03-08 23:59:59.999If nanoseconds is greater than 999999500 , value is now rounded. This is how PostgreSQL works :
$ insert into some_table(date) VALUES('2018-06-03 23:59:59.999999999'); date ---------------------------- 2018-06-04 00:00:00The
betweenoperator used when searching on date/dateTime in UI have been updated to use>=and<operators instead. -
Fix JAXP usage
Details
Thread safe usage of JAXP API. Use
XMLUtilsto protect XML Parsers from XXE attacks but also disable external entity processing.
Removed
-
Remove deprecated usage of
hashKeyandhashAllattributesDetails
Use
equalsIncludeandequalsIncludeAllinstead. -
Remove deprecated
Query#fetchSteammethodsDetails
Use
Query#fetchStreaminstead. -
Remove domain model lang attribute
Details
Domain models are generated in Java only.
-
Remove dependency to OpenCSV
-
Remove deprecated
ActionHandler(ActionRequest)methodDetails
Use
ActionExecutor#newActionHandler(ActionRequest)instead -
Remove deprecated
Context#getParentContextmethodDetails
Use
Context#getParentinstead. -
Remove deprecated
cachabledomain attributeDetails
Use
cacheableattribute instead. -
Remove ModuleChanged event
Details
Since dropping support of removable modules, this event is no more used.
-
Remove deprecated
LoginRedirectExceptionDetails
Use
WebUtils.issueRedirectinstead. -
Remove IDE app launcher support
-
Remove
setFlashinActionResponseto be aligned withaction-validate#infoDetails
Use
setInfoinstead. -
Remove legacy form widgets
<notebook>,<break>,<group>,<portlet>, and<include>Details
Form widgets
<notebook>,<break>,<group>,<portlet>, and<include>are deprecated.colsandcolWidthsform attributes used for legacy form layout are also deprecated. Those have be removed. Use panel layout instead. -
Drop removable module support
Details
The feature is not used by any axelor apps and has many technical issues.
Run following SQL script to drop unnecessary columns
alter table meta_module drop column installed; alter table meta_module drop column removable; alter table meta_module drop column pending;