9.0

Last update: Edit

9.0.5 General Availability

Release date: March 31st, 2021

Download

New Features

Workflows

As of this release, a workflow editor is now available as a Beta feature in Mendix Studio Pro.

Every organization wants to digitize their processes, but this is usually easier said than done. The new workflow capabilities in Mendix set you free to digitize any process without the complexity and lengthy projects that traditional methods require.

The new visual workflow editor is available in both Mendix Studio Pro and Mendix Studio. This new language is fully integrated with existing DSLs for pages, microflows, security, and the Mendix Runtime.

In addition, we have released an optional Workflow Commons module that gets you on your way in no time. This module provides ready-to-use task inbox and admin pages, dashboards, useful page templates, and more. All you need to do is download the module from the Mendix Marketplace, add a workflow from the App Explorer, and off you go.

MxAssist Performance Bot

MxAssist Performance Bot is now available as an intelligent virtual co-developer bot that helps you improve the performance of your app by inspecting your model against Mendix development best practices. It detects anti-patterns during the design and development, pinpoints these anti-patterns for you, suggests how to resolve them, and in many cases can automatically fix these issues.

MxAssist Performance Bot is built using the statistical analysis of thousands of anonymized Mendix apps to learn common anti-patterns. Use cases for recommending fixes and auto-fixing anti-patterns have been added to the bot. In addition, it uses the best practices from Mendix Expert Services in the development of microflows, domain models, pages, and security.

It consists of three levels of assistance:

  1. Detection – The bot inspects the app model, identifies the issue, and pinpoints the document/element causing the issue for you.
  2. Recommendation – The bot explains the identified issue, the potential impact, and how to fix it. There is also a link to a detailed best practice guide with steps for fixing the issue.
  3. Auto-fixing – After the user acknowledges, the bot can automatically implement the best practice and fix the issue.

Task Queue

This release makes the task queue available as a horizontally scalable solution for executing microflows in the background. In the microflow editor, you can set microflows to be executed in the background on a configurable queue. This enables an execute-at-least-once option that gracefully handles node restarts and keeps track of pending, finished, and failed tasks.

Progressive Web Apps

Studio Pro 9 adds support for building offline-first progressive web apps (PWAs). PWAs offer offline-first capabilities similar to native mobile apps, but they do not require you to publish your app in any app store.

You can create an offline-first PWA by adding one of these new navigation profiles to your app: Responsive offline, Tablet browser offline, or Phone browser offline. Web browsers that support the necessary offline features (currently Google Chrome and Microsoft Edge) will load the offline profile. Other browsers will gracefully fall back on the online profile.

In offline-first apps using PWAs and native mobile, we made it more simple to get data dynamically from a data source. You can now directly use XPath as a data source instead of using a nanoflow with a retrieve action. This is available for list views, data grids, template grids, reference selectors, and any pluggable widget.

In addition, offline-first PWAs now keep users logged in for a longer period. By default, users will be logged out after 7 days of inactivity. This can be customized using the new LongLivedSessionTimeout runtime setting.

PWAs on a Device’s Home Screen

With the new PWA functionality, end-users can easily add a Mendix PWA to their home screen on both iOS and Android devices. This makes it easy for end-users to open the app again and gives the app a more native-mobile feel by showing a splash screen and hiding browser controls when launching.

To enable this, configure the icon in the navigation profile. When an end-user opens the app on their device for the first time, the browser will ask if the end-user would like to add the app to the home screen (this can vary per browser). The icon will be shown on the home screen and as the app starts up.

Other PWA Capabilities

Offline-first progressive web apps (PWA) have capabilities for all web navigation profiles. Once the Publish as a Progressive Web App setting is enabled in the navigation profile, mobile browsers might start asking end-users to add your app to the home screen of their device. This can be prevented by clearing the Allow ‘Add to Home screen’ prompt setting.

When end-users try to open an online-first PWA while not connected to the internet, they will see a custom page to check their connection. Where desired, this page can be customized by adding an offline.html page to the theme folder.

When the Preload static resources option is enabled, your app will preload resources like pages, images, and widgets in the background. This makes your app feel faster when navigating to new pages. Please note this comes at a cost, as more bandwidth is consumed initially, which is not always desired.

Native Dependency Management

