9.3

Last modified: October 17, 2023

9.3.0

Release date: June 29, 2021

Go to Marketplace

New Features

  • We implemented a toggle switch for the MxAssist Logic Bot in the microflow editor, and we removed the Ready/Thinking indicator.
  • We added support for closing Multiple and All pages when using the Close page nanoflow activity in web applications.
  • We deprecated the experimental metrics API and introduced a new non-experimental Metrics API (as part of the Mendix Runtime API) where you can record metrics such as counters, timers, and gauges. For details, see metrics and Interface Metrics.

Improvements

UI Resources Modules

We have re-introduced the UI resources modules (which appear as green in App Explorer). It is now possible to mark modules as UI resources, making it easier to distinguish these modules. This also allows you to influence the order in which styling is applied from those modules.

From Studio Pro 9.0.5, modules can include styling using the themesource folder. By default, styles are added to the CSS in the following order:

  1. Marketplace modules (alphabetically).
  2. UI resources modules (alphabetically).
  3. User modules (as ordered in Studio Pro).

With this release, we added more control to the order in which these styles are applied by introducing an app level setting (under the Theme tab) that allows you to change the order of the UI resources modules completely to your liking. This changes the order in which the themesource styling is added to the compiled CSS, and enables fine-grained control over which styles should have more precedence in the browser.

Pluggable Widget Capabilities

With this release, we give pluggable widgets more control over the data source by adding support for sorting and filtering, which is also used in our Data Grid 2 module.

A pluggable widget can now dynamically control the sort order of the data source by calling setSortOrder on the ListValue.

With the setFilter on ListValue, powerful filter options can be implemented with some easy to use helper functions. This can be a simple filter condition on a single attribute, or you can create an advanced filter by combining multiple filter conditions.

Note that paging is already possible using setOffset and setLimit on ListValue.

With these features, you can create rich widgets, such as a grid that gives end-users the option for sorting, filtering, and paging.

Other Improvements

  • We added support for the following languages: Bengali, India; Bengali, Bangladesh; Kinyarwanda, Rwanda; Punjabi, India; Punjabi, Pakistan; Sinhala, Sri Lanka; Tamil, India; Tamil, Sri Lanka; Tamil, Singapore. (Ticket 121467)
  • We improved how the native drop-down widget renders menu items on larger devices. (Ticket 122196)
  • The View App menu in the top bar is now a split button. You can click it to directly execute the latest-used view action. When the down arrow on the right is clicked, a drop-down menu with all options is shown.
  • When the new merge algorithm is enabled, you will no longer see cryptic identifiers in changes. For example, when changing an arrow in a microflow to point to a different element, you will now see a proper description instead of the under-the-hood identifier.
  • We improved performance in the microflow editor when you hover over microflow objects when MxAssist Logic Bot is enabled.
  • We improved performance when MxAssist Logic Bot is used to create a microflow object.
  • We reduced the hover region size of MxAssist Logic Bot from 200px to 100px for better performance and user experience.
  • We added an MxAssist Logic Bot menu to the existing click-drag menu in the microflow editor.
  • Microflow actions related to workflows now have help links to the documentation.
  • We heard your feedback, so we have made the workflow editor more concise.
  • When using the Call workflow event, you can now discard the workflow variable.
  • We enabled more flexibility for creating a powerful design system module with Atlas 3 by adding module-level theme settings, in which you can exclude content from other modules. This gives you full control over filtering content like design properties from modules such as Atlas_Core or navigation layouts from other Marketplace modules.
  • You can now provide theme content (for example, a login.html file) with your modules by adding them to a folder named public inside the corresponding themesource folder. These files will be copied to the deployment/web folder on deployment.
  • You can now use the reference selector widget inside a containment or repeatable containment pluggable widget (except when you use both Constrained By and Select using > Drop-down).
  • From now on, a reference selector widget on a native page automatically sorts the items it shows even if you have not configured the sort order explicitly. This is aligned with how the widget behaves on the web.
  • We made it easier to consume OData services that do not specify the max length of key properties in their contracts. You can now specify the max length in the domain model.
  • We improved the startup of the runtime by not registering handlers for REST, OData, and web services when the model does not contain any REST, OData, or web services, respectively. This has several advantages: it makes your app start up slightly faster, there are fewer log messages at startup, and it follows the security best practice of endpoint hardening.
  • The license server now respects the following JVM proxy options: https.proxyHost, https.proxyPort, https.proxyUser, https.proxyPassword, and http.nonProxyHosts.
  • We now log the addition of request handlers and WebSocket endpoints.
  • We upgraded akka-actor, akka-slf4j, and akka-stream from 2.5.25 to 2.6.14, akka-stream-alpakka-xml from 1.1.2 to 3.0.1, and akka-http and akka-http-spray-json from 10.1.8 to 10.2.4.
  • We improved the performance of the Build deployment structure step when building your app. The time needed for Exporting pages decreased up to 60%, and Exporting metadata decreased up to 90%.
  • We updated deprecated MIME types for fonts.
  • We improved the handling of streaming content to a client that disconnects.
  • We now cache XPath query transformations in the Mendix Runtime server to speed up overall XPath execution times.

