7.6

Last modified: January 2, 2024

7.6.0

Release date: August 29, 2017

Go to Marketplace

Expression-Based Validation

After the introduction of client expressions for conditional formatting, we got very positive feedback, so we decided to make things even more expressive!

Starting with this release, you can use expressions to validate your input fields client-side. This is blazingly fast, as it does not trigger any request to the Runtime. This means it can be used in offline apps as well. You can use all the functions and tokens you are already used to in other client-side expressions. Additionally, we provide the special variable $value to represent the to-be-set value of the input.

We also added a couple of your most favorite validations—like required and e-mail—as predefined expressions. All you have to do is select them and they are ready to validate. You can also extend them according to your taste. How good is that?

Improved Offline App Startup Performance

We optimized the startup performance of offline apps by skipping data and file synchronizations on subsequent application startups. Mendix still does them, but only if your app has been redeployed in the meantime. This significantly improves perceived application performance and time-to-interactive, especially in cases of weak connectivity.

Offline Data Retrieval for Custom Widgets

We have created a new API for custom widgets to fetch data while being offline: mx.data.getOffline.

It supports data filtering, sorting, and paging. Please note that offline apps currently download and synchronize only that data which is used by some of the “core” UI widgets.

Runtime API Extensions

  • We added an alternative executeWithConnection method to the com.mendix.datastorage.DataStorage Java class, which enables the connection to be taken from the current context. This allows queries to be run within the current transaction. For more details, see Interface DataStorage.
  • The Java API has been extended with the new IOQLTextGetRequest createOQLTextGetRequestFromDataSet(String dataSetQualifiedName) method. This enables creating an instance of IOQLTextGetRequest with an OQL query extracted from a dataset via its qualified name, which is provided as an argument to the method. For more details, see Class Core.
  • The Java API now allows for registering callbacks before and after commit, create, change, and delete actions. For more details, see Core.getListenersRegistry.
  • Core.addListener has been deprecated in favor of Core.getListenersRegistry().addListener.

Mendix Developer App Functionality Embedded in Mendix Mobile App

The Mendix Developer App functionality is now embedded in the Mendix Mobile app. The View Hybrid Mobile App screen in the Desktop Modeler now also refers to the Mendix Mobile app.

Widget Improvements

In our effort to improve the quality of the client, we have rewritten the Text Widget. You should not notice any differences compared to previous versions.

Deprecations

The mendix/lib/Error class in the Mendix Client API has been deprecated. From now on, the client uses normal JavaScript errors to communicate failures in error callbacks.

Breaking Changes

  • As you might have heard, Microsoft ended support for Internet Explorer versions 10 and below. Starting with this release, we are following their lead and have officially stopped supporting IE 10.

  • We removed support for a few (and as far as we know, unused) parameters of the deprecated mx.server.request Client API call:

    • options.unique – from now on, the same requests are never merged together (meaning, options.unique is considered to be true).
    • options.sync – the Mendix Platform does not support sending synchronous http requests anymore, as that feature was deprecated in browsers.
  • The Client API method session.getUserRoles() has been removed. That API was never supposed to be public or used externally, but unfortunately it was. Any usages should be changed to session.getUserRoleNames(), which is the new and officially public API method.

    • The session.getUserRoles() method was used in the Mendix Feedback widget, so we made the Modeler automatically upgrade it. Note that if you have made a custom version of this widget with the same name, your changes will be lost in the upgrade. To prevent the auto-upgrade, you can rename the .mpk. Of course, you will then have to update session.getUserRoleNames() in your custom widget.
  • The custom widgets listed below use a private API that has been improved and changed. This required us to update these widgets so that they keep working in Mendix 7.6. If you use any of these widgets, go to the Mendix Marketplace to download the latest version.

    • Switch
    • Carousel
    • Range slider
    • Slider
    • Progress bar
    • Star rating
    • Progress circle
    • Time series
    • Badge
    • Badge button
    • Google maps
    • Image viewer