With this release, we made it simpler to add additional React Native modules to your native mobile apps. Your pluggable widget or JavaScript action can now define which native modules it needs instead of relying on the modules that are provided by Studio Pro or manually added to the app source. This makes it easier to create and use more powerful pluggable widgets and JavaScript actions for native mobile apps.

You can define which native depencencies are needed in a JSON declaration file. For pluggable widgets, the latest version of the widget tooling will create this declaration file based on the dependencies you are using, and you only need to repackage your widget with the updated tooling. For JavaScript actions that make use of native modules, you must create this file manually. The Mendix Native Mobile Builder will include the modules when building a native mobile app for development or distribution.

New Atlas UI Folder Structure

With Studio Pro 9.0, we have released a new version of Atlas UI. Atlas UI 3.0 comes with a refreshed look and feel, improved out-of-the-box templates, and easier customization. A lot of effort has gone into the new folder structure of Atlas UI that should greatly simplify how your theme is updated and extended.

Also, module developers will find it has become much easier to share modules that bundle company-specific layouts and templates or that combine a pluggable widget with relevant design properties and styles.

New Themesource Folder

Now, every module can define its own native and web style sheets, styling resources (for example, images and fonts), and design properties. The only thing you need to start using these is to import any module from the Mendix Marketplace, and Studio Pro will take care of the rest automatically. This is because Studio Pro now handles styles internally. Required files are stored in a new themesource/{module} directory that is included together with the owning module.

Of course, Atlas UI 3.0 could not pass up this opportunity and will also use themesource to deliver its core Sass and JavaScript files. This means that you can update in the future without having to manually copy/update from the theme_old folder. The theme_old is dead, long live the theme!

It is important to note that the themesource directory is not only for Marketplace modules. We encourage you to use it for local modules as well, since it allows you to modularize your styles and keep them more manageable. Mendix will even scaffold a default themesource structure for all of your modules.

Did we mention that the web stylesheets in themesource are defined with Sass? Because they are! And Studio Pro takes care of the mundane process of compiling them when needed, copying used resources, and correctly caching them without the need of external tools like Calypso. The compilation is triggered on file synchronization (via F4), deployment, and module structure changes. When running your app locally, Studio Pro will monitor the theme and themesource directories to recompile automatically when any styling changes are detected.

We have also introduced a new theme-cache folder, which holds the compiled version of your styling. When the styling changes and is recompiled, you will see changes in theme-cache when uploading your app to the Team Server. This is expected behavior, as it is needed for Mendix Studio and Design mode.

New Theme Folder Structure

With Atlas UI core files out of the way, we could not miss a chance to do some Spring cleaning in the theme folder. The new theme folder strcuture is now nicely split into web and native. Here you can find explicit entry points for your own styling and for your customizations of styling introduced by modules. And of course, we now allow you to use Sass in the theme as well. For more information on the folder structure, see this documentation.

Please note that the theme changes are opt-in, which means you can keep using the old structure (for example, if you choose to stick to Atlas UI 2.0 for now). However, Atlas UI 3.0 requires the new structure, and this documentation explains the steps needed for conversion.

Categorizing Building Blocks & Page Templates

Previously, templates from all modules except the one marked as UI resource package were combined together into one Local category. To further enable you to implement and use your own page templates and building blocks, we have introduced new Category and Category weight properties on all templates. This means you can create your own custom categorization.

New Merge Algorithm

The new merge algorithm is enabled by default and is used when doing an Update or a Merge to combine changes in the app model. The new algorithm has the following advantages compared to the old one:

  • Fine-grained conflict resolution – When there are conflicting changes to a document, you no longer have to choose between whole documents (your whole page versus their whole page). Instead, you can resolve conflicts at the level of individual elements, such as data views, entities, attributes, and microflow activities. Also, all non-conflicting changes are accepted automatically from both sides.
  • Ability to make parallel changes to a list of widgets – Parallel changes to a list of widgets no longer lead to a conflict. For example, two developers inserting a widget in the same data view, do not result in a conflict now, while in the old algorithm, you have to choose between these changes. If the changes are too close, there is a List order conflict to remind you to decide on the final order of the widgets in the list.

Inspecting conflicts is more convenient now that lines that refer to the same element are combined. In addition, the accepted changes are now shown underneath the conflicts when you are reviewing or resolving conflicts. The toggles to switch to Changes in mine/theirs are gone.

