7.4 Changelog

This page lists all the changes introduced in 7.4 releases. See also the release notes and the migration guide.

7.4.3 (2025-07-17)

Feature

  • Improve template rendering

    Details

    Previously, the React template component was being remounted entirely whenever the record context changed. This caused visible UI flicker and unnecessary teardown/re-initialization of the component, even when only the record data was updated.

    This fix ensures that the template component now mounts only once, and instead of remounting, it will re-render efficiently in response to changes in the record context. This preserves component in dom by react and eliminates the flicker, resulting in a smoother user experience during form changes.

    This impacts all fields viewers, label/static/help widgets, fields tooltip, kanban/cards/calendar/custom views.

  • Add React template support for ReportBox and ReportTable templates

Fix

  • Fix o2m header gets hidden on scroll

  • Fixes how the form context is prepared

    Details

    The way from context was prepared was creating issues. The form context is a concatenation of the action view context values and the view/record values. But it was created in the wrong order : instead of appending view/record context values first and then the action view context values, it is now the reverse. The view/record context values should be priority over action view context values.

    Means that if passing some data in action view context that can have the same names as the view/record context values, the latter will have priority.

    This fixes an issue with chart/search views search-field requests : the model was coming from the action view instead of the form itself. In case of chart and search views (without search-form), the model is by default com.axelor.script.ScriptBindings.

  • Fix box-shadow styles for nested panels

  • Fix evaluate readonlyIf attribute in form view

  • Fix handle save action in editable grid line

    Details

    When a "save" action occurs from a button inside an grid line, the save is now handle by the main record whatever if the grid is in edit or non-edit mode. It also ensure data integrity and correct state updates. The following sequence occurs :

    1. In case of non-edit grid mode, trigger the onChange of the current field, if any input is currently focused and value changed.

    2. Trigger the onClick action of the button to update the line data.

    3. As soon as a "save" action is detected, commit the line to trigger the onChange of the relational field.

    4. Finally, the save action of the main record is triggered with the updated grid data.

    5. Continue any pending action after the save.

    It is not recommended to update the record after the save. action-view/report/validate can still occurs.

  • Fix and improve NavMenu theming

    Details

    This fix few styles issues on NavMenu. As part of the changes, it also comes with improvements on NavMenu theming capabilities.

7.4.2 (2025-06-26)

Feature

  • Add processing indicators on login and reset/forgot password buttons

  • Provide better error message when filter name is already in use

Fix

  • Fix sync selection of collection in action context

  • Avoid full recomputation of extended views after view hotswap

    Details

    Modifying a view XML file that doesn’t contain view extensions incorrectly triggered a recomputation of all extended views.

  • Fix interpolation in error notification

  • Fix missed resources to watch in view watcher

    Details

    Finding paths was not thread-safe and could occasionally cause missing paths to watch.

  • Fix refresh-tab signal on active tab view only

    Details

    refresh-tab signal should be applied on active tab view, not on active view. Means that popups are excluded and only active tab view is reloaded (whatever view type is).

7.4.1 (2025-06-10)

Feature

  • Allow to provide additional java mail properties

    Details

    Allow to provide additional java mail properties for smtp and imap from properties file. Any java mail properties can be added using mail.<protocol>.properties. prefix.

    For example : mail.smtp.properties.mail.smtp.ssl.trust = <host-name-of-mail-server>

  • Add selection or enum type in field help popover

  • Add parent field in dms view details

