Servoy 6.1 rc 3

We are pleased to announce the immediate availability of Servoy 6.1 release candidate 3.

This version is available through the download option on the Servoy website and auto-update.
Always make a backup of your current Servoy installation (directory and database) before installing/upgrading.
To update a Servoy eclipse open Check for updates via help menu.

For Servoy 6.1 feature highlight see wiki

The issue’s fixed only in 6.1 or not yet released in other version are:

Client Changes
[chg] SVY-1811 On NO Record selection event
[fix] SVY-2058 RuntimeDataField scripting object does not expose the editable property at runtime

Developer Changes
[fix] SVY-1711 Have an option to run at least unit test for a specific form instead of the whole solution.
[fix] SVY-1658 Add Rhino 1.7R3’s JSON implementation to Servoy eclipse
[fix] SVY-2355 Some deprecated items are not documented with their replacement
[fix] SVY-2347 Form Editor doesn’t take background-color from assigned styleClass if the form is extending another form
[fix] SVY-2332 Servoy “losing” the correct variable type which is either explicitly typed or the array is explicitly typed.
[fix] SVY-2254 JSButton.onAction is null when entity-method is attached.
[fix] SVY-2080 NPE when calling IQueryBuilderFactory.createSelect()

There is a serious issue in RC3 - when using primary keys of type UUID we can no longer load related data. Instead, the following error is thrown:

Error loading primary key data, Query must start with 'SELECT'
 > java.lang.IllegalArgumentException: Query must start with 'SELECT'

We need this one fixed ASAP because all our PKs are of type UUID and basically everything is down currently.

Unfortunately, this is not the first time when PKs of type UUID are breaking Servoy. How hard is it to have a few test tables with such PKs and run some unit tests to make sure that regression bugs have not been introduced?

Rossen,

Can you show a code snippet?

Rob

rgansevles:
Rossen,

Can you show a code snippet?

Rob

Hi Rob - take a look at this case: https://support.servoy.com/browse/SVY-2400

Very simple to reproduce but if necessary I can provide a sample solution as well.

Rossen, are you already in production with RC’s?
And if so, are you updating without testing?

Harjo:
Rossen, are you already in production with RC’s?
And if so, are you updating without testing?

Of course not! However we do need some of the new functionality in 6.1 and were planning to upgrade our development environment to the RC3 this weekend… will have to wait now

rossent:

rgansevles:
Rossen,

Can you show a code snippet?

Rob

Hi Rob - take a look at this case: https://support.servoy.com/browse/SVY-2400

CORRECTION: The issue as described above is invalid and can be closed. The root cause of the problem turned out to be some change in the way the controller.loadRecords() method calls are handled in 6.1RC3. Here are the details:

Because the Servoy forms currently do not expose an event callback for the case when their foundset is changed after a call to controller.loadRecords(relation_or_foundset), we have a “wrapper” method in our base form which internally calls controller.loadRecords() but also performs some other UI updates and notifications. Our “wrapper” method is like this:

/**
 * This is a wrapper around the controller.loadRecords method (check its documentation for params info). 
 * It should be used instead of calling the form's controller directly to make sure that the form 
 * updates correctly the data context of any other forms hosted on it.
 * 
 * @param {JSFoundset|JSDataSet|Number|UUID|String} [data]
 * @param {Array} [queryArgumentsArray] - optional, should be used only when the specified data is a query string
 * @return {Boolean} 
 * @properties={typeid:24,uuid:"95D933E7-A20E-484C-A6B3-65D0244EAEE8"}
 */
function controllerLoadRecords(data, queryArgumentsArray)
{
    var res = controller.loadRecords(data, queryArgumentsArray); 
    
    //invoke the notification to allow any extending forms to update their state using the new data context
    dataContextChanged();
    //now refresh the UI
    updateUserInterface();
    return res;
}

This code works correctly without failing in 6.0.6
However in 6.1b3, the line:

var res = controller.loadRecords(data, queryArgumentsArray);

throws the described exception even when the “wrapper” is called passing only the first argument like this:

forms.someForm.controllerLoadRecords(some_self_relation)

After changing the code of our “wrapper” method to:

function controllerLoadRecords(data, queryArgumentsArray)
{
    var res = false;
    
    if(queryArgumentsArray == undefined)
    {
        if(data == undefined)
        {
            res = controller.loadRecords();
        }
        else
        {
            res = controller.loadRecords(data);
        }
    }
    else
    {
        res = controller.loadRecords(data, queryArgumentsArray); 
    }
    
    //invoke the notification to allow any extending forms to update their state using the new data context
    dataContextChanged();
    //now refresh the UI
    updateUserInterface();
    return res;
}

the issue is resolved.

In other words, there is a change in behavior between 6.0.6 and 6.1b3 which results in Servoy choosing a different overload for the method controller.loadRecords() even though we still were passing the same arguments. Not sure if this is a desired behavior or some side effect which merits a separate case.

Rossen,