For more information on the new merge algorithm, see New Merge Algorithm with Fine-Grained Conflict Resolution.

Also, in the Preferences dialog box, we removed the option to go back to the old version of the Changes pane.

List Filtering by Expression

We have added support for filtering/finding by expression in a List operation activity. This allows you to quickly filter a list on multiple attributes or multiple conditions without the need for a loop or multiple List operations.

Power to the Text

There are many places in pages where one can use a text template, like the text widget or the label property of input widgets. Text templates are multi-lingual and allow for inserting a (formatted) value of an attribute. However, sometimes more power is desired than using an attribute can provide. What if you want to pluralize a word (for example, “You selected 1 product” versus “You selected 2 products”), or include some text only based on logic?

We have made this easier for you! From now on, you can use expressions as text template parameters. The whole power of client-side expressions are now at your disposal with logic (if-then-else), functions, the context of parent data views, and even retrieving over associations.

Improvements

  • We improved the getCaption and getKey expression functions to not throw an error for an empty parameter. Instead, they return an empty string (just as the toString function does).
  • We improved the nanoflow execution time, including for passing lists to sub-nanoflows. (Ticket 110062)
  • When migrating files created before Mendix 6 to modern files, we now log the missing files instead of failing the migration. (Tickets 110317, 110969)
  • We updated the SAP HANA driver to 2.7.9. (Ticket 11311)
  • When running an app without a license, the Data Hub limitation on the number of objects no longer applies.
  • We improved the performance of pluggable widgets that use the ListValue property with a database data source. These widgets no longer issue a “count” request unless they need totalCount.
  • In addition to closing one or more pages with the Show page or Close page activities in your native mobile app, you can now also close all the pages in the current stack at once by selecting the All option in the properties.
  • We added a default page for unsupported browsers.
  • The header on the login page of Atlas UI can now be translated using the new mendix.signin.loginHeader system text.
  • We gave the page editor a facelift for Structure mode:
    • Layout grids have a fresh, clean look.
    • Containers can easily be distinguished by their dashed borders.
    • The color of selecting or hovering over an element is now blue.
    • Drop-zones are smaller to reduce horizontal spacing.
  • The App Security dialog box is now resizable in both directions.
  • In the domain model editor, microflow editor, page editor (only in Structure mode), and document template editor, it is now possible to use keyboard shortcuts for zooming in/out and resetting the zoom level (via the control with +, -, and 0). The toolbars of the page editor and document template editor now also have a drop-down menu for setting the zoom level.
  • We now also show error badges on elements in the page editor’s Design mode.
  • We have added a new tab to the View mobile app dialog box so that you can now easily access your web app or PWA from your phone or tablet by scanning the QR code.
  • The state of the Show purely visual visual changes toggle in the Changes pane is now remembered when switching between documents or modes.
  • In the Changes, we no longer use the terms Merge start and Merge end. We now use Original, Mine, and Theirs. Also, we reordered the columns to show “my changes” first. Finally, we improved the visualization of elements and values in this pane.
  • We improved the process of reverting all changes. You will no longer be asked to save before reverting. We also fixed a crash that occurred when you reverted while the app was running.
  • The quick fix to update renamed design properties now also recognizes drop-down options that were replaced by a toggle property.
  • We rebranded the sign-in window with the Mendix 9 look and feel. We also introduced a new flow where you see the sign-in window first when starting Studio Pro. However, the sign-in window no longer blocks the main window when you launch Studio Pro.
  • We updated the splash screen, about screen, empty state background, and application icons in Studio Pro.
  • We now allow JDBC URL options to set data source properties for SAP HANA.
  • We disabled the transactionalLobs option in SAP HANA.
  • As part of ongoing maintenance, we reduced the memory footprint and improved the performance of Studio Pro and MxBuild.
  • You can now use the input reference set selector widget inside a containment or repeatable containment pluggable widget.
  • We added support for named exported classes and functions in web widgets. You no longer need to export your widget class as a default.
  • We made it possible to use associations in the microflow expressions used in a pluggable widget’s expression properties and as a page title in the Show a page action.
  • You can now use image uploader widget inside a containment or repeatable containment pluggable widget.
  • We improved the accessibility of action buttons like Call microflow button and Link button. You now have a configuration option to set the role of these buttons. For more information, see Button Properties.
  • If you get a consistency error on an outdated version of the Nanoflow Commons or Native Mobile Resources module, you can now right-click the module to update it.
  • When creating pages, the title of a page is now derived from its name.
  • We added support for PostgreSQL 13.
  • Query engine 9 is now the default for XPath queries, replacing query engine 7 to offer a more stable solution that allows for optimizations in the future. It is no longer possible to enable query comparisons between the two engines.
  • We updated access rules for the user’s password attribute to prevent access to its hashed value.
  • When adding a data view from the Toolbox on a native page, its form orientation will be set to vertical by default.
  • The way we interact with binaries stored in third-party systems like AWS S3 and Azure has been improved. Now, we keep track of external changes using a two-phase commit that prevents unknown orphaned files.
  • We have made the Mendix session ID available in a web socket endpoint.
  • We no longer support non-persistent sessions.

