Mendix 7.4 Continues to Raise the Bar for Mobile App Development
Mendix 7.4 makes offline mobile apps more powerful and easier to build. In addition, we improved the list view performance, improved the UI for creating multi-channel apps, and released two cool new widgets! Read on for more details about how our Mendix 7.4 release is raising the bar for mobile app development.
Offline Editing Made Easier
With Mendix 7.4, you can easily build editing functionality in offline mobile apps by directly editing objects the same way you would in online mobile apps. You can create forms that can directly change data which can be synchronized back to the server. In addition, editable list views and editable columns for grids are also allowed, so that objects can be edited inline for these widgets.
This new functionality also allows you to prepare data which can easily be used and edited. Combined with the sync on save option (in the Save button) and before commit microflows, this will give you many possibilities.
When building apps that work without an internet connection, conflict resolution becomes more important because there is a higher chance that a user will change outdated data.
There are different ways to solve this and we made this easier by introducing the Conflict Resolution module in the App Store. This module supports three strategies:
- Last Wins: the data of the user that synchronized last will be persisted. In the example, John’s 60 items will be shipped and Bob’s 50 will be canceled and he will be notified.
- First Wins: the data of the user that synchronized the last will be In this case, you can also show the user a message. John will get a message that there is not enough in stock and he can order the 50 items directly and place 10 in back order.
- Custom: you can use this strategy to create a custom approach with microflows. For example, in the case of Bob and John, you can detect the conflict and place 10 items for Bob in back-order and order the full 60 items for John.
You can easily use the microflow actions in this module in your before commit microflows as shown in the image below.
We have also updated the Mobile Quick Starter app with this new functionality .
List View Performance Improvements
The List view is one of the most used widgets in Mendix. In this release, we improved how the List view fetches its data from the server, which can provide a performance boost. Now, if a List view contains a widget that gets its data over an association (for example, in a Data view or Text box), that associated data will be fetched together with the main List view data with one network request.
To illustrate the significance of this improvement, imagine the following example: you have a List view with 20 products showing the name of the product and the category name it belongs to, which is retrieved over an association. In the past, such a page would have to perform at least 21 network requests before being shown, but now it is done in one request. Especially in mobile apps, this can greatly improve the responsiveness of the app.
Navigation Profiles Improvements
In 7.2.0 we introduced flexible profiles via which you can configure the channels for your app, e.g. a responsive web site, a phone app, and a tablet app. In this release, we improved the UI to make it easier to configure these profiles. The different types of profiles are predefined and you can easily add them by checking the options as shown in the image.
We also made it easier to preview these profiles by making the name more explicit and only show the available options.
We also released two nice new widgets which are very useful for your (mobile) apps. You can find these and more widgets in the Mendix App Store under Mobile – Featured. Of course, you would never find an issue, but in the rare case you do, report and we will pick them up!
With the Image Viewer widget, you can easily display an image from different sources: FileDocument, External URL (static and dynamically), and from an image collection. Another nice feature is that it allows you to show the image full screen and zoom in/out via the buttons or by using the pinch-to-zoom gesture. Look at that cute kitten!
This is a mobile-only widget that retrieves information about your device and mobile app. It can retrieve the following data:
- Device ID: the unique id of the device
- Device platform: the platform on which the app runs, e.g. Android/iOS/Web.
- App name: the user-friendly name of app that is also displayed on your home screen and in the app store, e.g. MyAwesomeApp
- App ID: the unique identifier of your mobile app, e.g. com.mycompany.awesomeapp.
- App version: the version of your mobile app, e.g. 1.2.1.
There are several use cases for this widget:
The Device ID is very useful for anonymous apps in which you still want to persist data per device. By using the device ID, you can store data related to the device so the next time the user opens the app on that device, you can load the correct data/settings.
Differentiate the UI for Android and iOS
Android and iOS have different design patterns and guidelines. By leveraging the platform info of this widget, you can change the UI based on the platform. An example is to show a back button only on iOS because Android has a standard back button. However, you could also use it for a more differentiating UI/UX.
Multi-Label Mobile Apps
Several companies want to publish multiple apps to the app stores under a different label/brand but use a single model. With this widget, you can use the app identifier or name to easily determine the current label/brand of the mobile app and adjust the content and look and feel.
Mobile App Version Check
In some cases, it is important that users have downloaded the latest/right version of the mobile app from the app store—for example, when you update a plugin because of security vulnerabilities or when your mobile app depends on a certain plugin that is recently added. By leveraging the app version, you can check whether the user has installed the correct version of the app and notify the user to download the latest version from the app store.