Fixes

  • We fixed an issue where the deployment crashed because of the invalid configuration of conditional visibility or editability settings. (Ticket 52259)
  • We fixed the bug where multiple calls to a microflow done in quick succession from the client (for example, when the user clicked the same button multiple times) were merged together and actually triggered only a single execution of the microflow. (Ticket 53109)
  • We fixed an issue where adding a new value to an enumeration used in conditional visibility/editability reset the configuration for the existing enumeration values incorrectly. (Ticket 54070)
  • We fixed an issue where empty list view templates caused deployment failure. (Ticket 54291)
  • We fixed an issue where the updated value of a virtual attribute was not calculated during microflow execution. (Ticket 52113)
  • We fixed an issue where date tokens like [%BeginOfCurrentWeek%] were evaluated in client-side expressions but did not respect the first day of the week project setting.
  • We fixed the issues where specific changes in the model where not picked up by the running application upon a fast deployment (model update) (for example, when an Open Page action ignored the changes of the layout type of the target page).
  • We fixed an issue where exporting to Excel did not export all records. (Ticket 54441)
  • We improved how hybrid apps detect an absence of network connectivity. Now, it takes less time to recognize that a present network connection has no access to the internet or is unusable due to low throughput.
  • We fixed exceptions in the microflow editor that occurred while pressing Ctrl + arrow keys.
  • We aligned the default size of annotations between the Desktop Modeler and Web Modeler.
  • We improved the find-text functionality in REST call actions and call web service actions.
  • We fixed an issue with the $orderby OData query option to perform sorting even when you change the exposed name of the entity attributes.
  • We fixed the sorting of the system member (owner or changedBy) of a generalization of an entity. (Ticket 49207, 52831)
  • We fixed the filtering on the system member (owner or changedBy) of a generalization of an entity. (Ticket 43946)
  • We fixed the NullPointerException in the OQL query handler. (Ticket 49298)
  • We fixed a corner-case bug that occurred when uploading images from a Java action. This resulted in a runtime exception when initiated before a first-time “regular” upload.
  • We fixed the memory issues that occurred when the System.Error entity stayed in the memory too long. (Ticket 38117)
  • We fixed an issue that made it impossible to tab to certain elements in the page (for example, tabbing from the first item in a list view to subsequent items). (Ticket 54074)
  • We fixed an issue where reference set selectors and grids were producing errors while navigating back and forward. (Tickets 54820, 53481, 52270)
  • When the user ran an app in an iframe and accessed it with the Mozilla Firefox browser, a JavaScript error occurred that resulted in pages not being loaded properly. We fixed this. (Ticket 51652)
  • We fixed an issue where some custom widgets were unable to load if placed in a tab container with conditional visibility.
  • The log files for widgets that fail to build can now be found at <deployment folder>\log\check-widgets\<widget name>.log. If you manually check widgets by selecting Tools > Check Widgets, the pop-up window detailing which widgets failed to build now contains a link to open the log directory. Also, when a file from a custom widget was removed, the build did not fail, because not all build remnants were cleaned up. We fixed this. (Ticket 53910)
  • Validation messages will no longer trigger a pop-up window on phones. Instead, the first message is now scrolled into view.
  • We fixed the bug that caused FileDocumentSizesPopulateJob to infinitely query Amazon S3 to retrieve data about non-existing files. (Ticket 55851)

Known Issues

  • In some situations, an object associated to another object cannot be committed during the execution of a before/after commit event, resulting in an error such as “Object of type ‘MyModule.MyEntity’ with guid ‘12345’ cannot be updated, as it does not exist anymore.” For example, consider two new objects A and B, wherein A (parent) is associated with B (child) and A has a before- or after-commit event. In this event, B will be changed and committed. If you then commit A, B will be marked as ‘autocommitting’. Because of this, committing B in the before- or after-commit event of A will fail, as it expects A to already exist in the database, which is not yet the case. (Tickets 59099, 59288)
  • Users with non-administrative user roles with the permission to manage users are able to escalate their privileges. For more information on this vulnerability, see SSA-875726 Privilege Escalation Vulnerability in Mendix.
  • When a text widget has a placeholder for an enumeration attribute, the name of the enumeration is displayed instead of the caption. (Ticket 58848)
  • When retrieving an entity with a virtual attribute without using a schema ID, references are not returned. This impacts the following scenarios: a template grid containing an entity with a virtual attribute will not show any data over an association (for example, nested data views); and custom widgets requesting Mendix objects with a virtual attribute through XPath will have no access to their associations. (Ticket 56016)
  • For Atlas-based apps, it is not possible to use the Generate page functionality for buttons in the Tablet and Phone profiles. The Create Page dialog box shows no selectable page templates for these profiles.