Flexicious 2.5 Released!

clock October 19, 2011 13:32 by author Flexicious

Since the release of Ultimate in April, we’ve come a long way today, with hundreds of developers at world class organizations adopting our products for their complex data presentation and interaction needs. Since April, we have already had 4 releases, each with numerous features added. 2.5, is by far, the largest release. For those of you who have been following the Spark DataGrids’ progress you will agree that we’ve achieved a remarkable amount of functionality and power in a very short period of time.  Our focus is laser thin, and we are able to maintain a highly agile process by being in constant touch with our customers and quickly adapting to your needs. We release often, send out pre-release builds (you can request the latest stable build anytime),  and use customer feedback to shape our product. It’s a interactive dialogue, it has made our product enormously more powerful and precise in terms of meeting the requirements of LOB application developers.

Presenting, Flexicious 2.5

New Feature, Ultimate : Virtual Scroll (blog post here)

New Feature, Ultimate : External Filters. Each level now exposes a property called filterFunction, which can be a callback tied to a separate filtering panel. Added example ExternalFilter to demonstrate this.

New Feature, Ultimate : Decoupled and Highly configurable Disclosure Icons. Added propreties enableDefaultDisclosureIconAdded, enableExpandCollapseIcon, enableLabelAndCheckBox. Added style properties expandCollapseIconLeft/Right/Top/Bottom,   SelectionUI1 and SelectionUI2 examples to demonstrate this.

New Feature, Ultimate : Built in change tracking. Added propreties enableTrackChanges, changes, and method trackChange. If set to true, each addition, update(via the grid) or deletion to the data provider will be tracked in the changes. Added the ChangeTrackingAPI example to demonstrate this functionality

New Feature, Ultimate : Split headers for MultiColumnSort, added ability to define the number of sort dropdowns in the MultiColumnSort popup. multiColumnSortNumberFields. Extended multi column sort to inner levels for nested grids.

Enhancement, Ultimate : Added the showMessage function, which will show the spinner without the wheel and display the message. This is utilized by the enableNoDataMessage, which will show a text like “No Records Found” when a zero length data provider is set, or when filter results in nothing.

Enhancement, Ultimate : Added the built in support for autorefresh. Added properties enableAutoRefresh, lastAutoRefresh, autorefreshInterval and autoRefresh event to support this feature.

Enhancement, Classic And Ultimate : Enabled Automation support for all our products. Some of our customers have been using the Automation support that we started providing earlier this year. With 2.5, we are making this a part of the official build. We have also added examples for FlexMonkey and QTP, blog post here:

Enhancement, Classic And Ultimate : Updated preference persistence mechanism to support column groups

Enhancement, Classic And Ultimate : Updated printing mechanism to support Column groups

Enhancement, Ultimate : Added keyboard support for Page Up, Page Down,  Home, End, CTRL + SHIFT LEFT/RIGHT/UP/DOWN, F2 Keys

Enhancement, Ultimate : Added editable flag at the grid level, similar to Flex SDK datagrids. Setting editable on the grid is necessary to enable edit

Enhancement, Ultimate : Added the expandChildrenOf method, and the editedItemPosition method, for consistency with the SDK ADG

Enhancement, Ultimate : Added the columnGroupCellRenderer property, to provide ability to customize the container cells for column groups.

Enhancement, Ultimate : Moved the cellBackgroundColorFunction and the cellTextColorFunction on to the grid, so now you can control the background and text colors of any cell, including the chrome(header,footer,filter,pager,level renderer,column group) cells

Enhancement, Ultimate : Added the enableRecursiveSearch, enableHideIfNoChildren properties. For grouped datagrids, this will search each level for matching criteria, and automatically hide those parents that do not have any children that match the search criteria. Also the default behavior of the grid is to automatically add records that do not have the field being search on. This is especially applicable to grouped datagrids where the parent may not have all the fields being searched on. We added a property, filterExcludeItemWithoutMatchField that will prevent these items from showing up. Also, added globalFilterMatchFunction, a function to control all the filtering at all levels. If you specify this, all built in filtering mechanics are ignored. This allows you to have full control over filtering.