In 6.1 we have replaced a number of varargs methods with multiple methods with typed arguments.
controller.loadRecords() is one of those.

With most calls this method has 1 argument (like UUID or foundset), but with a select it has 2 (sql and parameters).
When the method was called with 2 arguments, but the first was not a string, the second was ignored.

After this change, a call with 2 arguments always matched to loadRecords(String, Object) because this is the only one with 2 args.
The first arg was interpreted as select.

I have now corrected that for next build, loadRecords(UUID, xxx) will be interpreted as loadRecords(UUID).

Rob

I have an application server (6.0.6) running for testing. Is it possible to make an update to 6.1 RC3? I have tried “java -jar servoy_updater.jar -beta” but the result is “No update found, if you want beta versions start option: -beta”.

briese-it:
I have an application server (6.0.6) running for testing. Is it possible to make an update to 6.1 RC3? I have tried “java -jar servoy_updater.jar -beta” but the result is “No update found, if you want beta versions start option: -beta”.

See this post: viewtopic.php?f=1&t=18249&start=15#_thread

I know that posting you wrote but that’s not helpful or where can I configure update-sites on an application-server? Please note that Iam talking about the ApplicationServer and not the Developer.

briese-it:
I know that posting you wrote but that’s not helpful or where can I configure update-sites on an application-server? Please note that Iam talking about the ApplicationServer and not the Developer.

I think is not possible…

Now I am testing on a 6.1RC3 Developer and a new installed test-application server and everything is really slow. Clicking on menu items (using the new Framework) and loading data of foundsets (postgres and foxpro dbf). This happens on both, dev and appl.server. Has anybody else the same problems?

Good afternoon from Paradise !!

I want to take advantage from the new feature of creating media folders and I have setup a few of them to keep them ordered. Is there anyway to move the media to the new folders? If so, does it automatically changes where they are referenced?

Thanks in advance.

you can’t move them inside the solution explorer, but you can on the file system,
and then refresh the project so they are loaded; reference update may work only for dnd inside
the solution explorer - you may create a case for supporting this;

jasantana:
Good afternoon from Paradise !!

I want to take advantage from the new feature of creating media folders and I have setup a few of them to keep them ordered. Is there anyway to move the media to the new folders? If so, does it automatically changes where they are referenced?

Thanks in advance.

Hi
I’m working on updating a solution from 5.2 to 6.1. I am using login/authentication which works fine in 5.2. However in 6.1 I have a problem with constructing a custom valuelist from a JSDataSet on authentication. The outputs from both are identical but when I use that dataset to construct my valuelist I’m getting a ‘java.lang.NumberFormatException’. It seems it is expecting a number in 6.1 whereas in 5.2 it works fine.

function RemoteWebClientDeveloper(remoteUser) {
	/** @type {JSDataSet} disease_groups*/
	var disease_groups =  security.authenticate('CCDB_AuthSolution', 'GetDiseaseGroupsForUser', [remoteUser])
	application.output(disease_groups);
	if(disease_groups) {
		application.setValueListItems('cvl_login_dis_grps',disease_groups);
		application.output(application.getValueListArray('cvl_login_dis_grps'))

The application.output for disease_groups is the same for 5.2 and 6.1, namely:

BufferedDataSet {Columnnames[DISEASE_GROUP_NAME, DISEASE_GROUP_ID, DEPARTMENT_ID, USER_ID]}
row_1[BLADDER, 1, 22, 1]
row_2[KIDNEY, 2, 22, 1]

The error I get in 6.1 when setting the valuelist is:

For input string: “BLADDER”
Wrapped java.lang.NumberFormatException: For input string: “BLADDER” (/Users/John/servoy_workspace6.1Oncology/CCDB_Login/globals.js#101)
at /Users/John/servoy_workspace6.1Oncology/CCDB_Login/globals.js:101 (RemoteWebClientDeveloper)

The form variable where the valuelist is used is a Number (1,2 in this example) but should display the text (BLADDER, KIDNEY). Again all works fine in 5.2 but not in 6.1
Has something changed with how custom valuelists are constructed or ordered in 6.1?

Hi john,

/** @type {JSDataSet} disease_groups*/
var disease_groups = security.authenticate(‘CCDB_AuthSolution’, ‘GetDiseaseGroupsForUser’, [remoteUser])

In your code you are expecting a “JSDataset” object in return, but in servoy 6.1 beta “authenticate” method returns a boolean value instead of any type object.

john.allen:
Wrapped java.lang.NumberFormatException: For input string: “BLADDER” (/Users/John/servoy_workspace6.1Oncology/CCDB_Login/globals.js#101)

Sounds like an issue, could you please file a case?

Thanks Jan. I logged it (Jira).

It has to do with how 6.1 is handling JSDataSets in conjunction with setValueListItems. Extracting the JSDataSet columns as arrays and using those to populate the valuelist works. So in my case… ```
application.setValueListItems(‘cvl_login_dis_grps’,disease_groups.getColumnAsArray(1),disease_groups.getColumnAsArray(2))

works fine.