7.1 Changelog
This page lists all the changes introduced in 7.1 releases. See also the release notes and the migration guide.
7.1.5 (2024-08-08)
Change
-
Always retain filters in grid view action context
Details
On actions executed from grid views, we can fetch current filters applied on the view using
request.getCriteria(). it was initially only available if there are no records selected. To be consistent, it should also be available whatever records are selected or not. This shouldn’t have any impact. Selected records are available thought_idsin context, the current filter throughrequest.getCriteria(). -
Model field preferred over custom field when setting value
Details
When a custom field has same name of model field, action called from form view was updating field in form but action called from json editor was updating field in the json editor. This was creating confusion depending on where the action was called. To uniformize behavior, form field gets preference over custom field (if same name). This can be breaking change, but use a custom field name same as the model field one isn’t recommended.
Fix
-
Fix title not displayed on custom collection fields
-
Fix reload not triggered after notify if pending actions
-
Improve reference field data for json fields
-
Fix auto add new row in editable grid
-
Fix prefer hideIf over showIf in expression evaluation
Details
When widget defines both expression i.e. showIf and hideIf then it will first eval hideIf expression, if it returns true then it is considered to be hidden true else it will take and eval result of showIf expression.
-
Fix set custom fields attributes
Details
This fixes updating custom fields attributes in views.
Custom field that are part of the default
attrsjson field, attributes can be updated either without prefix (<attribute for="test" name="hidden" expr="eval: true"/>) or without prefix (<attribute for="attrs.test" name="hidden" expr="eval: true"/>), no matter where the action is triggered in the view. This means that whether the action is triggered from a field event or a button in the main form or from a field event or button inside a json field, it works same.For custom fields that are part of other json fields, attributes have to be updated with their respective prefix (
<attribute for="myOtherJsonField.test" name="hidden" expr="eval: true"/>) or if the action is executed inside the json field, attributes can also be updated without prefix (<attribute for="test" name="hidden" expr="eval: true"/>). -
Fix query domain on relational custom fields
-
Fix call save only when record is changed in popup editor
Details
When form contains dummy fields or x-dirty="false" items then when record is saved by clicking on ok, it should save record when those fields get changed regardless of form is not dirty.
-
Fix dirty issue for non-changed number value through action
-
Fix js expressions and attributes priority
Details
js expressions have the priority over attributes set with action-attrs.
-
Fix selection-in support for radio/checkbox select
-
Fix hide columns through action-attrs in collection
-
Fix ensure m2o value for json fields
-
Fix kanban column title writing mode
Details
When written vertically, multiline text should grow from right to left.
-
Fix details view should close on multiple selection of record
Details
When multiple records are selected in grid view then details view should be not open and should be close if opened.
-
Fix canEdit/canView on TagSelect widget
7.1.4 (2024-07-18)
Fix
-
Fix flashing issue on viewer in form view
Details
Viewers are rendered when the form is ready, means that record is fetched. This avoids flashing issue, especially with
Imageinside viewers. -
Fix update custom fields
Details
This fixes updating custom fields in views. Custom field that are part of the default
attrsjson field can be updated either without prefix (<attribute for="test" name="value" expr="eval: "some""/>) or without prefix (<attribute for="attrs.test" name="value" expr="eval: "some""/>), no matter where the action is triggered in the view. This means that whether the action is triggered from a field event or a button in the main form or from a field event or button inside a json field, it works same. For custom fields that are part of other json fields, they have to be updated with their respective prefix :<attribute for="myOtherJsonField.test" name="value" expr="eval: "some""/>. Bothaction-attrsandaction-recordare supported. -
Fix grid view pagination
Details
When we switch between grid to form and form back to grid, first time prev/next was having no effect.
-
Fix search-fields panel frame in search view
-
Fix set action attrs value with attribute
-
Fix original value for json field in form view
-
Fix popup should not open on click of expand in tree-grid/expandable
-
Add expression attribute support in tree view button
Details
Add support of readonly, hidden, hideIf, showIf, readonlyIf on tree-view button.
-
Fix entities updated/deleted in BeforeTransactionComplete observer
7.1.2 (2024-07-01)
Change
-
Add application.home link in user dropdown
Details
Starting from v7, the header logo doesn’t rely on the
application.homelink anymore but on the user home action if configured.application.homelink is now added in the user dropdown menu asHome pageitem.
Fix
-
Fix reset some user dummy fields on save
-
Fix zoom(scale) issue on mobile device
-
Fix null operator on collection field in advance search
-
Fix call search in search-view on tab refresh
-
Fix disable dashboard customize for mobile
-
Fix help widget display
-
Fix selection search field in chart view
-
Skip writing websocket IOException to log
-
Fix collection master-details widget styles
-
Add search-form support in search-view
-
Fix remove on form image widget
-
Fix dotted field lost on move in kanban view
-
Fix restore filter on search in calendar view
Details
In calendar view, when we select some user filters, then on change of month/week/day, it should be restored.
-
Improve tabs rendering
Details
Instead of hiding tab on unselect or deactivate by seleting different tab, Then it will use visibility:hidden style instead of display: none. Visibility will keep container height/width, so no re-calculation of style on select or activate.
-
Fix handle error in action response
-
Fix show/hide columns in tree grid
-
Fix search view rendering performance issue
-
Fix advance search bar position in toolbar
7.1.1 (2024-06-07)
Fix
-
Implement client side sorting in grid
-
Remove button on M2M only rely on canRemove attribute (not on the permission)
-
Fix nav menu/tabs pre-build color names
Details
This use pre-build color names hexadecimal code from
axelor-frontinstead of the ones defined inaxelor-ui. Also provide sass variables for all colors in order to re-use them. -
Add missing widgets on custom fields widget selection
-
Set AJAX resolver on all indirect clients
Details
This fixes default SSO authentication request blocked because of CORS policy.
-
Fix calendar icon overlap on date
-
Fix adding a row in editable grid with create permission only
-
Check create permission in action if no id instead of write
-
Merge response values from actions
Details
When a group of actions return values, instead of using the last action result, merge the values.
-
Fix export of custom fields on one-to-many and dashlet
-
Fix processing view widgets (not recognized some widgets depending on view)
-
Add missing transient annotation on cid field of enhanced Model
Details
This fixes cid field not marked as transient when Model class is enhanced. It was notably breaking advanced search export all.
-
Fix o2m editor validation issue
-
Fix fetch record after save in form view
7.1.0 (2024-05-28)
Feature
-
Don’t add CSRF token header/cookie for native clients
-
Implement phone widget with react-international-phone
Details
Widget is supported on form and grid view. The phone widget renders the field as a phone number link in readonly mode, and as a phone number input with a country/region selector in edit mode.
Compared to implementation in previous front-end,
x-custom-placeholderoption is no longer supported. -
Improve email pattern
Details
Allow to use any printable characters in local part. Also remove upper limit on domain tld size.
-
Disabled autocapitalize, autocorrect and spellcheck on login fields
-
Add view processors for processing views
Details
View processors allow to programmatically add view widgets. They are automatically discovered on application startup, and they are executed in module resolution order, after finding view in
MetaService::findView, which is used byviewAPI endpoint.Example:
public class MyViewProcessor implements ViewProcessor { @Override public void process(AbstractView view) { // Do something to the `view`. } } -
Allow send emails in edit mode
-
Add prompt support on button link variant
-
Support calendar event popover template
Details
Example:
<calendar name="sales-timeline" title="Sales Timeline" model="com.axelor.sale.db.Order" editable="true" eventStart="orderDate" eventStop="confirmDate" eventLength="8" colorBy="customer"> <!-- All fields that should be fetched, ie. used in template --> <field name="name" /> <field name="customer" /> <field name="orderDate" /> <field name="confirmDate" /> <!-- The template that will be displayed in the event popover --> <template> <![CDATA[ <> <ul> <li>{$fmt("customer")}</li> <li>{$fmt("orderDate")}</li> <li>{$fmt("confirmDate")}</li> </ul> </> ]]> </template> </calendar> -
Add search support on collection field in grid view
Details
This adds support to search if the target model as a target name available (ie namecolumn). Multi values search is also supported using ` | ` separator.
-
Add attach files button in popup forms footer
-
Add support to use domain with custom fields on level >= 1
Details
This adds support to use following domain :
self.myM2O.attrs.myCustomFied = 'some'. It was restricted to first level only. -
Add link action attrs support for button
-
Add expandable grid support
Details
Two types of expandable widgets are supported with collection field/grid view
1.tree-grid (widget="tree-grid") (only supported on form collection field)
<panel-related title="Items (Tree)" readonlyIf="confirmed" field="items" form-view="order-line-form" grid-view="order-line-grid" editable="true" onChange="com.axelor.sale.web.SaleOrderController:computeItems" widget="tree-grid" x-tree-field="items" x-tree-limit="2" x-tree-field-title="Add new item" > <field name="product" onChange="action-order-line-change-product"/> <field name="price" width="200" /> <field name="quantity" width="150" /> </panel-related>Options:
-
x-tree-field: used to define nested o2m field of order-line model (currently it’s same as order object i.e. items)
-
x-tree-limit (optional): used to specify limit to support nested tree structure.
-
x-tree-field-title (optional): by default it uses main title for sub items heading (title will only display when item contains no-sub items)
-
x-expand-all: in case of tree-grid, it’s enabled by default, it uses x-tree-field value as x-expand-all value. To disable it, we can pass
x-expand-all="false"
Note: onChange action will only work on top-level collection grid, while other actions defined like onNew/onLoad will work on nested editable grid line as well.
2.expandable (widget="expandable")
<panel-related title="Items (Expandable)" readonlyIf="confirmed" field="items" form-view="order-line-form" grid-view="order-line-grid" editable="true" onChange="com.axelor.sale.web.SaleOrderController:computeItems" widget="expandable" summary-view="order-line-nested" x-expand-all="items" />Options:
-
summary-view: used to define expandable form-view, if not specified then by default it will use form-view attribute.
-
x-expand-all: to enable expand all feature, you have to specify comma-separated list of nested expandable collection field if any.
Notes:
Actions like onChange, onNew, onLoad will work as per schema definition defined in order-form or order-line-nested form. Options like
x-tree-field,x-tree-limit,x-tree-field-titlehave no impact in case of expandable widget. Ifwidget/summary-vieware defined in specified grid-view, then it will automatically be used in panel-related, we don’t need it to specify. To disable it we can pass widget="one-to-many/many-to-many" depending on type of field. -
-
Allow open urls in edit mode
-
Don’t store session for direct basic auth
-
Add support to fetch graph with save and fetch requests
Details
We can now pass
selectmap to thesaveandfetchrequests to return object graph. Iffieldsandrelatedoptions are also given, they will be merged with the graph.The format of the
selectmap is as follow:{ ... "select": { "name": true, "customer": { "name": true }, "items": { "product": { "name": true }, "quantity": true "price": true } } } -
Add scatter chart support
-
Add area chart support
-
Support hilites on calendar view
Details
Support <hilite> elements on calendar view to define hiliting rules.
The hilite attributes are:
-
if: boolean expression condition
-
styles: comma-separated list of styles: fill (default), outline, stripe, strike, fade
-
-
Add toggle password visibility feature
Details
On password fields, this add a toggle icon at the end of the input in order to effortlessly hides/reveals password for enhanced security and convenience.
-
Add support to export collections fields
Details
Collection fields can now be exported. This can be enabled using
data.export.collections.enabledproperty. The default separator used is ` |. This can be changed using `data.export.collections.separatorproperty. -
Add call button link in phone widget edit mode
-
Add missing getters and setters for view element attributes
Details
Add missing getters and setters for view element attributes in package
com.axelor.meta.schema.views. -
Add support to identify collection items from save/action response
Details
The client can now set
cid(collection id) to unsaved collection items to identify the same from thesaveandactionresponses. -
Improve kanban UI/UX
Details
Kanban columns can now be collapsed. An 'x-collapse-columns' property has been added, accepting a comma-separated list of column names that should be collapsed by default (reference fields not supported). This comes with other visual changes such as pagination and minor fixes.
-
Add radar chart support
-
Add drawing widget
-
Add OpenAPI v3 specifications and Swagger UI
Details
OpenAPI v3 specifications are available at
%URL%/ws/openapiSwagger UI is available at%URL%/#/api-documentation
Change
-
Upgrade Jackson from 2.15.3 to 2.17.1
-
Upgrade Guava from 32.1.3 to 33.2.0
-
Upgrade Gradle from 7.5.1 to 8.7
Details
This upgrade Gradle from 7.5.1 to 8.7.
Upgrade the Gradle Wrapper to benefit from new features and improvements :
./gradlew wrapper --gradle-version 8.7This also include upgrade of Gradle plugins used.
-
Move view collaboration to Axelor Enterprise Edition
-
Upgrade Undertow from 2.2.28 to 2.2.32
-
Upgrade Woodstox from 6.5.1 to 6.6.2
-
Load Monaco editor resources from local instead of from CDN
-
Upgrade Redisson from 3.19.3 to 3.29.0
-
Re-introduce multi-tenancy support
Details
Clients without session support (e.g. basic auth) should provide
X-Tenant-IDheader with every requests to select a tenant.Clients with session support should send
X-Tenant-IDheader with login request. -
Upgrade PostgreSQL JDBC from 42.7.2 to 42.7.3
-
Upgrade ASM from 9.6 to 9.7
-
Upgrade Apache Commons CLI from 1.6.0 to 1.7.0
-
Upgrade Apache Commons CSV from 1.10.0 to 1.11.0
-
Update fullcalendar from v6.1.9 to v6.1.11
-
copyWebapp Gradle task excludes hidden files only
Details
copyWebapp Gradle task used to exclude development files used by previous axelor-web front-end. Now, it excludes hidden files only.
-
Upgrade Junit5 from 5.10.1 to 5.10.2
-
Upgrade Apache Commons IO from 2.15.1 to 2.16.1
-
Upgrade Jsoup from 1.17.1 to 1.17.2
-
Upgrade pac4j from 5.7.2 to 5.7.4
-
Upgrade SLF4J from 2.0.9 to 2.0.13
-
Move SSO authentications to Axelor Enterprise Edition
-
Upgrade Apache Tika from 2.9.1 to 2.9.2
-
Upgrade Tomcat from 9.0.84 to 9.0.88
-
Upgrade Groovy from 3.0.20 to 3.0.21
-
Upgrade Byte Buddy from 1.14.11 to 1.14.14
-
Upgrade Hazelcast from 5.3.6 to 5.3.7
-
Upgrade Infinispan from 13.0.21 to 13.0.22
-
Upgrade Ldaptive from 2.2.0 to 2.3.2
-
Upgrade Snakeyaml from 1.33 to 2.2
-
Align rendering and styles between card and kanban views
Details
This align rendering and styles between card and kanban views. Mostly impact kanban views, some predefined styles as been removed in react template (img, h4). See migration notes.
Remove
-
Remove ability to switch tenants after authentication
Details
At the initial stage of the multi-tenant implementation, it was allowed for a user to switch tenant. It was a convenient for testing and debugging. At this point it doesn’t seems to good option anymore, due to security risk and goal of multi-tenant. So the feature has been removed and no replacement is expected.
db.%tenant%.rolesproperty has been removed. -
Remove deprecated AppInfo in favor of InfoService
-
Remove unused expandable attribute from grid view
Fix
-
Fix search filter on relation field search
Details
Search filter should exclude searching on
idfield. Even if it’s mentioned in targetSearch, it should be excluded. -
Fix mass update on selection fields
-
Fix link button rendering styles
-
Fix valueExpr support for custom field
-
Fix update time in date-time widget
-
Fix icon position on form button widget
-
Fix calendar popover and mail message title locale time formatting
-
Fix generateCode circular dependency on self
-
Fix check edit permission in grid details view
-
Fix refresh panel-dashlet on record navigation
-
Fix reset tree-view on reload
-
Fix exclude colorField for search criteria in tag-select widget
-
Fix missing html support on form field title
-
Fix trigger onChange on enter key in date picker
-
Fix missing colOffset support on form field
-
Fix relation field popup selection conflicts in popper
Details
When relational field is searched using popup in advanced search or in mass update popper, the popper should remain open and should not affect any click event happens in selector popup wizard.
-
Fix technical information support on dashlet
-
Exclude non string type fields from search fields
-
Fix grid view search on limit change in pagination
Details
When we have already search on some columns in grid view then if try to change limit in pagination(pager) then it is sending payload without searched criteria.
-
Fix set value on date field through action
Details
When user cleared the value manually through backspace/delete After that if value is set through action then it should use/display that value in date/datetime input.
-
Fix update gantt taskEnd when it’s defined
-
Exclude archived M2O from selection
Details
When M2O is used as a selection (
NavSelectwidget or inKanban#columnBy), exclude archived records. -
Fix select input text on focus attribute in form field
Details
When focus is set through action-attrs, select input text.
-
Add missing customize feature on collection fields
-
Allow saving new record if user has create but no write permission
-
Disable progress when taskProgress is not defined in gantt view
-
Fix parent support in form field tooltip
-
Fix dirty form handling after grid button action
Details
This fixes dirty form handling for both editable and non-editable grid.
-
Fix button colors in view toolbar
-
Add missing tooltip on wkf widget
-
Fix calendar year dropdown
Details
This add support to scrollable year dropdown (+/- 50 years) and display the upcoming/previous arrows.
-
Fix dotted field target-name in tag-select widget
-
Fix fetch dotted fields in grid details view
-
Fix dragging grid row with parent container scroll
Details
If parent container has a scroll, it create dragging row issue : the dragging element isn’t at the right position. wheel scroll is now disabled to avoid unexpected behavior.
-
Fix relation field multiple selection in advanced search
-
Fix perms endpoint without id
Details
If permission is found, access should be granted in case of no id. Without id,
AuthSecurity::isPermittedhad ids[null]and access was granted if permission filter result count happened to equal 1.
Security
-
Fix links to cross-origin destinations
-
Fix checking permissions on export
Details
When exporting data, it should check permissions on each fields. For example, when exporting
currency.symbol, it should first check if user can exportcurrencyfield inOrderentity, then if user can exportsymbolfield onCurrencyentity.