Runtime API Improvements

In the Runtime API, we made the following improvements:

  • We improved the performance of the Core.getActiveSession(userName) method.
  • We improved the type-checking on Core.evaluateExpression(). It now accepts exactly the same expressions as Studio Pro and no longer accepts other expressions that were wrongly accepted in previous versions. Concretely, the following constructs are no longer accepted (these changes apply only to Core.evaluateExpression(), as Studio Pro already does this):
    • ceil and floor previously accepted any type. They converted the value to a string, tried to parse the string into a decimal, and then rounded it. Now, only decimals and integers are accepted, and all other values are considered runtime errors, because applying ceil and floor does not make sense for non-numeric types.
    • max and min previously accepted either integers, integers mixed with decimals, or integers mixed with decimals and strings. In the latter case, it converted all values into a string and then did a lexicographical comparison. Strings will no longer be accepted. Strings can still be compared to each other using <, <=, >=, and >.
    • round previously accepted either integers or decimals for the precision argument. Decimals are no longer accepted, only integers are accepted, as it does not make sense to round to a non-integer number of digits.
    • The add (+) operator previously allowed any value to be concatenated to a string. It converted the value to a string and then concatenated it. This is no longer allowed, and concatenation of strings is only allowed with strings or strings with decimals or integers. If date/times, Booleans, or enumerations need to be added to a string, use the toString() function to convert them to a string first. Note that an empty/null value is still concatenated as 'null'.
    • The equality (=) and inequality (!=) previously allowed enums to be compared with strings. This is no longer accepted, and only enums are allowed to be compared to enums. Comparing them to strings can still be done by first converting the enumeration to a string using the toString() or getKey() function.
    • The equality (=) and inequality (!=) previously also allowed binary values to be compared. This is no longer allowed. Note that comparing with empty is still valid (for all types).
    • The dateTime and dateTimeUTC previously allowed integers and decimals as its arguments. Decimals are no longer accepted, only integers are accepted, because it does not make sense to initialize a date/time from floating point numbers.
    • Most string functions previously allowed any type for the first argument. The value was converted to a string and then the operation was performed. Now, only string values and theempty value that we treat as an empty string ('') are accepted.
    • The toString function previously accepted all types and converted them to strings. Binary values, objects, and lists are no longer accepted, only strings, integers, decimals, Booleans, enumerations, date/times, and an empty value (that results in an empty string) are accepted.

Limitations

  • In native apps, the Clear history option of the Show page activity can only be used in combination with target pages that are included in the bottom bar configuration (if the layout has a bottom bar) and that have a default layout type (meaning, not a pop-up). This was already enforced in Show page activities used in the page editor. We now also enforce this in nanoflows.

Deprecations

  • We deprecated window.logger in the Client API in favor of mx.logger.
  • We deprecated the direct function call on properties linked to a data source in (ListActionValue, ListAttributeValue, ListWidgetValue and ListExpressionValue) in favor of calling get on these types.
  • We will drop support for Oracle 18 before June 30th. We will announce this again when the support is dropped.
  • The report grid widget has been deprecated and will be removed in a future version. We advise against using it in your apps.

Hybrid Mobile

