10.19
10.19.0
Release date: January 28, 2025
New Features
Online Synchronization Mode (Beta)
We introduced a new feature for offline apps, Online Synchronization Mode (Beta), that allows app developers to define specific entities as online available. Defining an entity as online available means that the offline app will execute queries on these entities on the Mendix Runtime Server instead of the offline database. Of course, this is only possible when the app has an internet connection. Employing this feature reduces the need to have to synchronize more data then strictly necessary for offline apps as certain parts can become only available when having a connection.
These entities can be configured as online available by configuring the synchronization mode in the offline navigation profiles. A new option has been introduced (Online) to be selected per entity that you want to have this functionality for.
There are a couple of limitations on mixing online and offline entities in an offline app:
- Offline entities can associate online entities, but online entities cannot associate offline entities
- XPath constraints on offline entities cannot include associations to online entities (and note that XPath constraints on online entities that include associations from offline entities in the constraint, will be fully executed on the Mendix Runtime Server and not take the offline database into account!).
- Online and offline entities can be defined in the same inheritance hierarchy, however list queries on generalizations are not allowed (as that may result in mixed online and offline entity instances).
This feature is currently in Beta. It has to be explicitly enabled via the Edit menu > Preferences > New features tab > Offline section.
View Entities (Beta)
We added View Entities to the domain model editor. A view entity represents the result set of a named OQL query and can be used similarly to a persistable entity. This concept is similar to the function of views in general database technology. Whenever a view entity is retrieved via a page or a microflow, the corresponding OQL query executes to fetch the relevant data, meaning the results are calculated dynamically and are not stored in a table. View entities can also reference other view entities, allowing for more complex structures and better data organization. The View Entity Edit dialog box helps you write correct OQL queries by validating your query as you write, and by displaying a preview table that allows you to preview the resulting shape of your view entity using live data. For more information, see View Entities.
Other New Features
- We introduced OQL version 2, which contains changes in the OQL engine. For the list of changes, see OQL version 2 features. By default, OQL v2 is disabled. It can be enabled by setting the OQL version 2 app setting to Yes. You will have to switch to OQL v2 in order to use view entities.
- We added a feedback message for when users copy-paste interrupting boundary events. This message appears if an activity has reached its maximum allowed boundary events and the user attempts to add another one.
- We introduced a new feature for the External Database Connector that uses an updated approach for connecting to databases during design time. This functionality enhances consistency between design time and runtime environments. Make sure to run the app locally with the latest External Database Connector before connecting to the database and running a query.
Improvements
- We added logging for an object or an attribute found in XML or JSON payload but not mapped in import mapping document. (Ticket 213729)
- We added more support for SOAP arrays in Import mapping documents. Previously, only array objects with
item
as a name were supported. Now, any name is allowed for array objects. (Ticket 213729) - Current object tokens in XPath constraints are now checked if the type of the current object token matches the expected type in the XPath constraint expression. (Ticket 223428)
- We no longer prefix the resulting variable name of list operation actions with “new”.
This is based on an upvoted idea from Maarten Bongers submitted to the Mendix Community. Thanks, Maarten!
- It is now possible to select and wrap multiple widgets in a container by right-clicking the context menu.
This is based on submitted ideas from various users: Ceydanur Bakanoğlu, Bart Heijs and several others. Thank you all!
- When double-clicking a consistency error of an access rule in the Errors pane of Studio Pro, we now open the access rule editor with the edit view for this access rule. This improvement is for the Beta release of the new access rule editor only.
- In the new entity access rules editor, we now disable the toggles for entity rights and the member access when the entity lacks the corresponding capability.
- We added support to the new access editor to set the default access level for new members.
- We improved the XPath constraint syntax. A path ending with an entity can now be compared to an object variable without the need to specify
/id
on the variable. For example,[Module.OrderLine_Order/Module.Order=$currentObject]
is now a valid constraint. - We added a progress pop-up window when renaming, including or excluding a document/module in the App Explorer.
- We improved the Move document dialog box:
- We removed the context menu from the dialog box.
- We added an option to create a new module or folder in dialog box.
- We removed the Show option.
- We made Studio Pro to use the legacy Expression editor by default on Windows. The modernized version can be activated via the preferences.
- We reduced the time it takes to cancel the process of building an app in Studio Pro.
- Cancelling while running locally now happens faster during the Build deployment structure phase.
- We improved the way Studio Pro opens dialog boxes, which should reduce the number of issues with Studio Pro freezing because blocking dialog boxes are not visible. Also, this fixes some issues with pop-ups and menus appearing in the wrong location.
- When installing Studio Pro, the ARM version of the Java Development Kit is installed on computers with an ARM CPU.
- We made the Commit dialog box faster and more responsive, which makes it smoother to use.
- When using PostgreSQL or MariaDB/MySQL and a
DatabaseJdbcUrl
that starts withjdbc:aws-wrapper:
we now use the AWS Wrapper JDBC Driver to connect to the database. - We have enhanced the Consumed REST Service editor on macOS by enabling copy and paste functionality via the context menu for the URL field.
- We improved the Integration pane for macOS, which now features an improved design. It also now uses the v5 Catalog Search API and lists search results in order of relevancy, instead of alphabetically.
- Published OData services can now use an authentication microflow that takes a List of System.HttpHeader as a parameter. For newly created authentication microflows, this parameter will be added by default.
- We changed the colors of the CRUD capability indicator when editing an external entity. This makes it more easy to read in dark mode.
- We improved the behavior of Studio Pro when you delete a private constant value from a configuration. Studio Pro now no longer keeps the private value stored in the settings.
- For mobile database library, we switched from
@mendix/react-native-sqlite-storage
to@op-engineering/op-sqlite
. This improves the following:- Database execution are faster on Android devices
- Removes the reliance of native encryption support for databases
- We introduced a new method - IMendixObjectMember.isChanged. Returns
true
if the state of the member has changed. - We introduced a new method - IMendixObjectMember.isValueChanged. Returns
true
if the value of the member is different from the original value. - We introduced a new method - IMendixObject.hasChangedMemberValue. Returns
true
if the value of any member has changed from its original value. - We implemented the method
com.mendix.systemwideinterfaces.core.IMendixObjectMember.getOriginalValue
for database binary members (com.mendix.core.objectmanagement.member.MendixBinary
). The rollback functionality will work for this member type from now on. - We added tracing information in
LogMessage
in the logging API. This can be used by log subscribers. - For the
console_json
log subscriber we now include tracing information, ifincludeTracingInformation
is set totrue
when creating the log subscriber. AdditionallytraceIdAttribute
andspanIdAttribute
can be passed to configure what the attributes of the trace and span IDs should be in the output JSON log. - We changed the way that OpenTelemetry is configured for the tracing beta. The project should now run with the OpenTelemetry Java agent in order to configure and enable tracing. The runtime settings related to tracing were removed.
- We made the usage of the variable name more consistent when adding Java or JavaScript action calls from the Toolbox, toolbar, App Explorer, or Logic Recommender.
- We expanded the message that is logged when a runtime operation fails to be executed for security reasons with a short description of that runtime operation.
- We updated the widget conversions to a combo box to include the read-only style of a drop-down, a reference selector and an input reference set selector.
- We updated the External Database Connector, which now supports connecting to any database by using the Java dependency specified by the user for the respective database in the module settings.
- We updated remaining button labels in the Changes pane to use local and server instead of mine and theirs for selecting the source when resolving file conflicts.
Fixes
- We fixed a Windows-specific issue where temporary files created for images upload were not cleaned up. (Ticket 181323)
- We introduced a consistency error when the data source was an entity path with steps traversing from a local to an external entity. (Ticket 203958)
- We fixed an issue in published OData services using custom authentication. The authentication microflow read the body of the request, making it unavailable to the microflow implementing the request. (Ticket 230628).
- We fixed an issue where filtering over system associations owner and changedBy in a Data grid 2 column failed to render. (Tickets 231167, 233168)
- We fixed an issue where list view item actions were not working correctly in the native client. (Tickets 232033, 237875, 238176)
- We improved the memory usage of the Dojo client when running an app for an extended period of time by fixing several memory leaks that occurred when opening thousands of pages. (Ticket 232228)
- We fixed an Oops pop-up window that appeared when opening the View on Your device dialog box while running an app with navigation profiles of the same kind. (Ticket 233598)
- We fixed an issue with conversion where variables on a page were presented in a different order. This issue caused certain widget event actions to change when upgrading to Studio Pro 10.4 or above. Specifically the arguments of Call Microflow and Call Nanoflow referring to a selection were changed if the widget was nested in another widget exposing the same entity. Note that this change does not correct previously converted apps which may now have an unintended argument configuration for Event Actions. (Ticket 233988)
- We fixed an issue where the date format changed from ‘dd-mm-yyyy’ to ‘dd-mm-y’ when upgrading to Java 21. (Ticket 234598)
- We fixed a bug in the text box and text area widgets where the caret sometimes jumped to the end of the text during typing when the While user is entering data on change behavior option was used. This occurred when a neighboring widget used the same attribute in an expression, for example, for Conditional Visibility. (Ticket 234672)
- We fixed an issue where using the S3 storage service resulted in a warning like If you are using Java 9+, you will need to include javax.xml.bind:jaxb-api as a dependency. (Ticket 235163, 235904)
- We fixed an issue in the serialization of the request body of Call REST actions that use a custom request template and Consumed REST operations that use a fixed string body. It now uses UTF-8 encoding instead of ISO-8859-1. (Ticket 235194)
- We fixed an issue where apps using the Dojo client broke due to browser extensions injecting scripts into the page. (Ticket 236663)
- We fixed an error in XPath constraint processing for the web client, that caused a System.ArgumentException: QueryConstraint not found exception in Studio Pro. (Ticket 236719)
- In the logic editors, we fixed the displayed output variable name for the Import with a mapping action. (Tickets 237120, 237336, 238026, 238771, 238994)
- In the logic editors, we fixed the issue where the naming dialog box did not appear when creating a microflow. (Tickets 237359, 238996, 239000)
- We fixed an issue in the task validation at the startup, which marked pending tasks with microflow arguments as Incompatible. (Tickets 237616, 238191)
- We fixed the case where the Offline Database was not properly cleaned after sign out operation. (Ticket 237830)
- We fixed the validation of pending tasks from a previous deployment, which failed in case there were optional microflow parameters.
- We fixed an issue where deployment failed when an entity had one system association (owner or changedBy) already in the database and a second one was added later.
- We fixed a bug in the error checking process that prevented errors for unknown model elements from being removed from the Errors pane.
- We fixed an issue that was causing the pluggable widget previews to display incorrectly in Structure mode.
- We fixed a bug where disposed tool windows were still considered active in the UI, causing Studio Pro to crash when the active editor changed.
- We changed the Expression editor on macOS to not use smart-quotes anymore.
- We fixed an error that appeared when selecting a Team Server app in the Branch Line Manager.
- System images are no longer visible in the Image Select dialog box for image widgets in the page editor.
- We fixed an issue with XPath collection parameters. An XPath collection parameter with a single element now has a proper type of conversion done like other parameters. This issue affected the workflow engine startup in cases where there was only a single workflow defined in the app.
- We fixed an error resulting in an app getting stuck when the internet connection was unstable.
- We now inform the user when sending a request in a Consumed REST service timed out instead of showing an error.
- We fixed an issue when renaming a constant that had a private constant value. The constant value now also gets renamed, so you do not have to enter the value again.
- We fixed an issue where the going-back behavior was not working correctly when users pressed back from nanoflow-based homepages.
- We fixed an issue in Studio Pro when setting a private value for constant. When it had no value and you wanted to set the empty value, Studio Pro would not save the empty value.
- We fixed an issue when rerunning an app locally from Studio Pro. Studio Pro did not recognize a change in a private constant value as significant enough to restart the app, leading to an instant update and the constant having the old value in the app.
- We fixed an issue in the error details reported by published OData services. For errors containing more than one error detail, such as when a client inserts an object with multiple required attributes missing from the request body, the order in which these details were produced was inconsistent. This inconsistency meant that changing the runtime version could alter the order.
- In the logic editors, we fixed an Oops pop-up window that sometimes occurred when deleting a microflow or nanoflow.
- In the logic editors, we fixed extracting microflows to correctly create parameters when variables were used in loops.
- We fixed an issue where Java actions instantiated in the wrong class loader. This caused a problem where user Java dependencies could not be accessed in static blocks in Java actions.
- We fixed an issue where if the application failed to reload, it did not restart.
- We fixed an issue with the Edit/Delete buttons in the Jar Dependency Exclusion dialog box, these buttons caused an error if the list was empty.
- We fixed an issue where using the offline web profile caused errors when sessions were being cleaned up.
- We received reports of multiple tasks being scheduled for the same scheduled event. To handle this situation gracefully, we now clean up the superfluous tasks on startup. Additionally we introduced extra logging to help diagnose these issues.
- We fixed an issue where migrating a Java 21 application reset the Java version to 11.
- We fixed error handling in Sign out actions for progressive web apps, which deleted local directories when they were empty.
- We fixed the typing suggestions for JavaScript actions when autocompleting in the macOS version of Studio Pro.
- We fixed an accessibility issue in tab container where if a tab was hidden, it still had an invisible tab stop.
Deprecations
- We deprecated CustomJavaAction. Please use UserAction instead. Studio Pro will now use UserAction as the base class of Java actions.
- We deprecated the
Core.resolveTokens(..)
method. Please useCore.evaluateExpression(..)
instead. - We deprecated
Core.executeVoid
method. Please useCore.execute
instead. - We deprecated
IMendixObjectMember.getState()
. You can useIMendixObjectMember.isChanged
instead. - We deprecated
ICore.isInDevelopment
. There is no replacement for this method. We recommend you to use constants instead. - We deprecated
ICore.buildException
. There is no replacement for this method. - We deprecated the
ActionHandler.setHandlerFactory(..)
method. It was meant for internal use only, there is no replacement. - We deprecated
UserBlockedException
. There is no replacement for this method.. - We deprecated the enum
com.mendix.m2ee.api.IMxRuntime.RuntimeState
in our internal M2EE API library.
Breaking Changes
- We reverted the fix for listening between widgets to continue after hiding the selecting widget, such as data grid 2, with conditional visibility. The issue will be addressed in a future release. (Ticket 206642)