Enhancement, Ultimate : Automatic preservation of open items and selected items. If you specify a selectedKeyField that is unique across the grid, the grid will maintain the state of the dataprovider in terms of open and selected items when the data provider is refreshed. Please set the following flags to false as well: clearSelectionOnDataProviderChange, clearOpenItemsOnDataProviderChange. Also added rebuildGridOnDataProviderChange, which, when set to false will only redraw the body region when you change the dataprovider. All of these properties together make the process of runtime refresh of the dataprovider (for example, post an autorefresh or after reloading the dataprovider after save/edit) easier.

Enhancement, Classic/Ultimate : Print Preview warning message. By default, we show a red warning when the user changes the page layout or size to notify them that this does not affect the actual printout, and these settings need to be applied again on the print window. We added a showWarningMessage property to disable this message assuming you have another way of notifying the user.

Enhancement, Ultimate : Added ability to highlight the currently editing row. Exposed properties enableEditrowHighlight and editItemColors style property

Enhancement, Ultimate : Added enableActiveCellHighlight, Flag to hightlight the active cell. If set to true (default) the cell under the mouse or if navigating via keyboard, the current reference cell will be highlighted with the activeCellColor style

Enhancement, Ultimate : Performance optimizations, Ultimate should render 10-15% faster. Read the performance post for details.

Enhancement, Ultimate : Added property enableSelectionBasedOnSelectedField, selectedField and method setOpenItemsBasedOnSelectedField. Flag to enable dataprovider based preselection of data. Please ensure you set selectedField at all appropriate columns levels. selectedField  is a field on the dataprovider that indicates that this item should be selected

Enhancement, Ultimate : Added timers to the icon hover over, so accidental move of the mouse over the icon and out of the tooltip does not cause it to disappear or appear unintentionally. Added the tooltipWatcherTimeout property to support this.

Bug Fix Ultimate: Excel Export of Grouped DataGrids (reusePreviousLevelColumns=true) was pushing nested levels one column in. This has now been fixed, and instead of skipping a column to emulate the hierarchy, we insert spaces so it looks like a hierarchical export.

Bug Fix, Classic/Ultimate : Fixed issue with filterComboBoxWidth not being applied to the MultiSelectComboBox dropdown.

Bug Fix, Ultimate : Fixed issue with textAlign=center not working

Bug Fix, Ultimate : Fixed issue with drawing custom icons for expand collapse

Bug Fix, Classic/Ultimate : Fixed issue with AutoComplete ComboBox scrolling and row count.

Bug Fix, Ultimate : Clicking on a row did not immediately change the color, you had to hover out and hover back in

Bug Fix, Ultimate : Clicking on the fill area of the grid did not end the current edit session

Bug Fix, Classic and Ultimate : Fixed an issue with the Collection Manipulator that was causing it to fail in Flash Player 10.1 and below.

Bug Fix Ultimate: Right Click Cell Select. Intermittent Issue from Flash Player https://bugs.adobe.com/jira/browse/SDK-31155

Bug Fix Ultimate : Paging at inner nested levels was broken, fixed

Bug Fix Ultimate : Show Hide Footers made the footer area go blank

Bug Fix Ultimate : Show hide all columns caused last column to occupy all space

Bug Fix Classic: Preference persistence would not correctly restore the order of columns

Bug Fix Classic : The halo focus rectangle on column being edited with ExtendedAdvancedDatagrid was showing one row off.

Ultimate DataGrid now supports Virtual Scroll with Hierarchical Data

clock October 19, 2011 13:30 by author Flexicious

Virtual Scroll: With the release of Ultimate 2.5, we present for the first time in the history of Flex, (and most other UI technologies) Virtual Scroll with Hierarchical data. The mandate when we came up with this feature was that we would need to be able to support scrolling through potentially millions of rows of hierarchical data. Implementing Virtual Scroll for Flat Data is quite straightforward. But when you start thinking about extending the same for hierarchical data, it starts to get complicated even to think about it. Add in ability to support multi headers, footers, selection, and you have a real challenge at hand. Well, the adventurers we are, we took it on. Before you read through the how-to, jump over to the demo, scroll all the way down, and run the Virtual Scroll example to see it in action.

Below are the guidelines to implementing Virtual Scroll for your applications:

1) Define your levels, columns, etc.

2) When you set the dataProvider, ensure you set grid.totalRecords. This is the same process you would follow with filterPageSortMode=server.

3) Set enableVirtualScroll=true

4) Set itemLoadMode and filterPageSortMode=server. This is important, because virtual scroll assumes that you are scrolling through a large set of related data, and the only navigational gesture for record identification of the current viewport is the scroll position of the vertical scroll bar.

5) Set the selectedKeyField. This is also important, not from a virtual scroll perspective, but specifically where filterPageSortMode is set to server. Ultimate (and classic) expose this field, because it attempts to resolve a fundamental issue that is left unaddressed by the Flex SDK DataGrids, which is maintenance of selection and state across data refreshes. We’ve talked about this in previous blog posts, but the selectedKeyField is primarily a pointer to a property on the model objects in the dataprovider that uniquely identifies this record in the database. For example, if you are showing a list of employees, the selectedKeyField should be employeeId. This is what the grid is going to use to “remember” which records were “selected” or “open”

6) Set up the numChildrenField. This is required if you have hierarchical data. When you enable virtual scroll, the grid needs to know upfront if the item being drawn has children. This information is then used to draw the disclosure Icon. It is also used to calculate the differential in height that opening or closing a specific item will cause.

7) Wire up the virtualScroll event. This is an event of type FlexDataGridVirtualScrollEvent. This event has a property called “recordsToLoad”. This is an array that contains VirtualScrollLoadInfo records. This array basically tells you which records to load, and at what levels. For flat grids, this will be a list record indexes at the top level. But for hierarchical grids, it will depend on what items are open, how many children each item has, and where you have scrolled to. When this event is dispatched, it is dispatched with VirtualScrollLoadInfo records where the “item” property will be null. It is in this event that you will issue a server call, to fetch the corresponding “item” records on basis of the record Index (and parent for child level records). Once you fetch the records from the database, you can then populate the recordsToLoad array with the data retrieved from the server, and call the grid.setVirtualScrollData, passing in the same array that was given to you in the event.

Virtual Scroll is quite similar to paging from a backend server implementation perspective. In our regular paging examples, we provide a mechanism to show you how to implement backend that consumes a page index, page size, and filter information. You would do the same thing here, with the exception that instead of page index and page size, you will get exact record indexes. The array of Virtual Scroll Data will also optionally contain header and footer rows. From a backend implementation perspective, you’ll ignore these.

8) A few other flags that might be of interest:

a. enableDrawAsYouScroll : When you set this to true, the grid continuously dispatches the “virtualScroll” event. You should set this to true only when you have a need for this, because for the most part, you only want to dispatch the scroll when the user pauses scrolling.

b. virtualScrollDelay : The amount of time to wait before dispatching the virtualScrollEvent

DataGrid Automation with FlexMonkey and QTP (For Classic, Advanced and Ultimate)

clock October 19, 2011 13:27 by author Flexicious

Automating Flex Applications is a key aspect of Enterprise Application Development. Out of the box Flex Supports a rich Automation framework, with a plugin based Automation API mechanism that automation tools can use to perform recording and playback. There are many automation tools available in the market, including FlexMonkey by GorillaLogic, QTP by HP (Formerly Mercury). Borland SilkTest, RIATest, Selenium-Flex, etc. Most of our clients currently either use QTP or FlexMonkey.


Automation usually involves a few steps in terms of setup. The first step is to get the agent link swc embedded into the application. The agent swc is usually provided by the Vendor that makes the Automation tool. The second step is to pull in the Automation swcs for the Flexicious Classic (ClassicAutomation.swc) or Flexicious Ultimate (UltimateAutomation.swc), and link them as linked libraries. The third step is to modify the environment file, which is a custom file for each automation tool. Once this setup is complete, automation is ready for use. The name of the Automation File for FlexMonkey is FlexMonkeyENV.xml, and the one for QTP is TEAFlex.xml. Both are included in the links below.

Below, please find two links, for QTP and FlexMonkey



The latest automation libraries are here :


Automation.zip (19.68 kb)

Libraries for Flex 3 are here:

AutomationFlex3.zip (17.38 kb)