Fix

  • Fix prevent executing multiple time the same action if already in progress

    Details

    It will prevent executing multiple time the same action if already in progress. Mostly related to save click in form view or popup dialog buttons.

  • Fix saving customized grid view

  • Fixed the order of actions on the buttons in the grid customize popup

    Details

    In the grid customization popup, the reset and save buttons should first trigger the process. Then, if the action completes, close the popup. So that in case of error, the popup doesn’t close prematurely.

  • Fix calling repository populate on read web service

    Details

    read record by id using GET method (ws/rest/<model>/<id>), should call the entity repository like any other web services that returns data.

  • Fix grid rendering issue on sorting

    Details

    Avoid grid unmount/mount during search requests causing some grid state resetting (scroll positions, …​)

  • Fix pass context to o2m inline editable widget

  • Fix set default country in phone widget

  • Fix menuitem schema causing wrong reload on overridden menuitem

  • Fix mask input on date picker input

    Details

    On widgets using a mask (date/time,…​), previously adding characters causes existing characters to advance. And deleting characters causes existing characters to move back. Now adding or deleting characters will not affect the positions of existing characters.

    On date/datetime, it also validates date parts (days/months/years) for valid inputs.

  • Fix can* attributes evaluation on form view

    Details

    can* attributes (canNew, canEdit, …​) on form view allow javascript expressions and should be evaluated against the associated context.

7.4.0 (2025-05-15)

Feature

  • Add maven group id to module meta data

    Details

    The maven group id of the module is now stored in axelor-module.properties.

  • Fix view schema deserialisation issues

    Details

    The view schema types are designed with JSON serialisation in mind. However, with the new studio designer, we also need proper JSON deserialisation support.

    • added missing annotations

    • added missing getter/setters

    • added missing subtype annotations

    • added x-json-model on to AbstractView to identify view by custom model

    • added id attribute to form/grid view items

    • fix widgetAttrs deserialization issue

    • use PanelField instead of base Field

    • fix duplicate type key in serialized view json

    • fix view width serialization issue

  • Add maintenance service

    Details

    You can define maintenance mode behavior by implementing MaintenanceService:

    import com.axelor.web.service.MaintenanceService;
    
    public class ContactModule extends AxelorModule {
    
      @Override
      protected void configure() {
        // (...module configuration)
    
        // Bind the maintenance service interface to your implementation.
        bind(MaintenanceService.class).to(MyMaintenanceService.class);
      }
    }
    public class MyMaintenanceService implements MaintenanceService {
    
      // Implement your maintenance mode logic.
      // By default, maintenance mode is never enabled.
      @Override
      public boolean isMaintenanceMode(User user, HttpServletRequest httpRequest) {
        if (/*custom logic*/) {
          return true;
        }
    
        return false;
      }
    }

    Default maintenance page is error-503.html located in src/main/webapp directory. Note that you are free to override it if needed, by putting your own error-503.html in the src/main/webapp directory of your module.

  • Implement batch saving of tracking messages/followers

    Details

    Optimized the saving of audit tracking messages and followers by implementing batch processing. This improves performance, especially during operations that generate many tracking entries.

  • Add data import permissions

    Details

    For the upcoming advance import/export feature (enterprise only), we need more fine grained data import permissions support.

    This change adds an additional canImport permission option for objects and fields.

    Run following SQL script to adjust auth_permission and meta_permission_rule tables changes :

    ALTER TABLE auth_permission ADD COLUMN can_import boolean;
    ALTER TABLE meta_permission_rule ADD COLUMN can_import boolean;

Change

  • Change enterprise edition usage

    Details

    Usage of the enterprise edition of the platform is evolving: it is no longer a matter of a single com.axelor:axelor-enterprise-edition module to rely on, but of different variant of the core modules.

    As of now, to use enterprise edition, remove the dependency com.axelor:axelor-enterprise-edition and add the property axelor.platform.ee = true in your gradle.properties. This will automatically update your dependencies to use requires and right EE modules.

Fix

  • Fix view shortcuts scoping

    Details

    The last popup view should be used as the target view tab.

  • Fix custom record filtering

    Details

    The Query instance obtained with MetaJsonRecordRepository#all(String) should filter custom records even if no additional filter provided.

  • Fix disable selection in readonly mode

    Details

    When selection widget is rendered in readonly, it should open selection through any interactive events like key press, key up/down or element click.

  • Fix view field hilite extension support

    Details

    Adding new hilite rules to fields were not working.