Overview
The 3.9 update for the Platform products is being rolled out.
Today, the CTP 2 version has become available for Generator and Framework. This version contains all planned features for the 3.9 release.
CTP means Community Technology Preview, and with this version you can preview the new features for the platform products and give us your feedback on it.
Compared to the CTP 1 version, lots of small improvements have been implemented; see the release notes below for more information.
Important: If you want to use a 3.9 Framework version you must generate your application with a 3.9 Generator as well.
The CTP version is not intended to be used in production systems; the 3.9 can be considered to be used for production systems when the RC version is released (and should be used when the stable version is released).
Please give us your feedback in the form of SRs on found bugs, usability and available documentation (or where more is needed) or leave a comment below. If you experience any problems rolling out your (non-production) application, we can also get in touch directly through your primary contact.
Where to get the new versions:
Generator: use use generator_3_9_ctp in deployment
Framework: deploy your application after generating with the 3.9-CTP generator and use the embedded Framework (or a 3.9-NB framework, should they become available)
You may select platform version â3.8 Architect + 3.9-CTP Generatorâ in Deployment to generate and install with 3.9-CTP2 while still integrating with Architect 3.8.
Release notes
Changes since latest 3.9 CTP release (C12635)
UI improvements
PI38366 - Change Novulo tab order using drag and drop
Tabs in a Novulo application can now be reordered using drag and drop.
PI38363 - Context menu on tabs to close multiple other tabs
It is now possible to close multiple tabs from the context-menu of a tab. For convenience, several other options have also been added: copying the title of a tab, copying a link to the tab (see the description of the product issue below), opening a new tab in a specific position, moving the tab to a different position and closing the tab.
PI38424 - Copy deep links to records to the clipboard
You can now copy a link to a page from the context menu of the tab (as shown in the image above for the previous PI), of the navigation bar and of the page itself. This link looks something like https://www.yourdomain.com/default.aspx?page=pages:load(12345,displaytypes:load(âViewâ),[]), which may sound a bit cryptic, but you can use it yourself or share it with others to later navigate directly to the same page.
PI48591 - Visual indication of row just viewed in grids
After returning to a grid from a details page, the grid row corresponding to the just viewed details page is focused (indicated by a dotted line around the row), serving as a visual cue to help you to find back the place where you just came from. It also allows you to continue navigating the grid relative to the just viewed row with the arrow keys on the keyboard.
â level up â
PI48584 - Allow user to influence used navigation for column clicks
In most situations the user can override how a page is opened by pressing certain keys when clicking on a link: âaltâ for dialogs, âshiftâ for full-page, âctrlâ for tab in background, and âctrl + shiftâ for tab in foreground. Now this also works for âcolumn clicksâ (cells in grids with blue text).
â ctrl + click â
PI42914 - When a record that was expected to be locked isnât locked any more, give a user-friendly message + allow user to continue
Situations when a record is expected to be locked, but that lock is missing, are now handled better:
- A warning is shown on top of the page when the page is loaded, when the user tries to change a value, and when the user tries to commit the record.
- Changing a value or committing a record now explicitly checks that the record is locked, and a clear error message is shown if it isnât.
- The âcancelâ button no longer gives an error when a lock is missing.
Note for developers: Calling an UnlockRecordAction with a record that is not âlockedâ no longer gives an error. In practice, this should not change anything, but theoretically a process could have been implemented so that it relies on this behavior. Also, during development, when you have a bug, this might return in a different error being shown, or an error being shown at a different time.
PI38375 - Consistent error handling with grid query errors (timeouts)
Errors during the loading of grid (most commonly timeouts) are now handled better. For any such error, it is now always possible to undo any change to the default settings (including the search query and the current filter), hopefully preventing the error from happening. During this process, the user is in full control of which settings are undone, so he can target the culprit (e.g. clearing the search when that causes the problem, but not lose any other settings along the way).
Additionally, some other related improvements have been made. E.g. the phrasing of the error messages is improved, the error messages are better updated when the grid settings are changed, and the layout of the error messages is improved.
PI48589 - Gracefully handle user clicking on a file link for which the file is missing on the file system
When trying to download a file that no longer exists, the user now gets a regular error message, and he can continue to navigate in the application normally. (previously, the user would be stuck and would have to reload the application)
PI42809 - Consistent behavior for selecting field content on focus
When navigating to a numeric field using the tab-key, the entire contents of the field is now initially selected (just as is done for text fields).
â tab â
PI48598 - Show NULL-value description of dropdown fields in columns of a grid
Grids now show the same text for an enumeration with the value NULL as is shown on the details page (which can be configured in the Architect). Additionally, it is now possible to search in this column for these rows by using (a part of) this text.
PI38385 - Do not interpret âemptyâ and ânullâ as operators in space separated search expression
When a search query in a grid contained the word âemptyâ or ânullâ, it was interpreted as âonly show the rows for which this column is empty/nullâ, even when the search query contained other words as well. Now it is only interpreted this way if âemptyâ or ânullâ is the only word in the search term.
PI38384 - Allow increasing the number of visible rows in full size grids to 100 on high resolution screens
On high resolution screens (or on regular screens with a very low zoom level) it is now possible to change the page size of a grid to 100 rows.
Changes related to rights management
PI51625 - In rights profiles, allow navigation from grid to details page
When you select a grid on a rights profile page, it is now possible to navigate directly to the corresponding details page. This is especially useful for grids where the details page is in a very different place in the tree than the grid (as is common for grids in domain-specific subsystems with details pages in the application maintenance subsystem).
Additionally, it is now also possible to navigate from the details page to the data source and back.
PI38433 â Functions that shown the number of users with a given rights profile
Two functions have been added that show the number of users with a given rights profile: one that counts all users, and one that counts only the active users.
PI40358 - When committing right settings to database fails, revert cache to original value
When a change you make to a rights setting on the rights profiles page fails to save to the database for whatever reason (e.g. because you are working in a âshadow applicationâ where rights changes are disallowed), the change is now reverted both in the interface and in the cache.
PI51572 - On rights profiles, show nice names for page_ok buttons and for tile processes
On the rights profiles page an untranslated name was sometimes shown for ok-button processes. This has been fixed. Also processes for tiles were shown, but changing the corresponding settings has no effect (tiles have a separate entry where you can manage their rights). These processes arenât shown anymore.
Bug fixes
PI42252 - Sorting does not work when a column is added to a grid twice
When the same column was added twice to a grid, sorting on that column didnât work anymore. This has been fixed.
PI50037 - Donât register empty translations for field names that have no translation
When a field isnât translated in a certain language, an empty translation was registered, resulting in a line with only white space in the columns manager of a grid. The empty translation is no longer registered, and therefore the translation of the default language (usually English) is now shown in that situation.
PI48597 - Show null-value for enumerations for which user has no rights
When a user did not have rights to see an enumeration field, grids would display the first option of that enumeration for all rows. This is no longer the case.
PI48588 - Toolbar menu looks weird when user does not have rights for logout button
When a user did not have rights for the logout button, the layout looked weird (another button then looked like the logout button). This has been fixed.
PI48167 - Not all combinations of showmessage in combination with loadpage work correctly
In some cases when a message was outputted at the same time as when a page was loaded, the message would not be visible to the user (for example in an on-page-loading process of a page that was loaded from the start screen). This has been fixed.
PI46585 - In the datahandler, when combining results from multiple queries, values sometimes appear in the âwrongâ place
Sub results were sometimes combined incorrectly for expressions containing nested subqueries in the output (rarely used in practice). This has been fixed.
Changes for developers
PI19521 - Log process errors and exception
When during the evaluation of a process either an exception is thrown or an action returns success = false, an event is fired containing a detailed description of the situation. Soon a plugin will be developed that writes these events to the application log.
This will allow developers to more easily investigate problems (they have an easy way to obtain a lot of information when they encounter a problem during development and they are much less dependent on the information given to them from end users for problems in production) and for application managers to keep an eye on the number and the type of problems that occur for a production application.
PI38437 - Automatic context in expression debugger
Opening the expression debugger now automatically sets the value of the âcontextâ field to the expressions corresponding to the context of the page that you were viewing when you opened the expression debugger.
Additionally, you can now directly open an expression from the page analytics in the expression debugger.
Changes for application managers
PI48596 - Make Metro Tile Counters run in read uncommitted
Expressions for tiles can now be evaluated in read uncommitted mode by adding the following line to the appsettings in the web.config:
<add key=âtile.selectwithreaduncommittedâ value=âtrueâ/>
PI19668 - Generate integrated mode compatible web.config
The web.config generated by the generator is now integrated mode compatible. Deployment will soon be adjusted accordingly.
PI47925 - Generate ASP.NET 4 compatible web.config
It is now possible to generate an ASP.NET 4 compatible web.config. Deployment will soon be adjusted to be able to make full use of this feature.
PI51062 - Retrieve unique license for demo/trial applications
Demo applications now get their own license, which is automatically set by the generator.
Note: The preferred way to set the license serial, is with the âserialâ appsetting in web.config, which is also the way the generator sets it. When the appsetting does not exist, the âserial.frameworkâ appsetting is used as fallback.
Changes for plugin developers
PI48671 - Assembly bindings / binding redirects in web.config from data.xml
This change allows plugin developers to specify that a different version of an assembly should be used than the default version included with the framework. See documentation on âAssemblyRedirectâ in Explanation of the data.xml for details on how to use this.