Today we’d like to announce the third and final installment of the new features we’re adding to Smart GWT 4.1 / SmartClient 9.1 (this is Part 3 of 3). These features are all ready to use now in the latest nightly builds, and are in addition to the previously announced features from our last two blog posts; New Smart GWT 4.1 / SmartClient 9.1 Features (Part 1 of 3), and More Features for Smart GWT 4.1 / SmartClient 9.1 (Part 2 of 3).
As always, the new features come complete with detailed samples and documentation. Also, please note that our nightly builds are more stable than the word “nightly” may imply – each nightly build must pass 10’s of thousands of automated tests in order to become available for download.
To try out the new features, you can download the latest nightly builds here:
Smart GWT 4.1d:
If you experience any issues with the new features or have any feedback for us, please post to the Forums. When posting, be sure to indicate that you are using a nightly build, and the exact date of the build.
So, without further ado, here are the final new features you can expect to see in Smart GWT 4.1 / SmartClient 9.1.
Multi-lane Day View
A new mode of the Calendar, enabled via calendar.showDayLanes, allows you to display several “lanes” side by side in the Day View. This can be used for side-by-side comparison of scheduled for people, conference rooms, vehicles or other scheduled items. Events can be dragged between lanes, with automatic persistence to a DataSource when this is done.
Spreadsheet Export Enhancements (Pro Edition and above)
- Force column types: prevents Excel from interpreting string values as numeric or date values because they happen to look that way.
- Support for ledge-style / banded rows, and APIs to allow arbitrary control over background color in exports.
- Left/right alignment of values are now exported.
- Column widths are now optionally exported, with an adjustable scaling factor.
- Header heights can be exported so wrapped header titles look appropriate.
“matchesPattern” Search Operator
The “matchesPattern” operator takes a pattern like “foo*txt”, similar to the patterns you use to match names of files in a command-line interface, or to the pattern allowed for the SQL “LIKE” operator. The “matchesPattern” operator provides a simpler alternative to the “regexp” (regular expression) search operator, which is too advanced for most end users, and is often not supported by SQL engines (or has cases with unacceptable performance). Both client and server-side support has been implemented, with the pattern being translated directly to efficient SQL for the JPA, Hibernate and SQL connectors included in Power Edition and above.
In addition, to assist users who have implemented their own server-side support for AdvancedCriteria, an optional flag DataSource.translatePatternOperator has been added that will transform a “matchesPattern” operator into a nested set of “contains”, “startsWith” and “endsWith” operators that are nearly but not perfectly equivalent. This means you can immediately enable support for “matchesPattern” in your application without implementing special support for it.
To try this out, take a look at the “Expression Filter” sample under Grids>>Filtering in either the SmartClient Feature Explorer or SmartGWT LGPL Showcase. In this screenshot, the “a*a” filter expression selects all countries with two or more “a”s in the name.
Selenium and TestRunner Enhancements
Our Selenium extensions have been enhanced so that record & playback of drag-and-drop interactions now work for many more scenarios without the need to manually insert any events into the script.
In addition, a new client-side log category “testReplay” has been added, which is intended to be enabled when playing back Selenium-recorded scripts. It provides detailed information about why Selenese commands are failing. For example, instead of just finding out that an element couldn’t be clicked, these logs can show you whether the element was missing from the DOM, hidden, blocked by other elements, offscreen, or some other issue.
Finally, the TestRunner tool (Power Edition and above) can now capture and store client- and server-side logs generated during Selenium playback whenever a test fails. This is a huge boon for troubleshooting intermittent bugs that cause tests to fail only once in a long while.
Google App Engine CloudSQL Support
Google App Engine (GAE), a cloud hosting service for Java applications, has added true SQL database support with the recent introduction of Google CloudSQL. We’ve added official support for CloudSQL to our SQLDataSource – you can configure and test connection settings for CloudSQL right in the Admin Console, or use database.type:"cloudsql" in your server.properties file. We’ve also added new sample projects, and a wiki article discussing details of using GAE, CloudSQL, and other storage options provided by GAE.
Simple Storage for multiple:true Fields (Pro Edition and above)
A field declared as type="text" multiple="true" contains an Array of simple text values. However, prior versions did not support storing such values to SQL, JPA or Hibernate – partly because this would be considered “denormalization”, which makes using database features like SQL joins more difficult. Sometimes, though, it is exactly what you want, and now it’s supported!
The setting dataSourceField.multipleStorage gives you a couple of options for exactly how values are stored, including a simple delimited string or serialization to JSON. Through some tricky transformation of criteria, multiple:true fields even support limited server-side search features that cover most common use cases – the documentation for dataSourceField.multipleStorage covers these behaviors in depth.
This feature will also work with custom server-side DataSources, because it’s been implemented as a bi-directional transform that happens right before data is stored, and right after it is retrieved.
<customJQL> for JPA (Power Edition and above)
Similar to existing support for Hibernate, you can now add a <customJQL> tag to an <operationBinding> to invoke a hand-coded JPA query, using Velocity templating to inject dynamic values.
Component XML: New DynamicScreenGenerator Interface (Pro Edition and above)
Component XML screen definitions provide tremendous power and flexibility because they are interpreted at runtime: they can be stored in a database, generated from other formats on-the-fly, or even created and modified by end users to create a runtime-extensible UI. The previous release introduced a new RPCManager APIs cacheScreens() and createScreen() that enable batch loading of several screen definitions at once via the ScreenLoaderServlet.
A new server-side API ScreenLoaderServlet.addDynamicScreenGenerator() allows you to provide screen definitions on the fly to the ScreenLoaderServlet, so you can take advantage of batch loading of screens even if you are loading or generating your screen definitions at runtime.
A Note for customers with Smart GWT 3.x / SmartClient 8.x Licenses:
Smart GWT 4.x / SmartClient 9.x is a paid upgrade for Smart GWT 3.x / SmartClient 8.x license holders. If you upgraded or purchased licenses on or after November 21, 2012 then you already have a Smart GWT 4.x / SmartClient 9.x license. Otherwise, please contact us for upgrade pricing. Upgrade prices are based upon the date of your previous purchase. Get access to the entire Smart GWT 4.x / SmartClient 9.x series by upgrading now!
You can get more details about the new features in Smart GWT 4.1 / SmartClient 9.1 in our previous two posts; New Smart GWT 4.1 / SmartClient 9.1 Features (Part 1 of 3), and More Features for Smart GWT 4.1 / SmartClient 9.1 (Part 2 of 3). As always, please send us any bug reports or feedback in the Forums. Please be clear about what product and version you’re using when reporting issues, including the exact date of the build.
- To order an upgrade from a previous version and for more options, please contact sales.
- For more information about how our licenses work, please see the Product & Licensing FAQ.
Download Smart GWT 4.1d or SmartClient 9.1d to get started using our newest features today!
The Isomorphic Team