Servoy 3.5 beta 3

We announce the immediate availability of Servoy 3.5 Beta 3

NOTE: this is PRE-RELEASE SOFTWARE, use with caution and make BACKUPS before you start.

This version is available through the download page on the Servoy website (developer section).

Because of our move to Tomcat 6, you will need to do a full install for this beta. We plan to have the auto updater working again for future releases.

Changes
[new] suggestions for global method assignments to form events
[new] column (i18n) title and description
[new] table events for hooking methods to insert, delete and update actions
[new] location parameter in addTab to insert a tab at a specified location
[new] validators on column data providers (can be defined on columns)
[new] “or” notation possible in find fields, example: >10||<0
[new] converters to automatically convert field data
[new] possiblity to show non-modal form dialogs
[new] skip the solution onload method in servoy developer by holding shift in select solution dialog while clicking solution to load
[new] databaseManager.getViewNames()

[enh] in new records, the first field gets focus
[enh] AJAX can be switched on and off via the admin page for web clients
[enh] preventing duplicate pk’s in related search or sort (on non-pk columns)
[enh] popup menu plugin working in web client

[chg] Java requirements, see below
[chg] increased memory limit for windows service
[chg] using native database function to limit sql results

[fix] data truncation problem with large sums on number columns
[fix] duplicating find records with date ranges does not work
[fix] when importing a solution using a table that used to exist, sequence on the table might get lost
[fix] prevent auto creation of servoy sequences for existing tables
[fix] databaseManager.getTableNames() did return views as well
[fix] fix for record delete in combination with database-defined cascade delete
[fix] DBTreeView data loading fix for incorrect data

Java requirement changes
Due to the move to Tomcat 6, Servoy now requires Java 1.5 for both Servoy Developer and Servoy Server. Servoy smart client will still work with Java 1.4.

Known issues

  • Serialize converter problem with multidimensional arrays
  • The security.canInsert / canUpdate / canDelete functions sometimes return incorrect results
  • DBTreeView bean does not work in runtime builder clients
  • Popup menu plugin checkbox/ radio menu item not (yet) working in web client

Previous release:
http://forum.servoy.com/viewtopic.php?t=8169

[new] “or” notation possible in find fields, example: >10||<0

Very nice!

[enh] popup menu plugin working in web client

Sounds also very impressive!

I am very interested in this method:

databaseManager.getFoundSet(server, table)

Is this supposed to return a foundset for whatever server/table? If yes, it doesn’t seem to work. It always returns something that looks like an empty String.

Great job, a lot more working.

one thing though, i now have a lovely webclient modal dialog box.

how do i close it from a script??

the application.closeFormDialog() doesnt work.

am i missing something (as usual)

Specify the name (string) of the dialog that you gave it when you opened it - the “dialogName” property below:

application.showFormInDialog( form, [x], [y], [width], [height], [dialog_title], [resizable], [showTextToolbar], [dialogName], [modal])

Sorry Bob,

its not happening for me.

Script that calls the window

globals.result='';
application.showFormInDialog(forms.delete_dialog,100,100,400,180,"Delete",false,false,"mydialog",true);

if (globals.result=='ok')
{
controller.deleteRecord()
}

Script that tries to close it:

globals.result='ok'
application.output(globals.result);
application.closeFormDialog("mydialog");

It definitely runs because it return the output OK into my debugger as webclient: ok

It works fine in the java client just not in webclient.

David

Another problem is that the printer doesn’t seem to work on OS X anymore even in developer?

Doesnt seem to find a printer unlike 3.1.4.

Sorry.

David

Coming back to my question :) regarding

databaseManager.getFoundSet(server, table)

If it does what it sounds like, it’d be really nice if it could be enhanced by

databaseManager.getFoundSet(server, table, [query], [args])

That would really allow us to create foundset of whatever sort “in the dark”…

dpearce:
Sorry Bob,

globals.result='';

application.showFormInDialog(forms.delete_dialog,100,100,400,180,“Delete”,false,false,“mydialog”,true);

if (globals.result==‘ok’)
{
controller.deleteRecord()
}





David

this will not work in the web client.
You do have “modal” dialogs in the browser. But they are not modal in scripting, with that i mean that the scripts stops at the call: application.showFormXXXXX
that will not happen in servoy 3.5 maybe we can fix that kind of stuff in 4.0
So if you want to wait for the outcome then you have to do that in the onhide or in the button click thats on the form in dialog.
In other words the application.showFormInDialog should be the last thing you do in a script.

It could be that the close form in dialog doesn’t work correctly at this time. But it should work fine ofcourse if you place a button in a modal dialog and when you press that button the closeFormInDialog is called the dialog must be closed. If this isn’t the case please make a case for this.

gotcha

i think i understand. the script that shows the dialog will finish. i will need to pick up my database record to delete and then hard code that into my OK button.

Thanks again johan

When I create an event I noticed I can do so with no server expanded/selected but I can also create it per table. Both are stored.

Is this correct or will that first event be ignored (in other words is this a bug)?

Ok, finally got to play with table events this morning. This is a feature I’ve eagerly anticipated. :slight_smile:

They seem to function like I would expect. You get the record as an argument, and can return false to prevent the event from happening. You can manipulate values of the record (although I seem to be getting some sql errors in certain circumstances – i’ll let you know if I can reproduce).

So, these are “before” events. It would also be very cool if we could get “after” events. There’s a lot of cases where I want something to occur in the data model only if the event has successfully occurred. For example, creating certain default relation records “after” insert.

Also, I get the row as an argument. How do I go about testing what table that row is from? Is there a method for that? If I want to make some of my global event methods generic, I’d like to know what table I’m getting a row from.

I know this is probably a much more complex thing to ask for, but somewhere down the road it would be really cool if we could actually define callable methods on the dataprovider tables.

At any rate, very cool new stuff in 3.5. I’m about to start a new solution and I’m excited about take advantage of it all!

Thanks, greg.

Validators and Converters are set on a ‘per column’ basis.
However, this does not only set the values for the solution you set them in but it is done ‘repository wide’.

Is this how you meant this to be. I think I can agree but this makes the setting of a global method as a validator a little bit ‘dangerous’.

The same applies to setting a global variable as a lookup value.

Can you please explain this a little more…

I also notice that, in the CRM demo for instance, I can’t get a printpreview when clicking on the printer icon - I get a ‘java.lang.NullPointerException’ error.

Aside from that, good work boys and girls! :)

Ben

If it does what it sounds like, it’d be really nice if it could be enhanced by

Code:
databaseManager.getFoundSet(server, table, [query], [args])

That would really allow us to create foundset of whatever sort “in the dark”…

you can do this in 3.5:

var vs = databaseManager.getFoundSet(server, table).loadRecords(query, [args])

That’s very cool!! In the current beta this does not seem to work, however. Is that right or am I missing something? And: I understand right that you don’t need a form based on that table at all, right?

That’s very cool!! In the current beta this does not seem to work, however. Is that right or am I missing something? And: I understand right that you don’t need a form based on that table at all, right?

Nice work. Thanks guys.

Now in the debug mode the codes past the showFormInDialog are not run until you close the formInDialog which is cool. But I could not debug any code while the formInDialog is on the top. I could not touch the method editor and other debug buttons there. Would be cool if this is fixes quickly.

Thanks

Patrick: that should already work in the latest beta of 3.5

faheemhameed: i will look at this. Maybe we maybe don’t check this anymore because it is currently one of the other (so or you have a blocking dialog and can’t debug it or you have a none blocking dialog and you can debug it)