At Mendix, we want to provide our customers with a future-proof platform, a significant part of which is always determined by underlying technology. We believe that native mobile apps and progressive web apps (PWAs) are the future for mobile apps, in that they deliver a best-of-breed approach for building app store- and browser-based mobile apps. For more information, see the Establishing Your Mobile Architecture Strategy session from last year’s Mendix World.

We do not consider hybrid mobile (which is based on Cordova) to be future-proof technology anymore. Therefore, hybrid mobile apps are deprecated in Studio Pro 9. It is no longer possible to create new navigation profiles for hybrid apps.

Runtime API Removals

In the Runtime API, we made the following removals:

  • We removed the floatsEqual, currenciesEqual, parseFloat, formatFloat, and toFloat functions, because the float and currencies types no longer exist. These functions were also removed from Studio Pro.
  • We removed the deprecated IWebserviceResponse.getSaxSource and Configuration.getWebServiceCertificates methods.
  • We removed the deprecated <R> R execute(IContext context, String name, Object... params) throws CoreException, <R> R execute(IContext context, String microflowName, Map<String, Object> params), and <R> R execute(IContext context, String microflowName, boolean executeInTransaction, Map<String, Object> params) methods from the Core. Use Core.microflowCall and Core.userActionCall methods instead.
  • We removed the deprecated void setSystemAction(boolean isSystemAction) from CoreAction. The method should not be used and there is no replacement.
  • We removed the deprecated <R> void addBeforeEvent(Consumer<R> consumer, Class<?> returnType), <R> void addBeforeEvent(Consumer<R> consumer, Class<?> returnType, boolean raiseExceptionOnFalse), and <R> void addAfterEvent(Consumer<R> consumer, Class<?> returnType) methods from ActionListener. Use alternative overloads of the same methods instead.
  • We removed the deprecated void setValue(IContext context, byte[] bytes) and void parseAndStoreValue(IContext context, String value) from MendixBinary. Use setValue of IMendixObjectMember instead.
  • We removed the deprecated void commitValueAsFileDocument(IContext context) and void setLength(Long length) from MendixBinary. commitValueAsFileDocument should not be used and setLength was an optimization. There are no replacements.
  • We removed the deprecated Long getLength() method from MendixBinary. Use MendixBinary.getLength(IContext context) instead.
  • We removed the deprecated constructor RequestHandler(Object component) of RequestHandler. Use the default constructor instead.
  • We removed the deprecated getType() method from IDataValidation. Use the getValidationType method instead.
  • We removed the deprecated getRemoteSource() method from IMetaObject. This was an internal method, and should not be used. There is no alternative.
  • We removed the toDecimal function, since it does not exist in Studio Pro at all.

Breaking Changes

  • Studio Pro 9.0.5 requires apps to be in at least version 8.12.0 to open them. This also applies to importing (Marketplace) modules.
  • We have removed app services, which were deprecated in Mendix 8.
  • Reserved property keys (tabindex, class, and style) will no longer be silently ignored when used in the widget XML. They will now result in an error when reading the widget package. Reserved property keys are treated case-insensitively. Please note that tabindex may still appear as a system property.
  • We fixed an issue with pluggable widgets where it was not properly checked that name was a reserved word and should not be used to name a top-level property of a widget.
  • We changed the behavior of ListValue in the Client API available to pluggable widgets. Now, widgets do not receive the totalCount value unless they explicitly request it using the new requestTotalCount method.
  • Studio Pro 9 removes support for Internet Explorer 11. Welcome to the new era! You can check the updated System Requirements documentation to see the list of supported devices and browsers.
  • To better support (security) updates and reduce the dependencies of React Native modules, we have limited the number of modules that are included by default in Studio Pro. Pluggable widgets and JavaScript actions should now define which native modules they need. Any pluggable widgets and JavaScript actions using native modules must be updated so that they declare which modules they are using.
  • Native mobile apps now use React Native version 0.63.3. The libraries that are exposed to native mobile apps have been updated as listed in the React and React Native section of Client APIs Available to Pluggable Widgets. Any pluggable widgets or JavaScript actions that use React Native APIs should be updated accordingly.
  • Deprecated hybrid mobile applications cannot be run anymore in Android emulators. However, on real (up-to-date) devices, they will still successfully run.
  • We changed the default setting for SameSite cookies to Strict.
  • We removed the legacy Java code generation approach. For more information, see the Java Code Generation section of Moving from Desktop Modeler Version 7 to Studio Pro 8.
  • The currentObject variable name is now a reserved name in microflows and nanoflows.
  • We now fail the synchronization if it is unable to set the Read Commit Snapshot Isolation in SQL Server.
  • We removed support for the runtime uniqueness validation. This means that from now on, attributes and associations will be validated for uniqueness in the database.
  • It is no longer possible to add mathematical expressions in an XPath outside of tokens. Mathematical expressions should be calculated outside of the XPath expression.
  • The previously deprecated API for globally styling the status bar and header of native pages has been removed. Use the Page and Layout classes instead.
  • The version of big.js library available for widgets has been updated from 5 to 6. The changes between versions are minimal, so we do not expect that your code is affected.
  • We removed the special handling of the Contents binary attribute of System.Image. Image rotation, validation, and thumbnail generation now only happens when using the user interface, not when accessing it as MendixObjectMember through the Java API.
  • We removed the following deprecated methods from the Client API:
    • mx.data.getBacktrackConstraints
    • mx.data.release
    • mendix.lang.delay
    • mendix.lang.map
    • mendix.lang.nullExec
    • mx.server.request
    • MxContext.setTrackEntity
    • MxContext.setTrackId
    • MxObject.compare
    • MxError
  • We replaced every mention of CoreAction in the public Runtime API with ICoreAction:
    • Context.getActionStack now returns a stack of ICoreAction instead of CoreAction.
    • CoreAction.getUnwrappedAction now returns an ICoreAction instead of a CoreAction.
    • CoreAction.call is now final.
    • CoreAction.getUnwrappedAction is now final.

