New Features
General
- Numerous ScreenReader enhancements and fixes, including aria-label support for all FormItems, Buttons, FilterBuilder, prompts on form items, improving native focus on elements (including listGrid), cross browser support
- Drawing module enhancements - much extended APIs and better examples
- Numerous improvements in support for mobile browsers (including Android Browser and iOS Safari)
- Charting module is now available in SmartClient Pro and has various fixes and enhancements
- show native focus indicators on Chrome and Safari browsers
- Schema files for various validator types, allowing server side declaration of validators in dataSource XML using validator names such as "DateRangeValidator" et al.
- Lots of skinning changes.
DataBinding
- Numerous enhancements, documentation improvements and stability fixes to server side dataSource logic
- Cross-dataSource features, including DataSourceField.includeFrom and request.additionalOutputs.
- Various enhancements around working with AdvancedCriteria.
- Support for transaction queueing for RestDataSources, both on the client side and the server (via the RESTHandler servlet)
- DataSource.dropUnknownCriteria feature - if set to true (the default) client side filtering will ignore criteria for fieldNames not explicitly present in the DataSource.
- customSQL enhancements, including support for velocity expressions in customSelectExpressions, field level customCriteriaExpression, and additional variables $criteriaValue and $criteriaOperator
- Support for customization of SQL data paging strategy
- SQLDataSource Support for Firebird database plus generic SQL92 connections (limited support)
- Hibernate integration improvements including support for includeFrom, valueXPath, custom HQL
- sqlStorageStrategy updates including support for "ntext" for Microsoft SQLServer
- Server: support for "strictJSONMode" on JS translator
- Server: support for DataSource::getPropertyJavaClass()
Miscellaneous Component / UI changes
- Support for new ToolStrip related components ToolStripGroups, RibbonBar, RibbonGroup
- PortalLayout and Portlet enhancements
- Support for exporting components' print view as pdf format
- support for formulaBuilder.messageLabel
- Respect "minWidth" / "minHeight" specified on a percentage sized component
- isc.showFadingPrompt() method
- ToolStrip and related components added to Visual Builder
ListGrid, TileGrid and TreeGrid
- ListGrid reworked to be a VLayout subclass, with support for customizing sub-components via listGrid.gridComponents
- Support for delayed / batched removal of records from a ListGrid (via deferRemoval attribute)
- Support for ListGridField.multiple
- listGrid.filterEditor autoChild publicly documented
- Support for recordContextClick on TileGrids
- Better support for cascading selection in TreeGrids with incrementally loaded data.
Forms
- Notification event for dynamic form asynchronous validation completion
- FormItem item vertical alignment support
Fixes
ListGrid and TreeGrid
- Various issues to do with filterEditor field order, sizing, visibility
- Fixed date formatting for excel export
- Fixed issues with criteria being ignored on export in treeGrid
- Various fixes around recordComponents' life-cycle management
- Fixed a bug where expansion components / record components could get "lost" on server side data change
- Formatted export would crash on grouped grid
- Fix for error dragging into a grid with all disabled records
- ListGridField autoFitWidth logic fixes
- Force a refresh when explicitly recalculating summary values even if data appears unchanged, and added support for recalculating grid level summaries without recalculating summaries at all levels in the grid.
- On 'setData()' on a grouped grid, reapply initial group open state rather than attempting to apply current tree open state to the new data
- Fixed an issue where frozen body could leave whitespace at the bottom when rapidly scrolling
- Fix for an issue where expansion components could interfere with the positioning of recordComponents
- fix for an issue where allowFilterExpressions could confuse checkbox-items in the ListGrid filterEditor
Forms
- Numerous fixes to the "allowExpressions" / "allowFilterExpressions" functionality expression items
- FormItem selectOnFocus won't override actual cursor insertion based on mouse click position.
- Various ComboBoxItem stability improvements / fixes around filtering, addUnknownValues false, showHintInField
- DataBoundPicktreeItem - support for initial criteria and invalidating cache
- Fix for possible memory leaks failing to clear up generated dateRangeItem dialog box and related components
- Fix for tabIndex issues around RadioGroupItems
- Several MultiFileItem fixes
- Fixed some formatting issues with DateItems showing error icons
- Fix for issue where cellHover component fieldNum could be incorrect while frozen fields were showing
- Fix for icon positioning with RelativeDateItems
- Fix for erroneous sorting of null entries in datetime type fields.
- Added workaround for native IE issue whereby assigning certain HTML strings to certain DOM elements' innerHTML at runtime can generate runtime errors. This came up setting StaticTextItem values
- Fixed a case where SelectItem/ComboBoxItem.fetchData() could fail to drop cached data
- Avoid writing out the title suffix for a form item with no title
- Support for applying "inSet" criteria to AdvancedCriteria via multiple:true selectItem
- Some enhancements / fixes around FormItems and optionDataSource
- Fixed some issues where RelativeDateItems could show the wrong absolute date value for some shortcuts
- Fix for an issue where dateItems could fire changed more often than necessary
- ComboBoxItem/SelectItem: Fix for an issue where the pickList header could fail to respect the height specified in pickListProperties
- Fix for an issue where ButtonItems could fail to show disabled state properly
Other
- Various visual builder fixes and editMode fixes
- Various improvements to Calendar
- batchDSGenerator fixes
- Realtime Messaging 'domain synching' code could cause (ultimately harmless) JS error in some cases
- Fix for an issue with ctrl / alt key detection in Windows (non US keyboard mappings)
- Various tab order fixes
- Fixed some interactions with modal prompts and click masks
- Some messaging servlet fixes around contentType
- Fix for DateChooser year menu positioning bug
- Chrome-specific fix for issue where tabSet close click could fail to remove unselected tabs in some skins
- Some fixes / other work on dataPath
- Fixed some issues around dragAppearance:"tracker" and dragResize/dragReposition
- Fix for a potential memory leak in RestDataSource when serializing requests
- Fixed an issue where valueMaps defined in xml (EG in a ds.xml file) could end up in the wrong format
- Fix for potential "Connection Closed" error when processing extremely large multi-operation update queues on the server
- Fix for an issue where "xsd:type" attributes on XML responses could confuse client side code to parse XML into Record objects
- Fixed a problem in DataSource loader where a bad DataSource ID would be echo'd back to the client, creating a possible exploit for applications deployed at well known URLs that do not implement general XSS (cross site scripting) protections, and where a user is fooled into clicking on a malicious link
- Fix for an issue where server side code required a DSRequest to have an associated dataSource (there are valid cases where it might not).
Changes in 8.1
New Features
General
IE 9 and Firefox 5 support
ARIA/Section 508 accessibility compliance
New dataPath Feature that provides a straightforward way to display or edit complex nested data
Support for Expressions - allowing users to define complex filter criteria using simple strings
Various timezone conversion, date, time and date-time formatting fixes and enhancements
i18n enhancements
ListGrid
Added ListGrid allowFilterExpressions property to support use of expressions when filtering. For example "<50 or ==99"
Support for multi-line summaries in groups and at the grid level
Augment ListGrid state management such that get/setViewState also preserve hilites and grouping data, along with frozen field information
New Group Title column feature; added new showGroupSummaryInHeader attribute
Added support for specifying an array of summaryFunctions per field,
which display as multiple lines in the grid summary or per group summary
Support for ListGridField summaryValueTitle property and SummaryFunction type "title" to show arbitrary text in the summary row (or group summary row) for a field in a grid without having to write any code
New viewStateChanged event fired from grouping, sorting, fieldState changed
New sortChanged event fired from setSort() whenever the sorting changes
Added ListGridField dataPath property
Addition of new ListGrid.saveRequestProperties, to allow for customization of the properties sent on the save Request
Enhance record summaries in grids by providing support for locally held data to be included
New API ListGrid.getSelectedRecords() to return all Records that have been selected in a grid as a RecordList
Added refreshRecordComponent() API
New setAutoFitFieldWidths method to enable/disable autoFitFieldWidths at runtime
Added showSortNumerals property
Support for group summaries even when there are more than one groupByFields specified on the ListGrid (nested groups)
New ListGrid boolean property editOnF2Keypress - if true, (the default) start editing on F2 keypress
Support for sorting group headers by all fields when showGroupHeaderInSummary is true
TreeGrid
Img
Menu and MenuButton
FilterBuilder
Additional params passed to getValueFieldProperties() to make this a more useful override point
Added support for filterButtonProperties to customize the actionButton on the filterEditor
Added new Operator "iBetweenInclusive" client and server side - provides case-insensitive range searching for strings (for example: "a...f" in a formItem allows for a case-insensitive search)
DynamicForm / ValuesManager
DynamicForm.allowExpressions and FormItem.allowExpressions added to allow expressions in formItems when producing criteria - for example "<50 or ==99"
New property 'formatOnFocusChange' If set, formatEditorValue re-runs whenever the item receives or loses focus, meaning the developer can show a prettier string while the user isn't actively editing it
Support for parse / formatEditorValue in DateItems where useTextField is true
Added explicit 'innerTitleOrientation' to DateRangeItem
ComboBoxItem : On focus, record the element value. On blur, only run mapValueToDisplay and reset the element value if it has changed since focus
Enhanced FormItem.fetchMissingValues()to also manage optionDataSource events for retrieving a displayField value or selected record. Extended functionality will also maintain updates to these optionDataSource values
Enhance DateChooser functionality to round to end of day if rangePosition is set to end
Improvements to serialization of Date objects being produced by DateItem or RelativeDateItem types to serialize as logical Dates (excluding time) or datetime values (including) depending on the specified field type
Improvements to CanvasItems click/double click events when clicking within an embedded canvas
New date range elements improved to $weekAgo and $weekFromNow to allow the new rangePosition API to be usable for setting to beginning or end of day
RelativeDateItem : New properties 'showPastOptions' and 'showFutureOptions' to disable past or future options if desired
RelativeDateItem : New rangeRoundingGranularity feature - allows configuration, if selecting N Days Ago whether that's to the nearest day, hour, second etc.
Added support for overriding the preset options in RelativeDateItem's
CanvasItem now has a new showValue event to support customization of display values in embedded canvasses
Added canTabToSectionHeaders property to DynamicForm and SectionStackSection
Support null values for TimeItems
DetailViewer
Added DetailViewerField.dataPath
DetailViewer now respects the new field.dateFormatter, field.timeFormatter, component.dateFormatter, component.datetimeFormatter and component.timeForamtter pattern
TabSet
Canvas
DataSource
Selenium Support
Other
getSelectionRange support added for Opera 11 with Windows to allow text masking to perform properly
Added functionality to allow cross-frame scripting without security exceptions
Simplified event switching for offline support to be a single click service
Fixes
ListGrid
Improve performance of saveAllEdits() when processing a large number of edited rows
Fix for a bug where calling setFields() with a subset of the currently visible fields in a ListGrid would fail to remove the fields not present in the new field-set
Fix for a bug where if the summary row is visible and an h-scrollbar is introduced, a second h-scrollbar would display
Fixed issue with grid.unsort() not correctly managing a cell selected for edit after a sort
Fix to remove performance issue with colSpanning incorrectly rendering row cells and causing unnecessary redraws
Improved arrow key navigation with grouping by not toggling the group when a group node is selected
Fix to updateRollOverCanvas() to only perform necessary ListGrid canvas changes if there is an associated record or cell being rolled over
Fix to ListGrid where if type-validation converted from string to number, and stored out the number value, a call to getEditValue() could replace the converted value with the original string value
Fix for ListGrid.hasChanges() detecting a change in DateItem fields even if the user does not actually make any changes in the cell
Fix to allow disable of the "configure sort" right-click menu item (in the sorting box at the top-right of the grid) in a ListGrid when multiSort is unavailable
Fix for bug where valueMaps were not being picked up correctly when calling 'exportClientData' on a grid
Checkbox in selection column header correctly updates to reflect record selection state
Performance improvement : selectAllRecords() and deselectAllRecords() now avoids call API to refresh selection appearance on every row - instead performs a single refresh to display the new selection
When refreshing for cleared edit values on new rows, if the body is frozen, refresh that as well
TreeGrid
Fix to check if canCollapseGroup is false on TreeGrids, to avoid having to check open folder state on all folders
Fix to TreeGrid dragging of a node from root and dropping it into root (in the white space). Causing an error message about duplicate names
Calendar
Fix for an issue where overlapping events within a day could cause all the other events to assume they are also overlapping and render at half width
Correction to calendar events heights where the events spans the midnight boundary
Correction to calendar event resizing to disallow meaningless horizontal resizing
Fix to timing of calendar refresh to avoid trying to refresh a calendar where the calendar is destroyed or is in mid-destroy
SectionStack
Correction to bad printing of nested table components where SectionHeaders did not print correctly
When destroying sections, if section.controls is specified but hasn't been added to the section as a descendant, explicitly destroy it
TileGrid
Menu and MenuButton
FilterBuilder
Fixed bug with left align of the last field in filterEditor
Correction to FilterBuilder editorType for correctly attributing field type to operator when defined as using a fieldDataSource rather than a normal DataSource
Fix to ensure filterChanged() is fired in all cases when clauses are added and removed from filterBuilder
Fix to ensure when using FieldValuesAreEqual in filterBuilder dates are compared by type correctly
Correction to 'inSet' operator in FilterBuilder to handle when null or 0 criteria is returned
Performance improvement when working with dataSources with a large number of specified fields - in getEditorTyper() avoid creating test formItems for all dataSource fields.
DynamicForm / ValuesManager
If an item has an explicit validator of type 'required', show the required styling using setRequiredIf
Fix to avoid a crash if a DynamicForm with no DataSource specified is embedded in a ValuesManager with a dataSource specified, and the
form has explicit fields.
validateOnEditorExit: For ComboBoxItems where completeOnTab is true, don't validate as part of handleEditorExit if a tab is pending completion, wait for that completion to actually fire, then validate.
RelativeDateItem inner comboBoxItem width fixed to match that of other selectItems on the form
Fix to focus/blur processing to avoid custom parsers firing twice on ComboBoxItems
Fixes to RelativeDateItem to correctly use getValue()/setValue() methods
Support for passing a RelativeDate right into setValue() at the form or item level
Fixed an issue whereby when editing complex nested values in a ValuesManager (due to the dataPath feature), the saveData() callback was unreliable
Fixes to sporadic ComboBoxItem.completeOnTab failures if the user tabs before data has loaded
If request.willHandleError:true is passed to save method on a form or valuesManager, allow the callback to fire even if the response returned validation errors.
Fix for an issue where DateItems wouldn't detect change and therefore wouldn't validateOnExit if the user picked the value from a picker
Correction to ComboBoxItem.filterData() to ensure all data has been loaded before issuing the filterComplete() API.
Fix to clear existing errors from an invalid date field in text mode (useTextField) when a valid date is then selected
Improvements to Picklist positioning by directly looking at the data if the pickList isn't drawn yet
Correction to remove a specific use case issue in FormItems where Focus/Blur on multiple fields caused a loop
Correction to Values Manager managed form to remove a failure when the form contains fields that have neither a name of a dataPath reference
Corrected an error when defining pickListFields to ensure that if the showIf attribute is set to false the pickList Headers for those fields are ignored
Fix to a specific case on ComboBoxItems where a repeat fetch operation was triggered when a fetch was already in operation. Related to rapid data entry use
Fix to always include times in relative date-range criteria
Fix to correctly handle mouseOver on icons within form items
Fix to correctly manage focus on Items within a canvas within a DynamicForm, where clickmasks are specified
Fix to date logic to correct issue, where in some time zone(s) [seen in Brazil], DST adjustments happen at 00:00 and calling APIs to set a Date value to 00:00 on the day when the DST switch happens returns a Date one day earlier at 23:00
Fix to setValue() to allow it to manage roundPrecision as well as roundValues
Fix mask validators to not result in a exception if not passed a string, or specifically passed a exceptional value
Fix of an issue where single DateItem fields in Dynamic/Search forms, can appear as double Date range fields
Fix tabindex/tabbing behavior of the MiniDateRangeItem popup
Fixed error-icons not showing up with itemLayout: "absolute"
Improved CanvasItem focus management
Enhancement to PickListItem sizing functions by using ListGrid functions autoFitData() and autoFitFieldWidths()
Enhancements to FormItem field formatting behaviours by performing form and datasource type management
Fix to minor LinkItem issue where, in certain circumstances, clicking to the right of the link still performed the link action
New date range elements improved $weekAgo and $weekFromNow to allow the new range position API to be usable for setting to beginning or end of day
If allowEmptyValue is true and multiple is true on a SelectItem, not showing the empty row at the top of the drop down
Fixed a bug where expanding/collapsing SectionItems could cause forms embedded in scrollable / scrolled parents to jump scroll position back to zero/zero
DataSource
Fix to DataSource.handleUpdate to clear last update information for ResultSets to ensure the dataChanged API fires correctly
Correction to datasource.combineCriteria() to specifically mark the component criteria as advanced to stop the criteria being presented as separate criteria, but as one set of advanced criteria
Fix to ensure that if transformInput modifies an item's value while the user is typing in the field, focus ends up at the end of the field
Other
Corrected an issue with setStyleName() not rendering correctly if called after draw() on a Label
Fix to an issue where browsers complain about mixed security content with Flashlets and https is now automatically detected and managed
Changes in 8.0
New Features
- Selenium support
- Localization with 18 different language packs; numerous i18n improvements
- User-defined data highlighting: New HiliteEditor widget for editing hilites
- Significant performance improvements across the board; additional performance enhancements for ListGrid
- New skins "Enterprise Blue", "Graphite", "Simplicity"
- Updated Enterprise skin
- Wrapper components for Plugins: the components for managing browser plugins (Java Applets,
Flash players, etc) are now part of the free product (formerly ClientBridges Optional Module)
Mobile device support and HTML5
- Support for Apple iPad and Mobile WebKit; new attribute "isc.Browser.isIPad"; new attribute "isc.Browser.isTablet" (currently equal to isIPad)
- Partial Android support
- HTML5 Offline support
- New ColumnTree attribute "showMultipleColumns"; when set to false, only display a single column at a time, showing a slide animation when moving between columns
- New HTML5 Charting engine (FacetChart) as an alternative to FusionCharts (requires Analytics module)
Grid/Viewer/Chart
- ListGrid: expandable rows; nested grids to show related records; custom embedded component support
- New TreeGrid attribute "showOpener"; if false, does not display any opener icons
- Support for Header Spans when printing
- Improved support for printing ListGrids with embedded components
- Show "ListGrid.configureSort" menu item on every field, not just on the corner sort context menu
- New ListGrid method "recalculateSummaries()", to force recalculation/refresh of grid and group level summaries
- ListGrid support for frozen fields and virtual scrolling with record components
- DataBoundComponent.exportClientData(): an explicit dataset to be exported may now be supplied as an argument
- New ColumnTree attribute "columnProperties"; applied to each generated columnTree column
- New ListGridField attributes "linkURLPrefix", "linkURLSuffix"
- New FacetChart attribute "valueTitle" (requires Analytics module)
- New ListGrid attribute "canPickOmittedFields". If all of the following are true for a ListGrid:
- grid.canPickOmittedFields is true;
- The grid is databound;
- explicit fields are defined on the grid; and
- grid.useAllDataSourceFields is false,
... then show all DataSource fields that aren't present in the explicit fields array in the column picker menu.
- ListGrid cell hover components: new method "ListGrid.getCellHoverComponent()"
- DataBoundComponent.duplicateDragMessage: may now be set to null to suppress the warning, silently discarding duplicates
- New ListGrid attribute "chartType"
- New ListGrid attribute "autoFitFieldsFillViewport"; enables/disables the autoFitExpandField
behavior, where we grow one of the auto-fit fields to fill up the available space, if
auto-fitting would have left a gap to the right of the fields
- Improved ListGrid Hilites
- New ListGridField attribute "autoFitWidthApproach"; overrides ListGrid-wide setting
- New ListGrid attribute "autoFitIconFields"; set to one of "iconWidth", "none" or "title".
Defaults to "title".
For "icon" type fields, or fields with valueIconOnly:true (including booleans), this turns
on autoFit by default, and sets autoFitWidthApproach:"both" for autoFitIconFields:"title",
or autoFitWidthApproach:"value" for autoFitIconFields:"iconWidth"
- Double-clicks on a ListGrid header menu trigger autofit
- New ListGrid "Auto Fit All" menu option
- New ListGrid attribute "autoFitFieldWidths"; may be overridden per-field
- New ListGrid/TreeGrid attribute "selectionProperty"
- Per-Column AutoFit: ListGrid/TreeGrid attribute "autoFitWidth"
- Multi-level sort for grids (client and server support)
Forms
- Masked text input: specify the mask in a regular-expression like format, and the rest is handled for you
- New FormItem attribute "displayFormat", for items of "date" or "time" type
- FormItem "inputFormat", for items of "date" type
- FormItem.setRequired() may now be called at runtime (after initialization)
- New DynamicForm, FormItem attribute "browserSpellCheck", for enabling/disabling native browser spell check feature on text boxes
- New DateItem attribute "defaultDateChooserDate", as a way to specify a default to show in the picker, without specifying a default value for the item as a whole
- Support for FormItem.value as an initialization attribute
- New DynamicForm methods "getChangedValues()", "getOldValues()", which allow access to values preserved by "rememberValues()"
- New FormItem methods "getLeft()", "getTop()" "getPageLeft()", "getPageTop()", "getRect()", "getPageRect()", "getVisibleWidth()", "getVisibleHeight()"
- New DateChooser attributes "startYear", "endYear": set upper/lower bounds for allowable year input
- New TextItem attribute "printFullText"; if true, expand the text box to fit content
- New TextAreaItem attribute "expandTextBoxForPrinting"; if true, when printing, fill the available space (width-wise) and expand vertically as required to fit its content
- New SelectItem attribute "textMatchStyle"
- "DynamicForm.getValuesAsCriteria()" and "DynamicForm.getValuesAsAdvancedCriteria()" now accept optional parameter "textMatchStyle", to support returning appropriate advanced criteria for a filter or a fetch
- New FormItem attribute "canFocus"
- DateItem.emptyDisplayValue may now be specified while in text mode
- DateItem.showHintInField may now be specified while in text mode
- SelectItem.multipleAppearance:"picklist" now supports comma separated formatted output (eg icons)
Client-side data binding
- Significant performance optimizations to client-side Advanced Filtering
- New DataSourceField attributes "imageWidth", "imageHeight", "imageSize"
- New DataSource attribute "sparseUpdates"; causes DynamicForm.saveData() to collapse the set of fields we send to the server down to just those that have changed, plus primary keys
- Shared caching: new DataSource attribute "cacheAllData"
Other client features
- Hover components on any Canvas: new attribute Canvas.showHoverComponents and method Canvas.getHoverComponent()
- Menus may be assigned data directly from a Tree: new method "Menu.setData(Tree)"
- User editing of Tab titles: new attributes "TabSet.canEditTabTitles" and "Tab.canEditTitle"
- Support for drag-scrolling of text selection widget when canSelectText is true for some Canvas
- New TabSet attribute "paneMargin"
- New TabSet attribute "prompt", to set the tooltip for individual tabs
- Menu attributes "cascadeAutoDismiss", "autoDismissOnBlur", and method "hideAllMenus()"
- SectionStack: If canCollapse:true, only show the "pointer" cursor
- New Calendar attribute "equalDatesOverlap": controls whether event ranges that share a common border at exactly the same date should be treated as overlapping or not
- MenuButton: Support menu:null; no menu is shown, and the arrow icon is suppressed
- Relative date filtering: enables date filters like “last 5 days” or “next week”
- Enhanced printing: more control over printed output (eg, number of rows to print in grids); more styling options
- Tree selection: cascades up/down, with visual indicator for partial selection
- Portal layout components: the drag and drop, multiple column portal-style layout manager previously shown as a sample is now an officially supported component
- Toolstrip: a comprehensive skinning overhaul, including toolstrip/toolbar-specific button and menu styling
- New Canvas attributes "loadingImgSrc" and "loadingImgSize", to customize the dialog box
various widge
New server/premium features (Requires Pro, Power, or Enterprise editions unless otherwise noted)
- Declarative Security: protect operations by role by simply declaring requiresRole=”manager” on
an operationBinding. Codeless integration with J2EE security and JAAS – if your security
solution is causing httpServletRequest.isUserInRole() to return appropriate values, it just
works. If instead you need to provide roles dynamically, you can do so with a single API call
(RPCManager.setUserRoles())
- Declarative output restriction: declare which fields should be returned by the server on a
per-operation or per-request basis (dsRequest.outputs / operationBinding.outputs). Use this to
cut down on network traffic for combo boxes and other scenarios where only a few fields are
needed from a record with dozens of fields. Or, combine it with Declarative Security to enforce
data visibility rules.
- New server-side validators: “isUnique” makes it trivial to enforce common cases like having a
unique user name. “hasRelatedRecords” can enforce that inter-record references are valid.
- Validate On Exit: declare that validation for a particular field should be run when focus
leaves the field. This includes automatic trips to the server to run any server-only validators
you’ve defined. Combined with the new isUnique validator, this makes on-the-fly unique username
checks entirely declarative.
- Server-side declarative custom validators: write a Velocity expression right in your .ds.xml
file, or declare a Java class to call (like DMI)
- Grid totals / summaries: whole grid and group level summaries. Several built-in functions
(sums, averages, etc) and the ability to add your own.
- Automatic Transactions (SQL/Hibernate): batches of updates, such as a multi-row drag or mass
editing of grid rows, are now automatically grouped into a transaction when using either the
SQL or Hibernate connectors with Power edition or better.
- Deeper SQL customization: customize the SQL used for select, insert and update for an
individual field while retaining full support for automatic query generation, efficient data
paging, multi-level sort and all other features of the SQLDataSource.
- JPA DataSource
- Annotation-based configuration in Hibernate
- REST Connector
- Client-driven export: an alternative mode for exporting, this export preserves all client-side
formatting. LGPL users note: upgrading to Pro gets you this export mode without having to
rework any of your databinding code.
- Direct editing in Visual Builder
- WSDL enhancements: automatic loading of imported XML Schema and WSDL files, and support for
services with portType vs binding elements in different files
- New WSDL Wizard: Visual Builder features a new WSDL wizard suitable for much less technical people.
- Added support for multi-column sorting to SQLServerDriver
- Server-side DSRequest methods getTextMatchStyle(), setTextMatchStyle()
- Server-side dynamic DataSources: Register a DynamicDSGenerator to have the framework call your code first whenever it needs to instantiate a DataSource
- Improved support for Oracle 11gR2 (11.2.x series) JDBC drivers
- Using simple class name in query (according to JPA spcification). Fully-qualified class names may be specified, to avoid namespace collisions, by setting "jpa.useQualifiedClassName:true" in server config
- Introduced a new sqlStorageStrategy "singleChar"; and supporting DataSourceField properties "sqlTrueValue" and "sqlFalseValue", so users can persist whatever characters they like rather than being limited to presets of T/F, Y/N or 1/0
- New Velocity context variable "$dsRequst"
- Added DataSourceField properties customUpdateExpression and customInsertExpression
- Official support for DB2 on IBM i5 (aka IBM iSeries, aka IBM AS/400)
- Extended DataSourceField.sqlStorageStrategy to provide transparent mapping for dates/datetimes to and from underlying numeric or plain text columns, with flexible formatting
- Changed DataSource "sqlColumnType" attribute to "sqlStorageStrategy"
Fixes
- Fix for Month/Year Chooser windows dissappearing into the modal mask when shows from a DateChooser in MiniDateRangeItem's modal DateRangeDialog
- Handle strings starting with "-" correctly in Time.setDefaultDisplayTimezone()
- Grid inline editing of a field with a server-side validator would result in both a "validate" and "update" request sent to the server even though the "update" would perform validation.
- Fixed issue if DetailViewer was given just a singular object as data
- Fixed bug where dates already in UTC would be applied a UTC offset
- fixed IE only display issue of window headers having a "chopped" effect in Enterprise and Enterprise Blue themes
- Various fixes related to the display of cell components in a ListGrid
- Setting an editorType in a ListGridField's editorProperties was leading to a JS crash
- Fixed error when FormItem.focusInItem gets called on a form with no items
- If sectionStack.expandSection() is called, not showing the header unless section.showHeader is actually true
- Calendar fix for issue where two overlapping events less than half an hour in length would be incorrectly rendered
- Fix wrapping of multiple Form Item icons in strict mode
- Reworked the DateItem.inputFormatMask - fixed a bug where it'd fail to replace all separators
- Fix for a bug where calling Menu.addItem() any dynamic attributes would basically fail to run the dynamic logic for those new items
- Fixed getSummaryRowCriteria() returning criteria for the entire dataSet rather than the filtered dataSet when the data is grouped
- AdvancedCriteria related performance improvement in IE
- RTL related fix for CanvasItem positioning in IE
- Fixed issue where Calendar.scrollToToday scrolls too far
- Fixed a bug with ForItem.value was not being respected for form items with a specified fieldName
- Set RPCManager on the DSRequest we create for cache sync if the default fetch operationBinding is not the implicit one. This will ensure it runs in the same transaction as the associated update, if appropriate
- Added support for handling large number of rows in IE 8 non-strict mode
- Fixed a bug in dateItem whereby if showing a text field, if a user partially entered a value and a redraw occurred without the date item text field first blurring, the partially entered value would just get dropped
- Fixed warnings caused when dropping records between grids bound to DataSources with different PK-fields
- Fixed error when saving a Formula or Summary to a grid with no DataSource
- Fixed incorrect state for FilterBuilder remove button (wasn't updating the containing clausers removeButton when a new subClause was added)
- Fixed a bug where if you had a valueMap that was just an Array, if one of the values happened to match the name of a method on Array (eg "set") it would display the function from Array as the value
- Disable alternateRecordStyles on Menu's by default. Fixes a bug with some fields in the menu showing up unstyled in the Enterprise skin
- Fixed a bug where getHeaderButtonTitle could fail if there were multiple sort fields
- Fixed issue where ListGrid sortField / sortDirection was not reliable under certain conditions
- If FormItem.setValue() is called with the current value of an item, and there's an optionDataSource (and alwaysFetchMissingValues is true, or similar) - don't kick off another fetch to retrieve the selectedRecord from the optionDataSource.
- Fixed issue with color picker state for color picker shared between RichTextEditor and ColorItem.
- Fixed a bug where for ComboBoxItems the getSelectedRecord() method was hanging onto a selected record even after the user changed the value of the item by picking a new record
- Don't attempt to use edit-values from the displayfield of a record if the displayField is specified but matches field.name. This was leading to an infinite recursion crash in setEditValue()
- If SelectItem.fetchMissingValues is true, do a fetch if there's a formatValue or formatEditorValue override as well as if there's an explicit displayField name. This is required since formatValue may look at this.getSelectedRecord()
- Fixed DataSource CSV loading only working with DOS format CSV files. Also stripping quotes from CSV values if present
- Fixed TreeGrid.invalidateCache to handle loadDataOnDemand:false trees
- Fix for FormItem delete-key operation in a mask
- Calendar : Handle the user selecting 0 hours (midnight) for the end date and ensuring the date doesn't end up incremented by more than one day
- Fixed a DateItem bug whereby everyone in the eastern hemisphere would get off-by-one errors in dateTime items when picking dates from the chooser
- Fix a ListGrid issue whereby Enum fields would basically get blanked out in the filter editor if a date-range field was also present
- Print support for a ListGrid with more than one frozen fields
- Improved Calendar events overlapping logic
- Fixed gridSummaries for databound TreeGrids
- Fix for bug whereby entering dates into a DateTime item when the date crossed the Daylight Savings Time boundary would lead to the hours getting changed on blur
- Fixed issue where fetchData() on an undrawn LG would fetch twice when it had sorting specified via sortField or initialSort and no fields array specified
- Fixed TreeGrid.setViewState not re-selecting nodes
- Fixed TreeGrid.setSelectionType("multiple") selection behavior when selectionAppearance is "checkbox"
- Handle case where ListGrid.invalidateCache() is called before the ListGrid is drawn
- Fixed an issue where filtering a databound grid would fail to auto-fit to the newly arrived data reliably
- Fix for a bug in DynamicForm where double click wouldn't ever fire on a form (even if the double click occurred off any items)
- Fix IE specific "blinking" of ComboBoxes on initial select
- Fixed issue where tabbing into a DateItem in useTextField:true mode caused the value to be saved as null instead of left to default value
- Fixed Calendar issue where events that start and end in the hour starting at 12am caused an error
- For a cascadeSelection, loadOnDemand TreeGrid, push a full selection from parent down to the children upon load
- Fixed TileLayout issue where dragAppearance:"target" was breaking drag and drop
- Fixed TileGrid printing to work properly for orientation:vertical
Server Fixes
- Fixed situation where editing a row with a server-side validator causes a server validation request AND the row save. When a save is pending, the server-side validation step should be skipped - the server performs this validation anyway before saving
- DataSourceField.sqlStorageStrategy was not being correctly applied for boolean fields in criteria
- Fix to make date and datetime comparisons in AdvancedCriteria mirror the behavior for simple criteria
- Fix for SQLDriver types where the SQL limit query implementation requires an ORDER BY the column name was not quoted in the ORDER BY clause if quoteColumnNames was set
- Fixed issue where having an RPC queue containing a mixture of normal and clientOnly requests was failing due to the data returned from the server having fewer results in the response than requests in the transaction queue on the client side
- If schemaBean results in a field of "unknownType", dropExtraFields should avoid serializing values from that field unless the field has been explicitly re-declared in <fields>
Changes in 7.1
Features
- added major new overview docs for 7.0 features
- new examples for Upload, BatchUpload, and Conditionally Editable [grid fields]
- support for asynchronous handling of databound drags
- listGridField.optionDataSource now handles automatic cache sync
- support for parsing of timezone offsets in XML/JSON wire format for dates and datetimes
- official support for "datetime" field type and support for a switchable display timezone
for "time" and "datetime" fields
- added field type "imageFile" and DataBoundComponent behaviors for this field type
- added "Java Bean" DataSource wizard for generating a DataSource .ds.xml file from a Java
Bean where persistence logic if any is assumed to be added later
- allow a callback to tree.openFolder() for databound Trees
- convenience method ResultSet/DataBoundComponent.findByKey()
- expand next visible section in a "mutex" SectionStack if an already open section header is clicked
on
- added FlowLayout trivial subclass of TileLayout
- Server Log tab in Developer Console now supports dynamically changing server log thresholds
- added ability to suppress "select all" checkbox with selectionAppearance:"checkbox"
- added ability to set fixed criteria and other request properties for the requests caused by
listGridField.optionDataSource
- TileGrids now automatically relayout if a tile resizes
- made history tokens more readable by not escaping chars that don't need to be escaped
- added support for configuring the Calendar's EventWindow as an AutoChild
- added support for grouping for formula and summary fields
Fixes
- fixed dragging all records out of a TileGrid putting TileGrid in bad state
- fixed inability to filter for boolean false in FilterBuilder if field was declared as
boolean type
- SQL DataSource wizard no longer adds redundant (implied) validators to generated DataSource
- search criteria changes are now preserved when grouping / ungrouping in grids
- fixed wrong colNum reported for contextClick events in grids with frozen columns
- fixed case where drag reorder was removing the dragged record
- fixed bug where contents in tiles would not be centered in IE
- fixed JS error if fetchData() was called on an undrawn grid with sortFieldNum set
- fixed JS error if you have a FilterEditor and call setFields() with all fields not filterable
- fixed extra checkbox icons with selectionAppearance:"checkbox" and a tree with
expand/collapse animations
- fixed loss of current expand/collapse state in an editable grouped listGrid if editing
caused a record to move to a different group
- fixed creating an initially disabled ListGrid not disabling the FilterEditor unless
setDisabled() was called
- workaround for Firefox bug causing crash on very very large XML responses
- workaround for Firefox bug causing misrendering of image-based edges on some Linux distros
- fixed formatCellValue on CubeGrid not passing in the record
- fixed direct editing of color picker RGB values causing other fields to show NaN
- fixed emptyDisplayValue not working on a SelectItem with an optionDataSource
- fixes for visual glitches in IE8 strict mode
- fixed autoFitData:"vertical" not workign with frozen fields
- fixed context menu on ListGrid corner button sometimes sticking offscreen
- fixed export not working in a grid with selectionAppearance:"checkbox"
- fixed events in week view of Calendar sometimes showing on wrong day
- fixed firstDayOfWeek not being respected for display of weekends in DateChooser
- fixed firstDayOfWeek only being respected by some views of the Calendar
- fixed printing of RadioGroups not showing selection properly
- fixed tree cache sync issue when nodes had a parentId of 0
- fixed canFilter:false not correctly honored by FilterBuilder
- fixed very slow destroy() for ListGrids with optionDataSource set in Firefox due to native
Firefox bugs with Array.toString()
- workaround for Firefox 3 regression breaking accessKey support
- fixed warped crosshair image in ColorPicker in IE
- fixed RadioGroupItems not refreshing on setValueMap()
- fixed JS error possible on server timeout when not using SmartClient Server
- fixed cases where FilterBuilder would inappropriately retain filter values across field
name changes (and made the behavior of retain values optional)
Changes in 7.0
New Major Subsystems
- Enterprise, SilverWave and BlackOps skins, three more professionally designed, free (LGPL) skins
- Calendar component: complete drag and drop, databound event editing similar to Google Calendar
- TileLayout & TileGrid components: display records as a series of tiles, with databinding,
load on demand, filter and sort, and drag and drop capability
- Advanced Filtering: client- and server-side support for field-operator-value filtering of
data, including arbitrarily nested queries
- Filter Builder: specialized form for end user construction of advanced filters of arbitrary
complexity
- SQL Templating: customize the SQL generated by SmartClient's SQL connector right in the
DataSource file. Clause by clause overrides make it easy to add simple and complex joins,
grouping and aggregation while retaining full search features and database independence
- Transaction Chaining: a transaction where some operations depend on the
results of other operations can be declared with simple XML in your DataSource
- DataSource Wizards: generate fully functional DataSources from existing Hibernate entities
or SQL tables with a simple point and click wizard in Visual Builder
- Batch DataSource Generator: connect SmartClient to your entire object model in one step by
generated DataSources from SQL tables, Java Beans or other metadata with a customizable process.
- CSV / Excel Export: just call grid.exportData() to export the current contents of the grid
to Excel via CSV, including current sort, filter criteria, column order and column visibility
- Batch Uploader: provides an interface to upload a CSV, validate it and allow the user to
make corrections before committing, all without coding.
New client features
- ColumnTree component: ITunes™-like tree navigation (one column per level)
relations declared in DataSources and automatically "do the right thing" for a databound drag
- Printing: comprehensive and customizable support for rendering printable views of
SmartClient applications
- Formula and Summary fields: built-in wizards for end users to define formula fields that
can compute values using other fields, or summary fields that can combine other fields with
intervening / surrounding text. Available in all DataBoundComponents, easy to persist as
preferences
- ColorPicker component: a full-spectrum color selection component similar to those found in
graphics packages and other desktop software
- HeaderSpans: second level headers in grids, for grouping related columns
- Grid row rollover effects and controls: general purpose ability to attach SmartClient
components to rows, allowing rounded selection, controls that appear on rollover, and more
- Grid header rollover: drop-down menus appear on rollover, offering column show/hide,
freezing and grouping options that previously required right click to discover
- Data autofitting: horizontal and vertical autofitting to data for ListGrids
- AutoFitTextAreaItem: autofits to contained text as the user types
- DataSource: new dataProtocol:"clientCustom" for in-browser storage and third party transports like GWT-RPC
- Datasource: dsRequest.componentId for identifying source of requests
- SelectItem: new selectItem.selectOtherValue and selectItem.separatorValue
- i18n for messages related to ListGrid groupBy and freezen pane features
- Class: log methods available as both instance and class methods
- ListGrid: listEndAction and related properties available in Visual Builder (allows new record creation)
- ListGrid: support for selection represented as a special checkbox column (selectionAppearance:"checkbox")
- Tree/ResultTree: new property "discardParentlessNodes" allows simplified one-shot tree loading
* DataSourceField: new attributes "javaClass", "javaCollectionClass", "javaKeyClass" for populating JavaBeans/POJOs
- ListGrid: new convenience method "toggleFrozen()"
- DataSource: new attribute "autoDeriveTitles" for simple user-visible titles auto-derived from typical field name identifer conventions (camel caps, underscore separator)
- FormItem: New properties "prompt", "iconPrompt"
- loadDS tag can now accept a comma-separated list of dataSource names
- DataBoundComponent: Added cell hilite system (from CubeGrid) for styling cell data without code.
- DataBoundComponent: support for databound dragging operations across all dataBoundComponent types
- DataSource: new methods for type:binary field data: downloadFile(), viewFile()
- DataSource: New attribute sendExtraFields for outbound data: if true, include fields that are not specified in .fields
- DataSource: New field types "datetime" and "time"
- DataSource: New property preventHTTPCaching
- ListGrid: groupBy uses displayField if set instead of the field itself, if no optionDataSource is set
- ListGrid: new helper methods invalidateCache(), willFetchData() - calls appropriate methods on .data.
- ListGrid: new notification method dataArrived() passed through from ResultSet
- DetailViewer: new methods DetailViewer.formatCellValue and DetailViewerField.formatCellValue
- CubeGrid: New optional method facet.getValueTitle() for facet titles autogenerated from data
- CubeGrid: New properties for better control over context menus
- RadioGroupItem: can now disable at item via new method setValueDisabled()
- Flashlet: new method setSrc()
- Dialog: new property messageStyle for skinning
- DateChooser: new override points todayClick(), cancelClick()
- DateItem: inputFormat no longer must be initialized if displayFormat is initialized to any of the standard short formatters
- CheckBoxItem: new properties for 3-state checkboxes (unset, true, false): new property "allowEmptyValue", new property "showUnsetImage"
- CheckBoxItem: new properties "showTitle", "labelAsTitle" for better control of title/label
- Canvas: new method setEdgeOpacity() for translucent edges
- Canvas: new string method resized()
- Canvas: new method markForDestroy() recommended as safer destroy() technique
- ListGridField/LinkItem: New target "javascript" for type:link - allows for link interception in relevant click method
- Selection: new i18n property selectionRangeNotLoadedMessage
- ListGrid/TileGrid: New property autoFetchAsFilter to allow autoFetchData to do a filter (search) rather than strict match (fetch)
- OperationBinding new property invalidateCache (this operation will always invalidate local cache if true)
- ResultTree: new property defaultNewNodesToRoot
- DataSourceField: new property childTagName (controls the XML tag used for each subelement during xmlSerialize(), if multiple:true)
New server features
- PostgresDriver: Implemented SQL data paging
- XML: new utility method recordToXML()
- Config: new static method getProperty() to access server.properties
- DSResponse: New convenience methods getRecord(), getRecords(), getFieldValue()
- Visual Builder: SQL and Hibernate browser
- HibernateDataSource: new transaction management methods
- Server-side support of textMatchStyle:"startsWith" - SQL and Hibernate dataSources
- Support SQL access by connecting through Hibernate configuration files
- Workaround for MySQL 5.x bug with long fields and specified default values
- Client Bugfixes
- RPCManager: Convert error window text to HTML format to preserve line breaks in multiline errors
- Window.js: Correct operation of returnValue() when new dialogs are launched from the callbacks
of other dialogs
- WSDataSource: populate .sortBy in returned data, in case a partial dataset is returned
- PickList: Fix for incorrect rendering of otherTitle
- GridRenderer: Fix for unnecessary scrollbars in scrolling menus with 1 row of content
- PickList: Fix for databound PickList causing spurious item selection when PickList is re-shown
- ListGrid: Several grouping issues fixed relating to record update/filter
- CubeGrid: Use DataSource fields as defaults for facets if databound
- CubeGrid: Fix for "stacked" checkbox in chart window showing wrong state
- Canvas: don't crash if border is incorrectly specified as numeric
- Canvas: Fix for calling setPadding()/setMargin() after create() but before draw()
- DataSource: allow defaultParams for protocol:"postMessage"
- FormItem: flags to control display of errors and allow custom display of errors
- ListGrid: fixed issue with ListGridField.optionDataSource causing queues to be immediately sent
- ListGrid: fixed edge case where manually set validation errors could be associated with wrong rows when inline editing
- ListGrid: fixed display issue with frozen fields and grouping when opening/closing folders
- ListGrid: Fixed setFieldProperties() not supporting some properties
- ListGrid: stopped spurious occurrence of "getCellRecord called with bad rowNum"
- ListGrid: Fix for startEditingNew with no existing dataset
- DataBoundComponent: support addData() for components with no DataSource
- Button: setIcon(null) now clears the icon correctly
- XML Serialization: escape XML special characters in property names in nested structures
- SectionStack: removeSection() now accepts section IDs
- SectionStack: programmatic expandSection() with visibilityType:"mutex" was not collapsing previously opened section
- TabSet: when tab is deleted, select the closest tab instead of the first
- Scrollbar: Respect showRollOver or showDown when applied to the scrollbar thumb
- Reference Explorer: searches now generated history entries for easier navigation
- HTMLFlow: Fixed bugs where certain <script> tags were not recognized correctly
- Visual Builder: Fixed deployment to non-root webserver locations
- DateItem: Fix when entering invalid values while enforceDate:true
- DateItem: Fix tabbing to date fields when editing ListGrids by cell
- Canvas: Improved rendering compatibility with future versions of Firefox (post-3.0)
- Canvas: Fix for htmlElement-embedded widgets that are both relpos and hidden
- DataSource: added SQL data paging support for SQL Server 9+
- JSONEncoder class for JSON serialization / deserialization
- RPCManager: switched fallback encoding for params to be strict JSON instead of just valid JavaScript
- RestDataSource: with dataFormat:"json" and dataProtocol:"postMessage", serialize to JSON
- RPCManager: added handleTransportError() API to make resending 503 and similar error codes simpler
- History: fixed an issue where History module would form a bad URL to empty.html in IE under HTTPS if
window.isomorphicDir is an absolute URL
- Slider: support rounding to a specified precision when dragging over continuous range
- FileItem: fixed various cross-domain issues with FileItem if document.domain is set
- FileItem: allow FileItem to be clear()d
- ListGrid: fixed bug where recent FF would not render rows past 900,000 because Firefox changed
maximum legal image size
- Dialog: added "Done" as a standard button, with doneClick() handler
- DynamicForm/FormItem: if user input is invalidated, do not reset the input to the last good value; leave the bad value in place unless rejectInvalidValues is set.
- DynamicForm/ValuesManager: Fix for useLocalValidators:false when databound
- SearchForm: generate appropriate criteria for a ComboBox with optionDataSource in a SearchForm
Server Bugfixes
- HttpProxy: fix for sending long parameters when httpMethod=="POST"
- HttpProxy: Provide clear error status codes for server unresolvable or connection refused errors
- RPCRequest: Correctly encode the content-disposition filename when downloading so spaces work
Changes in 6.5.1
- ResultSet: fixed dataArrived() not correctly receiving startRow/endRow
- ResultSet: fixed problem that prevented manual ResultSet instantiation
- ResultSet: fixed bug with neverDropUpdatedRows setting incorrectly integrating
new/updated records into local cache even if they don't match the current criteria. This
fixes the issue reported
on this thread in the
support forums
- ResultSet: correctly incorporate updated record into cache when the server changes the
primaryKey of the record
- Re-Login: fixed JS error in obscure case where an iframe is used as a relogin window that
ultimately targets loginSuccess.html
- Window: Fixed bug where an autoSize:true Window would abandon autoSize mode as soon
as a drag resize interaction happened anywhere on any child. Now only applies
if the Window itself is drag resized
- Canvas: fixed issue whereby components could get into a focused state when disabled
- ListGrid: fixed filterByCell not working on the filterEditor
- ListGrid: grouping media now uses TreeGrid opener (expand/collapse) media instead of folder media by default
- ListGrid: fixed bug where drag and drop onto a grouped grid would not fire dataChanged()
- ListGrid: fixed bug that allowed grouped nodes to be dragged out of ListGrid
- ListGrid: fixed missing disabled ListGrid header image in TreeFrog skin
- ListGrid: fixed JS error if setValueMap() is called ona hidden field while the inline
editor is showing.
- ListGrid: fixed bug with inline editing that ensures rowNums don't get mismatched on
successful save of multiple rows (reported
on this thread of the
support forums)
- ListGrid: when groupBy is used with frozen columns, the group name no longer appears twice
(once in the frozen pane, once in the rest of the grid)
- ListGrid/ResultSet: fixed issue with newly added records not being grouped correctly when
grid is in groupBy mode
- ListGrid/DateItem: fixed two issues related to DateItems in grids reported
here
- ListGrid: improved handling of ListGrids that have frozen columns + incremental rendering
+ inline editor showing.
- ListGrid: providing missing ListGrid schema attributes "canFreezeFields", "canGroupBy" -
affects XML->JS translation datatypes and availability of these properties in the
VisualBuilder.
- ListGrid: fixed bug with inline edit mode where boolean fields would sometimes not respond
to mouse clicks correctly when another edit field had focus (TreeFrog skin only)
- ListGridField: fixed field.cellAlign not taking precedence over field.align
- DataSource: added new API resultBatchSize that enables auto-chunking of large datasets
returned by the server to avoid the 'script running too slowly' dialog
- TabSet: fixed tabs being erroneously selected on context click
- FusionChart (Charting): fixed bug where user defined colors weren't being used for single series charts
- DataSource: don't JS error if server returns null/error data as a json transport response.
- HTMLFlow: when parsing out embedded script blocks, correctly handle type='text/javascript'
- TreeFrog: made it easier to drag resize components with shadows by allowing shadows to be
used as control points for the drag start interaction
- EventHandler: fixed a bug affecting Firefox 3 final that resulted in mouse coordinates being
incorrect when the page was scrolled
- EventHadler: fixed a bug affecting Firefox 2 where drag and drop interactions could
receive incorrect coordinates
- EventHandler: new API getDragRect() - returns page-relative coordinates of whwatever
element is being dragged
- Time: Time.UTCHoursOffset now applied to stored value rather than having stored value be
offset by this amount. This fixes a problem with potential negative time offsets in some
rare cases.
- Improved Opera compatibility.
- Canvas: fixed the no-drop indicator failing to show up in some cases.
- DynamicForm: improved documentation around showErrorText/showErrorIcons/errorOrientation
- This release rolls up all addendums from prior versions, recorded here.
Changes in 6.5
- HibernateDataSource: support ORs for multiple values on a single field (CubeGrid data fetching)
- HibernateDataSource: don't rebuild Configuration or SessionFactory unless necessary
- HibernateDataSource: explicitly close database connections
- HibernateDataSource: better exception handling and reporting
- CubeGrid (Analytics): support for inline editing with both UI and programmatic access
- CubeGrid (Analytics): significant performance improvements for large dataset rendering,
smoother scrolling.
- CubeGrid (Analytics): support for yet larger client-side datasets (smarter indexing)
- CubeGrid: correctly reset selection on setData()
- ListGrid: default dragTrackerMode changed to the more visually appealing setting of "title".
- ListGrid: added 'quickDrawAheadRatio' which allows specifying a different drawAheadRatio
when the viewport is being rapidly changed by the user (e.g. drag scrolling)
- ListGrid: significant performance improvements for large dataset rendering, smoother scrolling.
- ListGrid: added unsort() API.
- ListGrid: inline editing now correctly respects addOperation and updateOperation settings
on the grid.
- ListGrid: new 'groupBy' feature allows grouping/ungrouping of rows by a particular column,
aggregating rows by like values. Search for 'groupBy' in reference docs for relevant APIs and
see the examples in the Feature Explorer under Grids->Grouping.
- ListGrid: fixed row numbering bug with inline edits triggered when multiple edit rows were
shown beyond the end of the grid's data.
- ListGrid: header context menu titles can now be more directly internationalized.
- ListGrid: new APIs getCellValign(), getCellAlign() to enable programmatic control of cell alignment.
- ListGrid/ListGridField: cellChanged() now receives a reference to the grid as last argument.
- ListGrid: new API: headerMenuButton autoChild - When the user rolls over the header buttons
in this grid the headerMenuButton will be shown over the header button in question. When
clicked this button will display the standard header context menu. This headerMenuButton API
is used to show the header menu button in all skins by default.
- ListGrid: new API: getHeaderContextMenuItems() - hook that allows specification of custom
ListGrid header context menu items.
- ListGrid: new API: stopHover() - fired to clear Hovers that can be set programmatically.
- ListGrid: performance/look and feel: when ListGrid.leaveScrollbarGap is set, the grid now
attempts to predict if hscroll will be introduced or not, removing the flashing hscrollbar.
- ListGrid, TreeGrid: frozen column support, compatible with inline editing. Search
for 'frozen' and 'freeze' in the reference docs for a list of new APIs and see the examples in
the Feature Explorer under Grids->Frozen Columns.
- TreeGrid: added setNodeIcon() API.
- TreeGrid: new API getDropFolder(). When the user is dragging a droppable element over this
grid, this method returns the folder which would contain the item if dropped. This is the
current drop node if the user is hovering over a folder, or the node's parent if the user is
hovering over a leaf.
- SectionStack: new APIs: addItem()/removeItem() allows adding and removing items directly
from sections.
- SectionStack: new APIs: itemIdent/itemStartIndent/itemEndIndent - enables easy indentation
of items in a section.
- Menu: implemented 'submenuDirection' that controls switching media and location of the
submenu icon.
- Menu: fixed keyboard navigation of submenus for submenues that opened to the left (will now
correctly expand on left arrow).
- Menu: added autoDismiss property that allows the menu to stay up through several clicks on
it. Used by the ListGrid header context menu to allow showing/hiding of multiple columns
without having to re-open the context menu.
- Layout: fixed layoutMargin not being incorporated in dropLine position calculation in some
case resulting in a slightly-off drop indicator
- Layout: new APIs showMember()/hideMember() that hook default animation for Layout.
- Layout: new API: leaveScrollbarGap. This setting avoids the layout
resizing all members when the vertical scrollbar is introduced or removed, which can avoid
unnecessary screen shifting and improve performance. Default is false.
- Layout: new API: memberOverlap enables overlapping of members.
- Layout: new API: stackZIndex: controls the relative zIndex of members that overlap.
- Layout: new APIs: getMemberDefaultBreadth()/getMemberOffset() - allows the manipulation of
the calculated breadth/offset for members of the layout. These are advanced APIs generally
intended for use by component developers.
- Fixed a rare case of drag and drop not correctly resolving the drop target when multiple
dropTargets are stacked on top of one another with custom handlers
- ValuesManager: now supports 'disableValidation'.
- JSTranslater (server API): fix to correctly escape IE reserved words 'export' and 'debugger'.
- DataSource: sped up client-side filtering logic.
- DataSource: clientOnly DataSources now support a one-time fetch against their dataURL, if
one is defined. Results are integrated into the client-side cache and that cache is used from
that point forward.
- DataSource: in clientOnly mode, the DataSource will not auto-generate sequence values for
- DataSource: more lenient type conversion for startRow/endRow/totalRows after
transformResponse().
- RPC DMI, DataSource DMI (Java Server): fixed re-throw of exceptions generated inside reflection call to
application code - now handles subclasses of Error correctly.
- DataBound Components: local field specification now correctly overrides DataSource-derived
field type.
- Initial offline mode support: various pieces of the system either work against cached data
or queue deltas for later submission to server on reconnect
- Beta support for Adobe AIR runtime.
- Validators: new vlidators: notADate, notADecimal.
- New Taglib: <isomorphic:jsString> makes it easy to pull arbitrary content from a JSP
or external file into a correctly escaped JavaScript string, making it easy to embed in
SmartClient components.
- RichTextEditor component now part of LGPL package.
- ResultSet: new API willFetchData() allows you to check if your proposed filter criteria
will result in a fetch to the server.
- ResultSet: refetch from server on change to textMatchStyle (percolates from higher-level APIs)
- ResultSet: application of more restrictive criteria always results in client-side filtering
(unless it's disabled completely)
- Messaging (Server push): unsubscribe from JMS on unregister
- TabSet: improvied layout of 'controls' that can be placed in empty space past the tabs.
Previously one had to explicitly size these to align with the TabSet edge in some circumstances.
- ResultSet: some configurations could result in multiple overlapping fetches to the server
to fill the cache - fixed.
- Toolbar: optimized component init time for cases where members were added post creation,
but before draw.
- TabSet: new API tabIconClick() - fired when the icon on the tab is clicked on.
- TabSet: new API closeCLick() - fired when the close icon on the tab is clicked on.
- TabSet: new API: getTabPane() - returns the pane for a given tab.
- TabSet: new API: showPaneContainerEdges - controls whether the paneContainer shows edges.
- TabSet: new API: getPaneContainerEdges() - allows specification of custom edges for the paneContainer.
- TabSet: new API: symmetricEdges - controls whether or not the same edge media will be used
regardless of tab bar position.
- TabSet: new API: leftEdgeSizes/topEdgeSizes/bottomEdgeSizes/rightEdgeSizes - allows
customization of edges sizes for assymmetric eges.
- TabSet: new API: showPartialEdges - allows custom specification of which edges are shown.
- TabSet: deprecated APIs: pickerButtonHSrc, pickerButtonVSrc, scrollerHSrc and scrollerVSrc
- all still supported for backward compatibility, but replace with: pickerButtonTopSrc,
pickerButtonBottomSrc, scrollerTopSrc, scrollberBottomSrc.
- TabSet: scrollers now correctly introduced if tab width overflows due to content change.
- TabSet: disabled tabs no loger selectable from the tab scroller dropdown.
-
- SimpleType: normalDisplayFormatter(), shortDisplayFormatter() APIs now make the entire
record available as the fourth argument
- Improved Date validation to reject some invalid day values and prevent runaway CPU usage in
IE6 for some very large values.
- Fixed memory leak that could occur with manually created ResultSet and ResultTree objects.
- ValuesManager: fixed memory leak related to this component.
- DynamicForm: fixed clearFieldErrors() incorrectly forcing redraw.
the field defined as the primaryKey even if its type is not set to 'sequence'.
- DynamicForm: automatically caches and reuses PickLists when safe
- DynamicForm: new APIs to help with reporting validation errors in alternate formats:
getItemErrorHTML(), showInlineErrors, showErrorText, showErrorIcons, showErrors() errorOrientation,
FormItem.getErrorHTML(), FormItem.showErrorStyle, FormItem.errorOrientation.
- DynamicForm: now supports initialCriteria, and autoFetchData.
- DynamicForm: added file upload support. See the 'Uploading Files' overview topic in the
reference docs (search for 'upload') to get an overview of the available options.
- SpinnerItem: Fixed clicks on spinner buttons stealing keyboard focus from the field in
Firefox.
- DateChooser: baseNavButtonStyle - enables styling of navigation buttons and date display at
the top of the component.
- Server-side DSRequest object now returns values if getCriteria() is called for an 'add'
operation, as a convenience.
- New skin: TreeFrog
- Scrollbar: media used by this component now configurable via the standard StretchImg APIs.
- ViewLoader: handleError() now called on eval() and XML->JS translation failure, not just
failure to get components from the specified URL.
- Client serialization engine now correctly escapes \r to handle round-tripping to the
server. This is generally irrelevant, but technically more correct.
- Window: new APIs: defaultMinimizeHeight, minimizeHeight control the resulting height of a
minimized Window.
- Window: new APIs: modalMask, showModalMask, modalMaskStyle, modalMaskOpacity - allows
styling of the modal mask that is shown for a modal Window. This can help focus the user on the
modal window by showing the rest of the screen as greyed out or some other effect.
- Calendar: new UI component - search the reference docs and see examples int he Feature Explorer.
- History: fixed 'show non-secure elements on this page' dialog in IE6 when used with History
module under SSL.
- SelectItem/ComboBoxItem: new API: defaultToFirstOption - Select the first option as the
default value for this item.
- Canvas: new API: snapTo and related methods - allows configuration that forces children to
'snap to' various edges/corners of the Canvas.
- Canvas: new APIs: precentBox, percentSource - allows slaving the sizing of the canvas to
another Canvas.
- StatefulCanvas: new API: overCanvas autoChild - Auto generated child widget to be shown
when the user rolls over this canvas
- StatefulCanvas: deprecated API: showFocus, replaced by showFocused.
- StatefulCanvas: new API: showFocusedAsOver - if true, enables the use of over state when
focused when showFocused is true. This is the default. This API is used in the new TreeFrog
skin to show alternate focused icons on various UI components (e.g. Buttons, FormItems).
- DateChooser: new APIs: alternateWeekStyles, alternateStyleSuffix - enables alternating
styles for the weeks.
- FormItem/StaticTextItem: new API: clipValue - allows control over clipping of the item if
it exceeds the fields width.
- FormItem: new API: stopHover() - fired to clear any Hovers that can be programmatically
set.
- XML serailizer (Java server): when serializing attributes, back off to using the
getNodeName() API when getLocalName() returns null (e.g. Elements constructed via DOM level 1
APIs).
- FileAssembly Servlet (Network Performance): Now accepts HTTP POST (very rare scenario, but
now available).
- FileDownload Servlet (Java Server): new API: stripPathComponents: Instructs this servlet
to remove the specified number of paths components from the URI before looking for the file on
disk. This is useful if you're injecting a version string into your URI that isn't actually
part of the path and you can't stript this off more efficiently at a different layer
(e.g. Apache mod_rewrite).
- HTMLPane/HTMLFlow: improved script block parsing performance
- HTMLPane/HTMLFlow: improved handling of inline script blocks and remote script loading
- HTMLPane/HTMLFLow: automatically skip loading of SmartClient modules, load all scripts via
HTTP GET.
- HTMLPane/HTMLFlow: new API: transformHTML() - provides hook for transformation of retreived
HTML.
- HTMLPane/HTMLFlow: now handle inline absolutely or relatively positioned SmartClient
components.
- Support dismissal of SmartClient components bound to click masks when the user clicks on
SmartClient-managed IFRAMEs in e.g. HTMLPane/HTMLFlow.
- New API: isc.addDefaults() - copies any properties that do not already have a value to the
specified object.
- The embedded Tomcat servlet engine that's part of the SmartClient SDK now supports a
'--maxThreads' option. Likely applicable only to those doing deep prototyping with the SDK.
- Developer Console now automatically backs off to the skin specified on the page it is
launched from, if it can't load the 'SmartClient' skin. This allows for the use of the
DeveloperConsole with deployments that push out only the custom customer skin.
- Beta support for Firefox 3.0 (beta 4)
- List: new API: removeEvery()
- DateItem: fixed issue with namespace mode.
- ResultTree: fixed potential for multiple firing of callbacks for auto-created ResultTrees.
- DateChooser: added new APIs for specifying custom media for date/month icons. Filter down
for 'icon' when looking at DateChooser instance reference doc to see new APIs.
- XMLTools: ~10% performance improvement in toJS().
- ViewLoader: improved performance of repeated calls to same URL.
- HTMLFLow: suppress multiple calls to same URL between page load and draw.
- XML/WSDL: fixed problems of soap envelope not being generated in some cirumstances.
- XML/WSDL: fixed xsi:type being generated in SOAP messages that didn't call for it.
- XML/WSDL: allow complexElement and complexType definitions of the same name.
- XML/WSDL: fixed subelement namespace handling: use referenced element's namespace if it
refers to another element or use parent's namespace if it refers to a type.
- XML/WSDL: improved compatibility with older xslt engines.
- XML/WSDL: improved support for loading a WSDL service from multiple files.
- XML/WSDL: fixed top-level element namespacing when loading an .xsd that would later be
used with a .wsdl.
- Client-side XSLT: fixed client-side XSLT processing breaking with URLs that contain
anchrors in Firefox 2.0.14 (recent Firefox regression).
- Drag and Drop: Improved performance of drag and drop interactions in Firefox.
- Debugging: worked around bug in Firebug that resulted in incorrect stack traces output by SmartClient.
- Beta support for Internet Explorer 8 (beta 1)
- Support for Safari 3.1
- Many documentation improvements.
- This release rolls up all addendums from prior versions, recorded here.
Changes in 6.0
- SmartClient now also available under the LGPLv3!
- HTMLFlow: new evalScriptBlocks feature parses and evaluation include script blocks and
included scripts
- ResultSet: user updates are now automatically integrated into paged datasets
that have partial cache, without requiring new data from the server.
- SmartClient Server: Removed direct dependency on Xerces parser. As a result, if you are
using JDK1.5+, you can omit the xercesImpl.jar and xml-apis.jar from your deployment.
SmartClient will then use the native Java parser/serializer (or whatever is configured in your
environment) to do its work.
- SmartClient Server: Java DMI methods will now be passed the ServletContext and
RequestContext, if they ask for it in the method signature.
- SmartClient Server: Improved Java DMI error reporing.
- Significant improvents in GridRenderer performance in IE7 and lesser improvements in all
other browsers. This improves ListGrid, TreeGrid, and CubeGrid rendering performance.
- Fixed edge case with SectionStackHeader drag-resize in some cases resizing the wrong component.
- A remove operation on a clientOnly DataSource that matches no records now no longer returns
an error.
- DataSources marked
clientOnly: true that do not specify any
testData, but do specify a testFileName or dataURL will automatically fetch once
against the specified URL with no criteria, then work against a local cache from there. This
enables another mode of rapid prototyping.
- Large, pervasive improvements in documentation.
- Various Visual Builder improvements.
- Fixed some edge case glitches with animation.
- New APIs: ListGrid/TreeGrid.transferSelectedRecord(), transferSelectedRecords().
- The optional 'data' parameter to History.addHistoryEntry() is now documented.
- Improved HTMLFlow SCRIPT block parse and execute engine to accept all valid script declarations.
- New API: ListGrid.getEditedCell()
- Improved Plugin Bridges integration with Flash, Applets, custom plugins.
- Fixed issue with Reference Docs bookmarkability in some cases.
- Extensive new topic on SmartClient
Skinning in the Reference Docs.
- Added extensive links from Reference Docs to Feature Explorer examples
- All bug fixes against previous versions posted in the Addendums have been applied to
this build.
Changes in 5.7.1
- Fixed context menu positioning in Safari 3.x Beta for Windows
- Fixed issue with ListGrid.chartData() failing on a databound grid
- Fixed issue with embedded Flash objects burning through elements positioned in front of
them on the page
- Added example showing how to generate a DataSource dynamically from Java Bean (see /examples/server_integration/DataSourceGenerator.java).
- Fixed bug with TreeGrid animateOpen/animateClose of the root node
- Fixed bug with column show/hide on a TreeGrid causing the tree field to shift unexpectedly
(only happens if tree field is not the first field).
- Fixed invalidation of multiple ResultSet caches on same thread causing all but the first
invalidations to fail
- Enhancement: accept a single node in lieu of an array as node.children in Tree
- New API: DataSource.childrenField
- Fixed ListGrid.removeSelectedData() not working as expected on non-databound ListGrids
- Fixed issue with users being able to use Layout resizers to get into a state where the
resizer is off the screen and page scrolling is inroduced.
- Fixed observation breakage with Canvas.scrolled()
- New APIs: ResultSet.getValueMap(), ResultSet.allMatchingRowsCached(), ResultSet.allRowsCached()
- Fixed bug with SmartClient reference not correctly showing the correct entry when linked to
directly.
- Fixed sizing of Canvases created with Canvas.htmlElement on Moz/FF platforms
- Enhancement to Reference Documentation: show attributes and methods inherited from
superclasses up to, but no including Class or Canvas in all components
- Support foreignKey definition pointing to another field in the same DataSource
- Fixed scriptInclude transport interperting wrapping a single argument callback in an
array
- Enhancement: show the fully constructed URL for scriptInclude transport in the RPC tab of the Developer
Console
- Fixed problem with selecting items in a native select box when the values contained
HTML
- Enhancement: can now directly change the DataSource ID of SalesForce DataSources from the Visual
Builder
- New APIs: DataSource.callbackParam, OperationBinding.callbackParam
- New APIs: DataSource.requestProperties, OperationBinding.requestProperties
- Fixed bug with dropOnShortening not working corretly in some cases
- Fixed issue with dynamic binding of TreeGrid to a new DataSource not correctly defaulting
to a single tree field to match behavior of TreeGrid init with no fields
- Fixed bug with XML requests containing valid, but non-ASCII tag and attribute names being
incorrectly encoded for SmartClient server consumption
- Enhancement: derive implicit foreignKey relationship between two datasources by finding
first matching field name in lieu of an explicit foreignKey setting
- Enhancement: ListGrid.fetchData()/filterData() now accepts a DynamicForm as criteria and
automatically calls getValuesAsCriteria() to derive the criteria
- Enhancement: Support trees being initialized with Tree.data for modelType: "children"
- Fixed issues with Window.dismissOnEscape when the window had a parent element
- New Kapow module: enables easy integration with the Kapow Technologies Mashup Server
- Fixed issue with showing menus inside windows breaking the window's modality
- Fixed DynamicForm checkboxes continuing to respond to clicks when disabled
- Fixed DateChooser not defaulting to today's date when shown on an empty date field after
having been moved to a different month and/or year on another field
- Enancement: when RPCManager DEBUG threshold logs are enabled, automatically truncate
log statements longer than 25000 bytes to avoid large data loads from freezing the browser
temporarily. This limit can be removed by enabling another log category as specified in the
message that warns about truncation
- Fixed: missing LayoutSpacer schema.
- Expanded documentation
Changes in 5.7 Final
- Fixed issue with 'align:left' not working correctly if there was no icon in a button and
iconAlign was set to 'right'.
- Visual Builder code panes switched from Canvas to TextArea to make selection for copy and
paste easier.
- Fixed databound comboboxes losing data in certain edge cases.
- Fixed JSTranslater loop detection logic swallowing exceptions in some cases.
- Fixed ListGrid.draw() failing to poupulate the edit form properly if edit values had been
set before draw.
- DynamicForm.setItems() after construction could fail to apply the current form values to
the new items.
- Window now uses a Canvas for body instead of a Layout if the items object provided is raw
HTML.
- Layout: new property 'defaultLayoutAlign' - applies to all Layout members. Previously
to achieve this behavior, every member had to specify a layoutAlign to override the default.
- JSTranslater: when translating Maps, ignore any complex keys as they produce invalid JS.
- Window: supports contentsType 'page' and 'fragment' to allow Window.src to be specified
as either compelte pages or chunks (similar to HTMLPane/HTMLFLow).
- Fixed RadioGroupItem/RadioItem handling of boolean keys in valueMaps.
- Layout: dropLine (shown when reordering or dropping into a Layout) is now
user-configurable.
- Documented DateRange Validator.
- Fixed Visual Builder save/load breaking on pathnames that contained spaces.
- Additional functionality documented on Hover class.
- XML->JS translation: <children><children> on a field with multiple=true now
produces an empty array instead of an empty object with an empty array.
- Fixed NPE in RPC DMI if client passed null for data.
- Fixed ListGrid firing selectionChanged twice when a record was selected in single selection
mode.
- Fixed Hover positioning not taking its shadow size into account for auto-placement when
re-shown.
- Enabled XPath support for Safari 3 series (beta support)
- Added more agressive caching of ResultSet filter criteria such that a more constraining
filter is applied on the client instead of turning around to the server. Can be disabled with
criteriaPolicy="dropOnChange" on the DataSource.
- HTMLFLow: additional hooks: loadingContent() and contentLoaded()
- HttpProxyServlet moved to comm.isomorphic.servlet, backcompat stub still present in
com.isomorphic.tools.
- Support for headerBaseStyle, headerTitleStyle at ListGridField level.
- Extensive documentation on SmartClient JAR files and their dependencies in the 'Deploying
SmartClient' overview topic in the reference docs.
- Exception wrapping in RPC DMI and DataSource DMI moved to IDACall
handleDSRequest/handlRPCRequest so that end users can override this behavior. The default
behavior remains the same as before.
- List.sortByProperty() now takes an additional, optional 'context' parameter that allows
additional context to be passed into normalizers. Higher level constructs such as ListGrids
now pass additional context to normalizers.
- Additional metadata now available on RPCRequest that are DMI-mapped.
RPCRequest.getAppID()/getServerObjectID()/getMethodName()/getARguments().
- Support for low level dom element size matching via
Canvas.htmlElement/htmlPosition/matchElement
- Maked Windows can no longer be dismissed with escape keystroke.
- Visual Builder: if an error occurs during load or import, warn, but make content that did
load available for editing.
- Visual Builder: new Import feature allows import of any XML or JS file, so long as they
conform to Visual Builder parameters.
- Documented ResultSet.invalidateCache()
- Visual Builder: FormItem IDs now user-editable.
- HibernateDataSource: fixed type='text' length > 1999 fields mapping to type 'string', thus
producing fields that are too short. Now maps to type 'text'.
- HibernateDatasSource: fixed add opertions breaking on dynamic datasources in some cases.
- Lots and lots of new documentation system-wide.
Changes in 5.7 RC1
- Fixed: calling 'setProperties' to update ListGrid.fixedRecordHeights, bodyStyleName,
bodyBackgroundColor now successfully applies the updates to the rendered grid.
- Fixed: avoid an error if ListGrid.validateRow() is called with a rowNum beyond the end of
the list
- Enhanced: support navigating through options in databound SelectItems by entering first
character if the entire set of options has been loaded
- New: additional filtering APIs for DataBinding: ResultSet.applyFilter(),
ResultSet.initialLength, ResultSet.initialData, ResultSet.neverDropUpdatedRows,
DataSource.applyFilter(), dataSource.fieldMatchesFilter()
- Fixed: issue in Mozilla based browsers where setting opacity of a dynamic form could break
change handling
- Fixed: resolved a case where styling including large negative margins could cause page
coordinates to be misreported for relatively positioned widgets
- Enhanced: Additional ListGrid APIs for customizing header button appearance
- Enhanced: DynamicForm.getItems()/getFields() to make fields and items more truly
synonyms
- Fixed: Fix for a bug where callback passed to saveAllEdits() could fire
when multiple rows were being saved, some of which failed validation
- Fixed: Fix for a case where hitting the Escape key during RPC requests could cause the
requests to fail in Mozilla based browsers
- New: DynamicForm/FormItem.selectOnFocus
- Enhanced: Have editable ListGrids pick up a number of additional editor properties
directly from the field definition. See the editing documentation group in the reference document
- Fixed: FormItem titles now render focused state if showFocused is true for the item
- Fixed: fixed a case where a child widget could be clipped by its parent even with
keepInParentRect set to true
- New: Canvas.showNextTo() method
- New: MenuItem.action()/Button.action() methods
- Fixed: resolved an issue where in some cases Layouts would fail to react to changes in member
size due to content changes
- Fixed: avoid an error with
"isOneOf" type validators applied to fields with
no specified set of valid options or vauleMap
- New: new StatefulCanvas.showTitle property
- Fixed: PickList.optionFilterContext is now working properly
- Fixed: Fix for a case where hierachical menus could fail to display changes to their
underlying tree of options
- New: SelectItem/ComboBoxItem fetchData() method to fetch options for databound items
- New: SelectItem/ComboBoxItem dataArrived() notification method for databound items
- New: ResultSet.updateCacheFromRequest allows DSResponses to omit successfully saved data
from add/update requests.
- Fixed: resolved some issues with inline editing of TreeGrids
- Enhanced: support for databound TreeGrid drag and drop behavior for modifying the underlying
data
- Enhanced: cache-sync for ResultTrees. Databound trees will now update to display changes
made to the DataSource data via standard addData()/updateData()/removeData() APIs
- Fixed: in some cases a Menu could be rendered offscreen after being dismissed via Escape keypress
- Enhanced: various improvements to Window.maximize() / Window.restore() default behavior
- Fixed: Fix for a case where Slider value labels would be hidden inappropriately in some cases
- Fixed: ListGrid now behaves correctly if server does not provide a totalRows for paged results
- Fixed: Calling setButtons() on the ask dialog could cause errors in some cases
- Fixed: Fix for an issue where in some cases
position:"relative" canvases with
showEdges set to true could appear with mis-positioned edges
- Enhanced: FormItem.timeFormatter added for customizing Time values displayed in fields
other than TimeItems
- Enhanced: ListGridField.displayFormat/inputFormat allows for consistent
field-level control over display of dates and times
- Enhanced: added some FormItem properties for customizing hover appearance
- Fixed: minor visual "flash" when rolling over different parts of a SelectItem in some browsers
- Enhanced: support for specifying dragTarget as a widget ID as well as a live widget instance
- Enhanced: support for specifying tabBarControls as IDs in addition to live widget
instances
- Fixed: avoid a possible error if a RadioGroupItem is specified with valueMap set to
["true","false"]
- Enhanced: Major improvements made to the Visual Builder tool, particularly for saving/retrieving
stored SmartClient projects
- New: Documented "autoChild" subsystem, used for customizing many automatically generated
components.
- Fixed: Resolved an issue where TabSet scrolling controls would not be written out in some
cases
- Enhanced: Improved support for custom handling of validation on hidden fields in
DynamicForms and ValuesManagers.
- Fixed: avoid an error if a FormItem is specified with
colSpan:0 - treat as
1 instead.
- Enhanced: support for customization of SelectItem/ComboBoxItem pickLists via pickListProperties
- New: canvas.showDragShadow/dragOpacity for customizing drag appearance
- Enhanced: Improved logging capabilities on SmartClient objects: object.echo, object.echoAll,
object.logEchoAll
- Fixed: SmartClient SQL prototyping: primaryKeys are no longer part of the values clause of
a SQL Update
- Enhanced: FileAssembler servlet no longer sends expires headers for URLs it intercepts
- Fixed: ensure that when global servlet.compress flag set to false we don't serve compressed
files even if fileAssembly.js enables compression for this URI
- Enhanced: Added CSS to the list of mime types that can be compressed - affects FileDownload
servlet, CompressionFilter
- Fixed: Fixed loop detection logic in JSTranslater.toJS()
- Fixed: JMS RealtimeMessaging provider now rebinds correctly if server goes away, then comes
back up.
- Fixed: CompressionFilter, could fail on some containers that did not provide a default
charset
- Enhanced: added setProperties() transformers to BigDecimal, BigInteger, java.sql.Date,
java.sql.Time, java.sqlTimestamp
- Enhanced: in setProperties(), if passed an inbound Map for a value that takes what
looks like a bean, try to instantiate that type of bean using newInstance()
and populate it via setProperties()
- Fixed: FileAssembler could serve stale assembled file if compression was previously
enabled, but subsequently turned off.
- Fixed: in getValues() getValueSets(), if the operationType is remove, call
through to getCriteria() getCriteriaSets(), just like we do for fetch.
Changes in 5.7b1
SmartClient 5.7b1 is a beta release - partial list of fixes and enhancements:
- New: Beta level support for the Opera browser
- New: Beta level support for the Safari 3.0 beta for Windows browser
- New: Beta level support for the Adobe Apollo desktop runtime engine
- New: Support for drag and drop of records between databound ListGrids, supporting
standard ListGrid dragDataActions
- New: Chart interface and FusionChart implementation, with ListGrid and CubeGrid integration
- New: APIs for retrieving and setting view state (tree open nodes, selected nodes, etc) on
ListGrid and TreeGrid (see ViewState group)
- Enhanced: Toolstrip enhancements to allow vertical operation
- New: listGridField.canToggle for one-click value changing for boolean and valueMapped fields
- New: jsonPrefix/Suffix to enable easier wrapping of JSON responses to avoid spoof attacks
- Fixed: server bug where using Java null as a key in a Map would be serialized as JavaScript
not acceptable to IE ("null" string key in Map already OK)
- Fixed: workaround for IE native bug when FileLoader loads dozens of JS files in a single
FileLoader.loadJSFiles() call
- Fixed: issue where saving tree nodes would pull in entire Tree datastructure
- New: API DynamicForm.itemChange()
- Fixed: certain special characters hanging search in documentation viewer
- Fixed: simultaneous native tooltip and SmartClient hover if setProperties(prompt) called
- Fixed: inability to suppress prompt on filterEditor in ListGrid
- Fixed: a server bug that, with schemaless XML to JS transform, would drop the second and
later elements of the same name
- Enhanced: dynamic WSDL loading (loadWSDL()) now works without the SmartClient server
- New: added example configuration for connectng Messaging module to Apache ActiveMQ
- Enhanced: expanded documentation on component schema
- Fixed: Admin Console: case where changing the default database would not update to
display the new default database
- Enhanced: If a layout is initialized with a null slot in the members array, log a warning
message and remove the empty slot
- New: support for dsRequest.useFlatHeaderFields
- New: WSDL tab in developer console now allows interactive testing of WSDL services
- Fixed: an issue where SpinnerItems allowed trailing alpha characters to be entered
- Enhanced: Modifications to the Time class and related systems to ensure that all Time type fields
are stored and retrieved as UTC timezone times rather than local times. Avoids the need
to adapt time values to browser locale
- Enhanced: MenuButtons now hilite the access key by default
- Fixed: disallow editing of fields marked as disabled in a ListGrid.
- Fixed: bug where relogin dialog could fail to be displayed after session timeout in
Internet Explorer on HTTPS sites using document.domain
- Enhanced: expanded documentation of properties used to customize ListGrid headers
- New: implemented additional ListGrid styling control via ListGridField.baseStyle,
ListGrid.recordBaseStyleProperty
- New: exposed FormItem.form - read only property to access a FormItem's dynamicForm.
- Fixed: an issue whereby user could not reliably tab through toolbar buttons on the
SmartClient ask / warn dialogs.
- New: support for customizing the cursors applied to the SplitBar class
- New: troubleshooting documentation covering the most common issues arising during
SmartClient installation.
- Fixed: Internet Explorer-only bug whereby list grid editing focus could unexpectedly
be taken from the edit field in some cases.
- New: class RestDataSource provides cookbook integration with generic back ends (Ruby, PHP,
Perl, etc) using XML or JSON communication over HTTP.
- New: exposed various advanced properties on the Class class which apply to expanding the
SmartClient class system, including class.init() class.addPropertiesOnCreate
- Fixed: bug where a Canvas could be mis-detected as having been explicitly sized by the
end user if setOverflow() was called with certain timing
- Fixed: bug where the view could not be automatically detected by a ViewLoader if the
last created component auto-created peers
- Fixed: problem where getters and setters would not be automatically shown in documentation
viewer
- New: ListGrid method 'focusInFilterEditor([fieldName])' to focus in the filter editor for a
field (if showing)
- New: system helper methods isc.sortObject() and isc.sortObjectByProperties() for sorting
javascript objects by key or property values.
- Fixed: case where old views would not be hidden in response to viewLoader.setViewURL()
- Fixed: issue in the ListGrid whereby if leaveScrollbarGap was set to false, when
scrollbars were hidden, the space used by the scrollbar would not always be reclaimed
- New: publicly supported APIs DynamicForm.setValueMap() and ListGrid.setValueMap() for
updating the valueMap of fields at runtime
- New: methods 'fetchData()' and 'filterData()' on the DynamicForm and ValuesManager
class. Allows the developer to perform a fetch and display the first record returned in the
editor
- New: API LinkItem.linkTitle
- Fixed: a number of minor platform-specific ListGrid inline editing bugs
- New / Enhanced: Menus now support items and setItems() as synonyms of
data and setData()
- Fixed: a number of minor platform-specific ListGrid inline editing bugs
- Fixed: JavaScript error that could be caused by modifying the size of certain Layout widgets
- Enhanced/Fixed: TabIndex management improvements
- Enhanced: Reference Documentation expanded and improved
- Fixed: updating titles of SmartClient ask and warn dialgos
- Fixed: CubeGrid facet drag reordering in column headers could error out depending on mouse
position on drop
- Enhanced: StretchImgButtons.wrap property applied to button titles
- Fixed: SectionStack.setSectionTitle() could fail to update the title in certain SectionStacks
- Fixed: SpinnerItems would allow trailing non-numeric characters to be entered
- Fixed: Format of values from SelectItems with multiple specified as true when committed
to the server now matches format of native HTML multiple select items.
- New / Enhanced: New ListGrid attributes recordBaseStyleProperty and
recordCustomStyleProperty allow for greater control of per-record styling.
- Fixed (platform-specific): FormItem.setDisabled(false); could leave items
inaccessable in some cases
- New: Standard "mustBeExactLength" error message for lengthRange validators where
max and min values match
- New / Enhanced: New filter-editor related APIs: ListGrid.filterOnKeypress and
ListGrid.filterByFilterEditor()
- Enhanced: Improved support and documentation for dateFormatter (may be applied to
ListGrids / ListGridFields or FormItems
- Enhanced: WSDL schema viewer in the developerConsole now allows interactive tests of WSDL
services and generates sample requests and responses.
- Enhanced: Safari support for Messaging (server push) and limited support for XPath
selection
- New: Tab.canClose and Tab.canCloseTabs properties
- New: Support for ListGridField.icon
- New: Support for Button.iconClick
- Enhanced: isOneOf type validators pick up any specified valueMap as the set of
valid options by default.
- Enhanced: comboBoxItem pickLists now auto-size to their content by default
- Enhanced: Enforcing item.length limits for textual data in all form item types, not
just TextItems
- Enhanced: Improved and expanded localization APIs and documentation
- Enhanced: Various documentation updates and additions, including HTTPProxy installation,
clarifications on Skinning
- New / Enhanced: support for dataSource.schemaNamespace
- New / Enhanced: support for new dataSource / operationBinding dataProtocol settings
"postXML" vs "postMessage"
- New: Added RPC tab to the Developer Console for improved RPC debugging
- Enhanced: Improved handling of optionDataSource, displayField and
valueField on FormItems and ListGrid fields.
- New: Window APIs dismissOnEscape and shouldDismissOnEscape()
- Fixed / Enhanced: Text based form items where changeOnKeypress is true now fire change
handlers in response to context menu cut/paste
- Enhanced: Support for building Hibernate dataSources in the dataSource wizard
(visual builder application)
- New: isc.showLoginDialog() API to handle complete login flow
- New: ComboBoxItem.showAllOptions attribute
- Enhanced: APIs for finer control of accessKey hiliting in button title
- Enhanced: Improved support for menu fields
- New: Server side support for JDK 1.6
- Enhanced: SDK embedded servlet engine updated to Tomcat 5.5. Note that Java SDK is no
longer required to run the embedded server.
- Enhanced: Numerous skinning improvements
Changes in 5.6 Final
- Major new documentation on Visual Builder and XML component usage
- RichTextItem documented and exposed, examples added
- DataSource Wizard added to Visual Builder
- Ability to save multiple files in Visual Builder
- New "Extending" folder in Feature Explorer with several examples
- New Hibernate and Spring examples and docs
- New SalesForce module with source code, used as an extensive WSDL binding example
- Separated out Visual Builder palette data to allow customization
- New isc.askForValue() built-in Dialog, similar to window.prompt()
Changes in 5.6b3
- New / enhanced documentation areas: custom SimpleTypes, WSDL binding, useFlatFields schema
flattening, TreeGrid load on demand, comboBox custom filtering, XML schema chaining, custom
drag trackers
- Enhanced: listGridField.optionDataSource can now be used to fetch valueMaps from other
DataSources dynamically
- Enhanced: listGrid/treeGrid.dragTrackerMode now offers several different drag appearances
- Fixed httpProxy URL hardcoding
- Fixed issues with cross-file references from WSDL<->XML Schema files loaded at different
times
- Enhanced: ViewLoader and HTMLPane can now use HTTPProxy from cross-domain content loading
- Enhanced: canvas.hoverWrap for controlling wrapping in hovers
- Enhanced: new XMLTools.xmlSerialize() API
- Enhanced: support for cross-domain relogin
- Enhanced: new API FormItem.changed() fires *after* a change has been committed
- Enhanced: better DMI error reporting
- Enhanced: DynamicForm now uses StaticTextItem whenever field.canEdit is false, not just for selected
data types
- Fixed escaping of special chars in History entry titles
- Enhanced: ComboBox now has filterClientPickListData() override point for customized
filtering and display rules
- Fixed inability to title first history entry in IE
- Enhanced: listGrid.getEditValue() and similar methods now get latest user-entered when called on
current edit cell
- Fixed JS error resizing contentsType:"page" HTMLFlow before draw
- Fixed JS error possible when LayoutSpacer was last in a Layout (introduced in beta2)
- Fixed native text drag selection allowed in some form elements in FireFox
- Enhanced: DynamicForm/ValuesManager.setValues() now automatically handles an Array (uses first
member if Object)
- Fixed ListGrid.startEditingNew wiping local datasets when DataBound
- Enhanced: ValuesManager.addMember()/removeMember() now takes String ID
- Enhanced: ValuesManager now warned about mismatched member form DataSource settings
- Fixed CubeGrid facetValue drag and drop issue when using raw Numbers as facetValueIds
- Fixed XML datetime parsing expecting exactly 3 digits for milliseconds
- Fixed hanging a drag by mousing up outside the Window (IE only)
- Fixed spurious error messages for isColor validation and other non-error XML transform
cases
- Enhanced: Shortened XML messages for SOAP services by sharing namespace prefix definitions
- Fixed issues with tabIndex auto-assignment for multiple forms being added and removed from
Layouts
- Fixed large margins causing click to not be fired in certain deeply nested components in
FireFox/Safari
- Fixed spurious errors for private properties when serializing Java Beans
- Fixed titleOrientation:"top" causing some form layouts to overflow
- Fixed warning/alert dialogs being able to be dragged offscreen
- Enhanced: can now explicitly mark a SectionStack section or section.item resizeable
- Fixed deprecation flag sticking in SmartClient Reference
- Enhanced: SectionStack headers and other widgets now respond to two rapid click as two
distinct clicks instaed of a double click, which would no-op
- Fixed JS error when hand-instantiating a ResultSet with a String value for resultSet.dataSource
- Fixed bugs handling XML Schema xs:extensions (XML Schema inheritance)
- Enhanced: ToolStrip now has built-in separators and resizers
- Fixed avoid spurious drag scrolling (eg drag scrolling triggered by dragging a scrollbar
thumb of another widget)
- Fixed bug where manual calls to listGrid.validateCell() would not clear old errors
- Fixed dateTime values being sent in local time with some servers
Changes in 5.6b2
- History module - in IE only you can now set the title of the history entry by passing a
title to addHistoryEntry() and/or setting one via setHistoryTitle().
- Automatically apply an isOneOf validator on fields of type "enum"
- Drag reorder indicator now shown in all skins
- Fixed CubeGrid facet height not auto-adapting on h-resize.
- Support right-collapsing resize bars via resizeBarTarget: "next"
- Fixed erroneous introduction of scrollbars into IFRAME created by HTMLFlow/HTMLPane when
(contentsType is "page")
- Menus whose overflow previously exceeded browser height (and made selection of some items
impossible without a scroll wheel) now size to the browser height and automatically introduce
scrollbars.
- Fixed TabSet.updateTab() erroring out in some cases if called before component is drawn.
- Fixed VLayout limiting scrolling when a LayoutSpacer was present at the end.
- Fixed Shift-F10 keyboard shortcut showing context menu on the wrong element in some cases.
- Isomorphic web.xml files now comply with strict dtd verifiers (for Geronimo)
- Improvements in web service binding compatibility
- Numberous ListGrid inline edit, validation API fixes, updates.
- Update APIs and docs for ListGrid.getFieldState()/setFieldState()
- Fixed Developer Console sometimes truncating logs on reconnect to main window (introduced
in 5.5b1)
- Don't bother trying to call non-public methods (bean introspection) in
DataTools.getProperties(). Harmless, but generated bogus errors.
- RPCRequest.paramsOnly deprecated in favor of useSimpleHttp. Old property still supported
for backompat. Also fixed RPCRequest.params being dropped on a POST if RPCRequest.data was
also specified.
- Improvements to Layout Drag and Drop interactions.
- Various documentation fixes.
Changes in 5.6b1
SmartClient 5.6b1 is a beta release - partial list of fixes and enhancements:
- isc.FL alias for isc.FileLoader
- Ascending/descending images in TreeGrid skins were reversed in some skins. Fixed.
- Added default edge media for skins other than SmartClient.
- FileDownload configuration - added default expiration for mimeType image/x-icon: 1day
- Added collapse indicator on all Layout resize bars.
- Fixed some pickLists overflowing offscreen, introducing page-level scrolling.
- Improved stack trace reporting in IE7
- Fixed problem with Window maximize/minimize inside Layouts.
- Improved support for the Window.src attribute
- New API: RPCmanager/RPCRequest.promptStyle and related attributes.
- Improved i18n documentation - making it easier to determine localizeable strings in SmartClient components.
- New SmartClient module: History - supports synthetic history creation and navigation via
back/forward browser buttons and direct history navigation in IE, Firefox.
- Various reference documentation fixes.
- Fixed certain kinds of links in the reference documentation view not working.
- Fixed TreeGrid dragTracker disappearing when dragged node had no icon.
- New APIs: ListGrid.getFieldState(),setFieldState(),fieldStateChanged()
- Added extensive documentation on performance optimization techniques. See Optional
Modules->Network Performance and sub-topics in the reference docs.
- New API: isc.clone()
- Added example of integration with Hibernate and associated documentation in reference docs.
- Ensure that all DSResponse records go through valueXPath interpolation when returned via
the Java RPCManager class.
- Embedded HSQLDB bumped to latest release version (1.8.7).
- DataSource DMI: provide DSRequest criteria as bean binding to target method if DSRequest
values are null.
- Fixed TabSet.getSelectedTabNumber() reporting incorrect tab if new tabs were dynamically
inserted before the currently selected tab.
- Significant usability, stability improvements to Visual Builder tool.
- Improvent to TreeGrid spring-loaded folders: allow spring-loading even if the current drop
target will not accept a drop of the currently dragged data.
- Fixed keyboard navigation of Menus not starting at first menu item in certain circumstances.
- New API: ListGrid.autoSaveEdits and other multi-row edit properties.
- Support page setting document.domain. This case is automatically detected, no
configuration is necessary.
- Support keyboard navigation on a closed, databound select iff all data is loaded.
- New API: TreeGrid.canDropOnLeaves().
- Fixed bug in ListGrid.cellHasChanges() side-effecting submitted values in certain
circumstances.
- Callback supplied to ListGrid.saveEdits() now fired on validation failure and takes
additional params.
- Added additional styling options to DateChooser.
- Various SelectItem/PickList fixes.
- Various ListGrid inline editing fixes.
- Fixed ListGrid.showField()/hideField() called before draw() would produce incorrect result.
- Fixed xmlNamespaces specified on DataSource operationBinding not being respected.
- Fixed slide/wipe animations of members with showEdges: true inside Layouts.
- Fixed single-section SectionStack having first section forced open even if it was
explicitly marked expanded: false.
- DMI configuration - When serverConfig specifies lookupType="factory", the create() method
of the factory is now dynamically passed the serverConfig configuration as a Map. This allows
you to to retrieve custom attributes of the serverConfig object.
- Tab scroller menu on TabSet had problems with long tab names. Fixed.
- Fixed rendering issues with ComboBox icons.
©2007 Isomorphic Software, Inc. All rights reserved. Your use of this software
is subject to the
License Agreement.
Isomorphic Software, SmartClient, and all Isomorphic-based names and logos that appear herein are
trademarks or registered trademarks of Isomorphic Software, Inc. All other product or company names
that appear herein may be claimed as trademarks or registered trademarks of their respective owners.
This product includes software developed by the Apache Software Foundation (http://www.apache.org/).
This product includes Hypersonic SQL.