What's New in DataFlex 2016 / 18.2
By Stephen W. Meeley
Introducing DataFlex 2016 / 18.2
DataFlex 2016 / 18.2 builds on the foundation of DataFlex 18.1. It focuses on implementing over 225 developers suggestions and bug fixes. The enhancements and fixes range from the base system, up through data dictionaries, the framework and the developer tools themselves (especially the Studio).
The complete details of the suggestions implemented and bugs fixed are contained in the Whats New section of the Help included with the DataFlex 2016 / 18.2 Studio installation. Here are the highlights...
Windows Framework
- A new windows class, dbParentCombo, provides the same capability as the new web cWebParentCombo class. Both of these classes now support a more flexible method for displaying custom combo-list content.
- A New Month calendar control for prompts and other custom uses (see the Order view in the Order Entry example). If seeded dates are empty, we pick good defaults for them and if a seeded date range exceeds controls max range (piMaxSelectedCount) a handled error is raised. SelectedDate and SelectedDateRange can be called after the control is closed.
- Weve changed the default of pbSuppressCacheError in cDbCJGrid from False to True. While we generally avoid changing default properties, we felt that in the long run this is warranted for the following reasons:
- Suppressing re-read errors in grids is really the best default for end users using a deployed application. Real world, multi user conditions arise where a row cannot be re-read and providing an error message (even a handled one) to an end-user serves little purpose.
- The automatic grid refresh recovery process introduced in 18.1 has worked really well. When a row cannot be re-read the grids refresh process works great. Having this preceded by an error message somewhat defeats the automatic recovery.
- Our web and windows grid classes were not consistent. In Web we suppress the error, and weve had no complaints or comments. In Windows, we dont suppress the error and we get complaints and comments. We should change one or the other.
- This property was introduced in 18.1 we dont have much compatibility history so now is the time to make the change.
- The only downside of suppressing cache errors is that it may suppress programming errors. For testing purposes developers can set this property to False and then remove it upon deployment. They can also place a breakpoint in HandleCacheError or SetGridCacheError and wait for the code to get executed. If you work with dynamic constraints, this is probably something you want to do when testing your application.
- Since most developers create class layers, you can set pbSuppressCacheError in your sub-class to whatever you want. Our advice will be to leave it True (suppress the handled error) because that is what is best for a deployed application. If you have already set this to True, as many have, nothing changes although you may now remove that Set.
- Windows applications now do a better job of sizing and locating the main panel when moving from a multi-screen to single screen environment.
- Windows 10 font spacing (kerning) issue are resolved.
- The latest CodeJock controls (16.4.0) are used and supported.
Web Framework
- Complex views display much faster on clients
- New parent combo control. When using the parent combo control, the Entry_Item command determines the parent table and column that will be used and the combo automatically fills itself by searching the parent table.
- Web based Data Dictionary Inspector (Web_DDDebug) - Be sure to check out these user interface improvements (contributed by Raveen Sundram); cleaned up the UI, added a Treeview to display the DDOs in a structure and added a Grid to show the Field information.
- Improved cookie management
- Better error handling
- Many JavaScript engine improvements
- Better cross platform compatibility and performance
- Many layout and alignment improvements
- New Desktop Theme
- The DF_Flat_Desktop theme has the same modern look of mobile/touch (DF_Flat_Touch) theme but with smaller control sizing and condensed spacing that is more appropriate for desktop monitors and precision pointing devices.
Studio
- Better Table Explorer Table Filter options
- Table list (filelist) filtering is now applied more widely throughout the Studio, e.g. the DDO Table Selector.
- Generates .DEF files whenever .FD files are generated (configurable). You can also explicitly generate .DEF files
- Configurable pre & post compile processing
- Optimized Web Designer (much faster)
- Better support for JavaScript sub-classing in the Designer
Data Dictionaries
New Smart Relates
The new pbSmartRelate property controls whether DataDictionaries perform relates on parent tables that are not connected to the DDO (DataDictionary Object) structure. Normally, a DDO structure should be complete and contain all parents. When saving data, this is a requirement. For batch and reporting processing, developers often remove parent DDOs if they are not needed for the process. If pbSmartRelate is set true, these non-connected parent records will not be found as part of the relate. This can result in noticeable performance improvements when finding many records (e.g., batch processes or grids that load many records). This will be even more noticeable when using SQL back-ends.
When False, DDOs perform relates on all open parent tables up the ancestor tree. A parent record is found (related) even if there is no parent DDO associated with it. Until version 18.2, this was standard behavior. The default is True in the DataDictionary class and False in the abstract DataSet class.
Constraints
Added RebuildAllConstraints message to base_data_set. This sends Rebuild_Constraints to all DDOs in a structure.
Whenever a constraint is changed rebuild_constraints must be sent to the DDO that was changed. In addition, rebuild_constraints should be sent to all DDOs that might be impacted by the change. This is required when constraints are inherited. We therefore advise that you send rebuild_constraints to all DDOs within a DDO structure. RebuildAllConstraints does this. It sends Rebuild_Constraints to all DDOs in the structure. We now advise that you send RebuildAllConstraints, instead of sending Rebuild_Constraints. It is easier and less error prone. You still might use rebuild_constraints for augmentation but even this is unlikely.
Base DataFlex System
There are lots of new functions and methods in DataFlex 2016 / 18.2, including...
Array and String Manipulations: StrSplitToArray() and StrJoinFromArray()
20 new Time and Date functions:
- DateAddDay
- DateAddHour
- DateAddMillisecond
- DateAddMinute
- DateAddMonth
- DateAddSecond
- DateAddYear
- DateGetDayofWeek_WDS
- DateGetDayofWeekISO
- DateGetWeekOfYear
- DateGetWeekOfYear_WDS
- DateGetWeekOfYearISO
- DateSet
- IsTimeSpanValid
- IsTimeValid
- SpanAddDay
- SpanAddHour
- SpanAddMillisecond
- SpanAddMinute
- SpanAddSecond
4 new Class and Object information functions
- ObjectClass
- ClassSuperClass
- IsObjectOfClass
- IsClassOfClass
Help System
There are very significant changes in what is (and is not) listed in a classes attributes pages (events, properties, procedures) in the Class Reference. Depending on the class, many of the attributes were missing from those pages and they should all now be properly listed (some may still need additional documentation). This change may be hard to initially verify because the improvement is widespread and a lot of the methods that were impacted are deep in the class hierarchy. An interesting example is comparing the 18.1 and 18.2 pages for the dbForm list of Properties, Events or Methods. The bottom line is that the Class Reference in DataFlex 18.2 is much more accurate than in any prior version of the product.