Known Issues

  • It is not possible to use Ctrl + Tab to switch between open tabs unless you have already selected a tab.
  • 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.
  • A permission issue occurs when deleting FileDocuments or generalizations thereof. This triggers an exception stating that a System.UnreferencedFile object cannot be accessed.
  • It is not possible to close pop-up windows or dialog boxes by using Ctrl + Enter.
  • When Studio Pro is displayed on a secondary screen, it is currently not possible to select an entity from the Data Hub pane and drag it to the domain model editor.
  • It is not possible to switch Studio Pro to Full Screen mode.
  • Updating the local branch of an app with collaborative development enabled can fail when an editor pane (for example, the domain model editor) is open.
  • When you drag Studio Pro to an external display or different monitor that is a secondary screen and you modify a document, Studio Pro appears to freeze. This is because modal dialog boxes are blocking the main window.
  • Having spaces around a user-targeting XPath constraint in the WorkflowUserTask might result in an error.
  • In the workflow editor, moving an element after an undo operation might result in an error.
  • When you update a consumed OData service with a new version from Mendix Data Hub but close the document without saving, the blue arrow icon will no longer be shown to notify you about the available update for that service.
    • Workaround: Closing your app and opening it again fixes this issue.
  • In the Properties pane, you cannot copy, paste, or delete using keyboard shortcuts.
    • Workaround: Perform the same operation using your mouse and the context menu.

