2023.06

Release Notes

Enhancements

The following are key enhancments in Servoy version 2023.06

ECMAScript Parser

Servoy is in the process of updating the JavaScript engine and tooling to be compatible with ECMA 2015+. In the 2023.6 release, we have added an ECMA parser, which enables developers to use more modern JavaScript syntax.

Try it Out

In Servoy Developer, go to the menu Window -> preferences -> JavaScript and select the option "Enabled the ECMAScript parser", after which your Script Editor will be able to parse newer ECMA syntax, such as Arrow Functions and Template Literals.

Example of Arrow Function
const materials = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

application.output(materials.map(material => material.toUpperCase()));
// Expected output: Array [HYDROGEN, HELIUM, LITHIUM, BERYLLIUM]

Additional syntax will be possible in forthcoming releases, such as let and for-of loops.

Stateless Authentication

The processes of authentication is being moved out of Servoy Developer and in the future will work with Authentication Providers, including ServoyCloud and 3rd-party identity platforms (i.e. Azure AD, Okta, Google, etc)

As part of this process, the login screen will become stateless and will not initiate a client session until post-authentication. This will increase performance and pave the way for a more integrated security setup!

This change only applies to a Solution having mustAuthenticate to true and having NOloginForm or loginSolutionName. All other solutions will not be affected.

Servoy Developer Connects to ServoyCloud

For customers that build applications in ServoyCloud, the Servoy Developer (IDE) can now automatically checkout these applications from ServoyCloud Repositories.

Servoy Developer adds simplified UI to quickly push and pull from ServoyCloud when you have a cloned repository selected.

This applies only when having an empty workspace and when you are logged into the IDE using your ServoyCloud credentials. All other implementations will be unaffected.

Value List - Search Customization

A new configuration property has been added to allow developers to customize the behavior of components using ValueList objects to perform look-ups.

A new property type is added to the system ValueListConfig which will be used besides the ValueList property type for certain components like the typeahead which use the filter option of the valuelist. now through the config file you can say how the filtering should be done like "startsWith" or "contains" also should only the display values be queried or also the real values.

This is a replacement for components that now use APP_NG_PROPERTY.VALUELIST_CONTAINS_SEARCH UI property, components that use the filter options should start using this new ValueListConfig property

List Form Component

We have added properties rowEnabledDataprovider and a rowEditableDataprovider to the ListFormComponent to disable or make 1 row read-only based on a calculation dataprovider. Also inline with other components the "readonly" property is only used under the hood by controller.readOnly and an "editable" property should be used to make the LFC itself fully read-only or not through code.

HTTP Client Pugin

HttpClient plugin now has an option to disabled hostname/certifcate validation completely with HttpClientConfig.hostValidation = false. (this should only be used for testing purposes!)

NGDesktop

When using NGDestkop and you use application.showUrl() or that is used under the hood (by the OAuth plugin) then you need to also update ngdesktop to the latest release. Else showUrl will fail or don't do anything.

Behavior Changes

Below are key client behavior changes to be aware of.

List Form Component - Default Scrolling Mode

The ListFormComponent now supports scrolling and that has become the default mode. (Previous implementations supported only pagination)

If you take no action, then you will notice that these lists will scroll instead of paginate. However, if you want to revert to the classic mode, then you can configure the client using a UI property LISTFORMCOMPONENT_PAGING_MODE. This can be done globally or for individual components.

Revert Globally

// Revert to classic pagination for ALL list form components
application.putClientProperty(APP_UI_PROPERTY.LISTFORMCOMPONENT_PAGING_MODE, true) 

Revert Individually

// Revert to classic pagination for an INDIVIDUAL list form component
elements.orders_fc.putClientProperty(APP_UI_PROPERTY.LISTFORMCOMPONENT_PAGING_MODE,true);

List Form Component - Responsive Height

When using a Responsive Layout form, the behavior can change because the responsiveHeight property of the ListFormComponent will work the same as the responsiveHeight property of the Data Grid.

API Changes

The following are additions and changes to API

  • Added method getRecordByPk() to JSFoundSet (and ViewFoundSet): Added performance enhancement: Allows a developer to quickly get a cached record by primary key. Does not trigger a query to the database.

  • Added methods getSQL() and getSQLParameters() to QBSelect, JSFoundSet (and ViewFoundSet) Allows a developer to quickly get the underlying SQL and Parameters from an object. These methods are now Deprecated from JSDatabaseManager.

  • Added getLoadedFoundsets() to JSDataSource. This method can be used to loop over JSFoundSet objects and programmatically dispose of them to clean up resources quickly.

  • Added getFoundset(name) to JSDataSource. An existing JSFoundSet under that name will be returned and created if need be.

  • Performance enhancement JSDataSource.getRecord() now uses a special named JSFoundSet instead of a fully cached JSFoundSet.

  • A disposed JSFoundSet cannot be used anymore (added checks)

added servoy property

"servoy.ignore.invalid.server.on.import=true" can be added to the servoy.properties file when you allow database servers to be invalid on import. Be carefull with this, because this does mean servoy will not do any updates to the schema op the database, so that is something you have to control your self. If you use this to have all kinds of clones that don't have to be there at startup, then those servers will be in a disabled state, and we will try to enabled it at the moment you use databaseManager.switchServer() So switch server can fail if the server still can't be connected to at that time.

Case List

Below is a comprehensive list of cases associated with each release candidate

2023.06-Final

We added a System property (-Dservoy.useES6) or through an Environment property to be able to set the javascript parser to the new ES202x mode. So that also through the command line you when exporting a solution/making a war the new parser can be used when exporting.

Also a new quick fix is added to the new builder warning for json properties that are in the frm files that are not in the spec anymore for those components.

2023.06-RC3

This is a release for the new NGGrid release, we needed to upgrade the underlying AGGrid lib from 29.x to 30.x because of some issue they fixed. But this is a major version increase, we made this RC3 release for a bit more testing. You have to use the latest NGGrid 2023.06.x also with Servoy 2023.06_RC3. This stuff also affects the new ListFormComponent in scrolling mode (see Behavior differences)

2023.06-RC2

2023.06-RC1

ComponentsKeySummary

Last updated