Fixes

  • We fixed an issue where the reference selector widget did not clear its value even when that value was not present in the output of its data source. The old behavior is now used when Constrained By is configured. (Tickets 95691, 115158)
  • We fixed an issue where extra newlines were added to the end of an expression when typing in the expression editor. (Tickets 101033, 103209, 105990, 107049, 107239, 114492, 115807, 115894, 116692, 116963, 118606, 119602, 122468)
  • We fixed the issue where the reference selector widget did not react to a change in access rules during a commit. (Ticket 102943)
  • We fixed an issue where temporary files and folders (like GPUCache) were created in the app directory, which led to unnecessary merge conflicts. (Tickets 105909, 106329, 107857)
  • We fixed an issue where running an offline-first app in a cluster produced warnings when trying to remove a non-existent session on another node. (Ticket 108018)
  • We fixed an issue in hybrid apps where adding allowed extensions caused unexpected behavior in iOS and Android. (Tickets 110248, 115364)
  • We fixed an error that occurred when refreshing the list of Team Server apps in the Open App dialog box. (Ticket 112763)
  • We fixed an issue where certain operations (such as adding or removing an entity) were very slow in apps with large pages that used a lot of expressions. (Ticket 119503)
  • We fixed an issue with the taskbar icon not blinking when a breakpoint was hit while debugging an app. (Ticket 120326)
  • We fixed an issue where it was not possible to navigate through a multi-select search field on a data grid using the keyboard. (Ticket 122123)
  • We fixed an issue where the Return key on the iOS keyboard in a data grid search field was not triggering the search. (Ticket 122129)
  • We fixed an issue where opening a page with outdated pluggable widgets threw an exception (Ticket 122407)
  • We fixed an issue where Ctrl + Enter did not close a pop-up window in certain cases. (Ticket 123041)
  • We fixed an issue that occurred when multiple rows were selected in the Changes pane and copied to the Windows clipboard via Ctrl + C, but only some of the rows were copied multiple times. (Ticket 123191)
  • We fixed an issue where running MxBuild in a non-Windows environment failed with a System.TypeLoadException and a message stating that the Windows.Foundation.UniversalApiContract assembly could not be loaded. (Ticket 126098)
  • We fixed a medium-severity security issue where write access could be bypassed in certain scenarios. (Fixed CVE-2021-33718)
  • We fixed an issue with the Call workflow event where Studio Pro tried to execute the workflow before it was fully initialized.
  • We fixed an issue with the Data Hub info pop-up location in a secondary screen with different resolution and scaling factor.
  • We fixed an issue where Data Hub pane could not be closed with the Shift + Esc shortcut.
  • We fixed an issue where viewing details for a change in the Changes pane led to an exception.
  • The Variables pane is now again opened automatically when a breakpoint in a microflow is hit.
  • We increased the size of the grid lines on the MxAssist Performance Recommendation dialog box so that they are visible on low resolution screens.
  • We fixed an issue where the MxAssist Performance Bot Limit to current tab button was interfering with open documents tabs.
  • We fixed an issue where MxAssist Logic Bot sent a common flow type to the server to make a suggestion instead of the exact type.
  • We fixed the behavior of allowed extensions when configured for the File Manager widget in iOS Safari on iPhone and iPad.
  • We fixed an issue where the List View Controls widget did not work in some cases when placed in a snippet.
  • We fixed an issue where a pluggable widget with an optional data source property and another property linked to that data source would trigger an error when deploying the app if the data source was left empty.
  • We fixed a runtime issue that occurred when filtering the metadata of a published OData service on entity access. When the user requesting the metadata does not have access to certain associations, they no longer see them in the metadata.
  • Setting the Jetty log node to the TRACE level will now correctly log Jetty debug information.
  • We fixed an issue in consumed OData services where only absolute URLs were supported in nextLink properties. Now, relative URLs are also supported.
  • We fixed a runtime issue in handling changes to AWS S3 storage settings in a running app where requests to only the settings about timeouts or CA certificates were not registered correctly and the old values were used. Now, the new values are used.
  • We fixed an issue where Studio Pro stopped responding after locking your computer or changing the Windows display settings.
  • We fixed a crash that occurred when conflicts after an update, merge, or reverse merge were only present on the files in the app folder and not on the app itself.

Deprecations

  • We dropped support for the Oracle 18 database, as it is no longer supported by the vendor.

Known Issues

  • In the Properties pane, you cannot copy, paste, or delete using keyboard shortcuts.
  • It is not possible to use Ctrl + Tab to switch between open tabs unless you have already selected a tab.
  • There is an issue with the exporting of user metrics that results in the User Accounts and Login Sessions graph being empty for apps deployed to the Mendix Cloud.
  • There is a potential memory leak in scheduled events. If the action does not commit all of its changes, then the uncommitted objects will not be garbage-collected. For repeating actions, this can cause memory issues in the long run.
  • When you convert an app from Studio Pro 8 to 9 and merge a feature branch that has already been converted, you might see an error message when committing stating that the file inside the theme or themesource folder already exists.