9.0 Betas

  • We fixed the list subtraction operation, which now maintains the order of items. (Ticket 117625)
  • We fixed an issue where a Decision activity that was directly connected to a Merge activity at the end of a Loop activity in a nanoflow caused errors. (Ticket 114788)
  • We fixed a permission issue that occurred when deleting System.FileDocument entities. (Ticket 116230)
  • We fixed an issue regarding the visibility of attributes in an inheritance hierarchy. This corrects the column headers shown in data grids in some cases. (Ticket 113024)
  • We improved the validity of sessions in session caches. As a result, changes made on one cluster node will now eventually be reflected on others. Also, Core.getSessionById will update the current session and related data in the current cluster node’s session cache if the session validation timeout is passed. (Ticket 113448)
  • We fixed the access rules for System.ProcessedTaskQueue entities (Ticket 116217).
  • We fixed the behavior of text box widgets containing a mask. In certain cases, this was not changing the value after you selected all and pressed Delete. (Ticket 111477)
  • We fixed an issue with the quick access menu (accessible via a right-click) of widgets that caused some events to be missed. (Ticket 114701)
  • We fixed an issue in which auto-committed objects were cleaned up too early. (Ticket 99432)
  • We fixed an issue where multiple sessions did not work as expected in offline applications when Multiple sessions per user was turned off. (Ticket 113783)
  • We fixed an issue where calling a microflow from an offline-first application triggered an unnecessary reload of data sources on the opened pages. (Ticket 114660)
  • When an average of a list is calculated by the database, the result is no longer truncated. (Tickets 111779, 112782)
  • We fixed an error in published OData services that occurred when a client queried a service using $select in combination with expanding (via $expand) an association from the child’s side. (Ticket 113523)
  • We fixed an issue where retrieving entities by association going from local to local to external entities did not work. (Ticket 112776)
  • We fixed a faulty conversion that caused Close page activities in native mobile apps to not close any pages after your app had been upgraded from Studio Pro 8.11 or above. (Ticket 111576)
  • We fixed an issue regarding the Change list microflow activity where if a list was set to itself, the contents were cleared. (Ticket 109243)
  • Deployment is now aborted before synchronization starts on MySQL if the combined length of attributes or the count of attributes of an entity exceeds the maximum supported amount. (Ticket 90823)
  • We fixed an issue in published OData services in Studio Pro where deleting an entity, attribute, or association from the domain model resulted in an error in the published OData service editor.
  • We fixed an issue in the domain model wizard that creates entities from XML or WSDL where you had to click the Back button twice before the wizard would go back.
  • The consistency error on the outdated NativeMobileResources and NanoflowCommons modules is now lowered to a warning when you do not have any native profiles in your app.
  • We fixed an issue in ListValue in the Client API available to pluggable widgets. Previously, calls to setAmount or setOffset did not affect the initial data request a widget triggered. With this now fixed, you can easily implement features like page size in your pluggable widgets.
  • We fixed an issue where the UI failed to refresh after executing a microflow containing a Synchronize to device activity.
  • We changed the maximum number of executor threads allowed for queues. Now, 40 is the app-wide limit.
  • We fixed a localization issue in [%BeginOfCurrentWeek] and [%EndOfCurrentWeek%].
  • We now support executing Java actions in a task queue.
  • In rare cases after merging, there are duplicate values for translations, design properties, or action activity default color settings. We will now report those duplicates through an error message that you can right-click to manually remove them.
  • We fixed a bug that caused a crash whenever an app was opened that needed to merge changes introduced from outside Studio Pro.
  • We fixed an issue where for SQL Server (only), the XPath query count(//Entity/attribute) also counted null values.
  • We fixed an issue where opening a page threw an exception if it referenced a missing layout or snippet.
  • We fixed a bug where an incorrect number of revisions was shown after a successful update.
  • We fixed the full-width row selection in the MxAssist Performance Bot pane.
  • We fixed an issue in MxAssist Performance Bot where the Limit to current tab option was broken when no document was open.
  • We fixed an issue where MxAssist Performance Bot was displaying duplicate usages for attributes repeated in an XPath where there was a non-indexed attribute in use.
  • We now encode spaces as %20 instead of + in the urlEncode() function.
  • We fixed an issue where an error occurred when a microflow activity without an action was copied and pasted.
  • We fixed an issue where the picker element of an inline native drop-down widget did not update its values when selected.
  • We fixed a bug where the branch that was checked out at the time was showing in the list when merging.
  • We fixed an issue where using an attribute over an association in the sort order of a pluggable widget’s data source caused an exception or an incorrect sorting.
  • We fixed an error that occurred in the client when retrieving data after a fast redeploy.
  • We fixed an issue where closing multiple pages in a native mobile app caused the Back button text to display the page title of the page that was being closed. In addition, if closing multiple pages removes all pages, the back button will no longer be shown during animation.
  • We added a warning to indicate when the Synchronize to device microflow activity is being used in unsupported flows such as synchronization.
  • We fixed a problem with the Show page and Close page microflow activities when the target page has the Bottom bar property set to Yes but there are no visible bottom-bar items.
  • We fixed an issue where it was not always possible to move widgets from pluggable containment widgets in Design mode.
  • Microflow execution behavior has been modified to handle interruptions more consistently. Previously, when a microflow was interrupted, the commits executed up to the interruption were retained, but the microflow was canceled, as if an error had happened. With this fix, we ensure that interruptions are handled the same way other errors are handled.