Skip to content

What's New in DataFlex 2025

DataFlex 2025 introduces new Dashboards, Composite Classes, a Navigation Designer and more.

Changes Between Releases

This page lists all new features in DataFlex 2025.

See DataFlex 2025 Final Release Changes for the specific list of changes between Release Candidate 1 and the Final Release.

See DataFlex 2025 Release Candidate 1 Changes for the specific list of changes between Beta 2 and Release Candidate 1.

See DataFlex 2025 Beta 2 Changes for the specific list of changes between Beta 1 and Beta 2.

See DataFlex 2025 Beta 1 Changes for the specific list of changes between Beta 1 and Alpha 1.

Compatibility Notes

DF_DATE_4_STATE_ONLY_ON_PARSE is now turned on by default

We added the DF_DATE_4_STATE_ONLY_ON_PARSE attribute in DataFlex 24.0 and left the default as off. We are now changing the default of this property to be on, as this is the better behavior.

Overlap Fields are now obsolete

Overlap fields have been deprecated since we introduced multi-segment relationships in DataFlex 11.0 (2005) and we have been encouraging developers to switch to newer, better alternatives ever since. As of DataFlex 20.0, when we added Unicode support, overlap fields that overlap any non-ASCII fields no longer work and we have no plans to change this. Overlap fields are now officially obsolete.

RunProgram no longer falls back to command prompt calls

RunProgram no longer falls back to command prompt calls (comparable to Shell).

Note: if your program no longer starts, you will have to use the Shell attribute.

  • Users that called a .bat file should now do that using Shell.
  • Users that depended on capital .EXE, .COM, .BAT behaviors should now do that using Shell in the .bat scenario.

Standard Password Hashing changes to the cWebSessionManagerStandard class

The cWebSessionManagerStandard class now does password hashing out of the box using the PBKDF2_HMAC_SHA_512 algorithm. This means that if you did not already implement a hashing algorithm and abstract the UserLogin and/or other functions, the passwords in the database would previously have been plain text.

See Standard Password Hashing for details and migration information.

The password column of WebAppUser must now be at least 128 characters long

If you have existing workspaces with WebApps using the WebAppUser table, you will need to adjust the password column to accommodate the new password length. New workspaces will automatically get the table with the new column size.

Renamed incorrectly named constants in cWebSessionManagerStandard.pkg and Language_WebApp_xxx.inc

We fixed typos in two constants:

  • C_$WebAppSesionValidateFailed is now C_$WebAppSessionValidateFailed
  • C_$WebAppSesionSaveFailed is now C_$WebAppSessionSaveFailed

Codejock controls updated to the latest released version (24.0.0)

There should be no impact on compiling your programs, but we encourage you to test your Windows applications.

The WebApp Designer is not a panel anymore

Instead of being a dockable panel within the Studio, the WebApp Designer is now shown as a tab. It behaves the same as the Windows Designer, so a file can be toggled between the editor and the designer using F7. A file can also be opened in a separate designer tab using the "Open designer in separate tab" context menu item.

The Default Username and Password for WebApps has changed

The default username and password provided in the WebAppUser table for a new WebApp and the sample WebApps has changed from Guest / guest to admin / admin.

Migration

The migration wizard's only change for workspaces already in versions 20.0 (and later) is to update the SWS file.

Workspaces currently in versions prior to 20.0 will have their file list inspected for any OEM tables and their projects’ CFG files adjusted to accommodate compiling in 64 bits. Those workspaces may be adjusted further depending on the version of DataFlex the workspace is actually coming from.

JavaScript Engine migrated to EcmaScript6 (ES6) Classes

All the JavaScript code of the WebApp Framework has been refactored into actual JavaScript ES6 classes. Previous versions used so-called "pseudo classes" (a custom-built class system using df.defineClass). Now that all supported modern browsers support the class syntax, the pseudo classes have been deprecated. This change is primarily visible for developers doing JavaScript extensions to the WebApp Framework (for example, building custom controls).

  • It is recommended to migrate custom controls to the new ES6 format. Pseudo classes were already compatible with ES6 classes (both are prototype-based), so many existing controls will still work.
  • Support for subclassing using pseudo classes (df.defineClass) is added but has limitations: the constructor of the base class is called before the constructor of the subclass, and base.constructor is now an empty function. Old-style mixins (df.mixin) do not work with the new framework classes.

See the ES6 Conversion Guide for details on migrating your JavaScript classes to ES6.

New Features

Regular Expressions Class

The new cRegEx class is a runtime addition that provides the ability to use regular expressions in DataFlex programs without third-party dependencies. The class is based on PCRE2 (Perl Compatible Regular Expressions). Developers can use this class for finding, matching, substituting, and extracting with improved performance.

Refactored and Extended API (Beta 2 changes)

The cRegEx API has been extended and refactored. To avoid confusion with database find operations, method names were changed:

  • FindMatch
  • FindAllMatchAll
  • FindAllGroupsMatchAllGroups
  • FindAllExCallbackMatchAllCallback

Note: Match now returns the offset of the first match; 0 means no match.

New methods and properties were added: SubstituteAll, MatchAllOffsets, and properties such as pbMultiline, pbGreedy, pbAnchored, pbIgnoreCase, pbUnicodeProperties.

Demo & Test View

The WebOrder sample now contains a view that demonstrates the regular expression engine and serves as an environment to test and develop regular expressions.

Find the view in the menu under Demo > Regular Expressions.

Studio Find in Files

Regular expressions can now be used when searching through multiple files. The Find in Files dialog has been modified to allow regular expressions to be entered.

Dashboards

A set of controls has been added to create dynamic dashboards in DataFlex WebApps or via FlexTron in Windows applications. Dashboards are customizable by end users and consist of configurable tiles/widgets that function independently.

See Dashboards Quick Start for more information.

Key classes:

  • cWebWidgetContainer hosts a dashboard and stores the dashboard configuration (layout, widget positions, widget configuration).
  • cWebWidget represents a widget; multiple instances of a single widget can be placed on the dashboard with different configurations.
  • cWebWidgetPalette is a helper class used to render a widget.

Studio support is added with the WebApp Designer able to model widgets; templates are available for the dashboard and widget.

Composite Classes

The Composite Class is a new object-oriented class type that allows creating compositions of multiple objects. A Composite can be instantiated like a Class, but the scope between Composite and End_Composite is written like an object. This allows nested objects and procedures and is comparable to an instantiable template.

This class is useful for creating components that instantiate multiple objects as a single component (for example, a cWebWidget) and for handling complex Dynamic Objects where the framework automatically picks up nested objects.

The Studio includes a new Navigation Designer panel to help develop drill-down applications. It visualizes navigation paths between views and widgets by reading WebRegisterPath instructions. It also allows generation of new views by dragging from the palette onto the designer and suggests views based on tables and relations. From the Navigation Designer, views can be opened, deleted, and removed.

See Using the Navigation Designer for more information.

Configurable Object Names for Navigation Designer

Previously, objects created by dragging a view block from the palette onto the Navigation Designer had fixed names (oSelect, oZoom, oZoomDetail). That naming is now configurable in Studio, enabling developers to define the naming pattern.

Configure this in Tools > Configure Workspace. On the Workspace Preferences tab, Navigation Designer options include forms for Select, Zoom, and Detail where a name format can be entered using ${TableName} to determine the pattern for new objects.

Note: objects already created will not be renamed to follow the new pattern.

Standard Password Hashing

The WebApp Framework now supports out-of-the-box password hashing.

Automatic Primary Key Columns

When creating a new table in the Studio, you can now automatically add an auto-increment column. The Create New Table dialog includes a checkbox which, when checked, adds an aId column and a unique index based on this column. When using SQL, the index will be marked as primary key and the column will be marked as an identity column.

When using the embedded database, a system table named DFLastId will be used for auto-increment behavior. New workspaces will include this DFLastId table.

Read more in Automatic Primary Key Columns.

Changes in Primary Key Creation (Beta 2)

In Beta 1 the auto-created primary key was configured through a checkbox defaulting to true. In Beta 2 this was enhanced to offer an option for creating a primary key and to remember the table selection for the Studio session.

Read more in Automatic Primary Key Columns.

Configurable name for ID columns

The automatically created ID column name format is now configurable via Tools > Configure Workspace. In the Table Editor group, the "Primary key format" form lets developers define the name format for new ID columns using ${TableName}.

Note: column length is limited to 32 characters and the table name will be truncated to fit the defined format.

Added COMP$TIMESTAMP for compile-time build timestamp

A new Define/Replace is globally available: COMP$TIMESTAMP. It is defined as the UNIX UTC timestamp (number of seconds since 1 January 1970) as a constant UBigInt. This provides a locale-independent build timestamp.

Example:

Move COMP$TIMESTAMP to ullUnixUTC

For date/time calculations, see the Date & Time library.

Improved Performance when loading Workspaces

Collecting view-generation information previously required opening every table and parsing every DDO, causing delays when starting the Studio. This process has been moved to the initial opening of the Navigation Designer, reducing startup time. Also, "Cannot open table…" errors when a database connection was not successful at workspace opening have been eliminated.

Web Themes are now configurable using CSS variables

Web themes now use CSS variables for main colors and some dimensions, allowing configuration without changing the theme files (easier updates). The full list of variables is at the top of the Theme.css file. Place custom variable overrides in CssStyle/Application.css.

Example (changes main colors for the Df_Material theme):

:root{
  --df-MainDark: #567d2e;
  --df-MainRegular: #7CB342;
  --df-MainMedium: #89ba54;
  --df-MainLight: #a3c97a;
  --df-MainLight2: #cae0b3;
  --df-MainLight3: #e4efd9;
  --df-MainLight4: #f1f7ec;
}

Improvements and Bug Fixes

Studio

  • Redesigned the Start Center with new tabs and a clean, modern look.
  • Implemented a new style for the Studio Dashboard.
  • Added Close Workspace button.
  • Properties Panel: allow multiple quotes in before & after compile parameters.
  • Table Explorer: added context menu option to view table in Database Explorer.
  • Workspace Explorer: no longer automatically closes missing files.
  • Automatically saves invisible files when closing the Studio/Workspace. Invisible files are open in background (non-visible editors), such as those used by the Navigation Designer. These will now be saved automatically instead of showing as pending changes. Files with pending changes that are open as tabs will still prompt for confirmation.
  • Moving a Web Control horizontally within the flow layout with piColumnIndex not set will place it one column to the left.
  • Find in Files now seeds Code Editor find so that F3 can find the next hit within a file.
  • Custom class can now be specified for fields dragged from DDO Explorer.
  • Improved Studio performance when switching between tabs.
  • Fixed error "LINK ERROR: UNABLE TO OPEN FILE" when compiling a WebApp.
  • After/Before compile no longer strips quotes from parameters.
  • Added option to 'Close Workspace' to the File menu in the Studio.
  • Added option to view a table via Database Explorer to Table Explorer's floating menu.

Compiler

  • Optimizations for the compiler (gaining ~10% compile speed).
  • Fixed linker issue with files that have non-ASCII characters in their file name.

Connectivity

  • Fixed memory leak in SaveRecord for MS SQL.
  • Fixed SQLBindFile error for DateTime columns.
  • Improved EnumerateServersLocal which could sometimes return nothing.
  • Database driver DLLs are now code-signed.
  • Triggers larger than 2,000 characters in SQL Server were not recreated during restructuring.
  • cSQLExecutor: DB2 prepared execution generated "Invalid cursor state" when executed a second time.

SQL Executor

  • Fixed issue where SQLExecutor returned no result set after INSERT of empty result set.

DataDictionary Inspectors

  • Added Ctrl+Q as an accelerator to Windows and Web DD Inspectors (in addition to Ctrl+D). Ctrl+D was fine for Windows (D = debug), but Ctrl+D in browsers opens "Add bookmark". Ctrl+Q avoids that conflict. Focus must be in a focusable object for the inspector to pop up. Ctrl+D is retained for backward compatibility.

Database Explorer

  • Different icons now identify descending or case-insensitive index segments.
  • Error dialog in Database Explorer can now be resized while maintaining layout.
  • Fixed errors when accessing filters in Database Explorer.

Debugger

  • Dragged global or local variables can now be dropped onto the Watches window.

Examples

  • Added a new example in Specialized Components to demonstrate collations using ICU. DemoCollate.vw was added to ShowCollate.src.
  • Adjusted WebOrder examples to use theme colors rather than hard-coded background colors.
  • Fixed RAW file error in Basic Report of Order Entry Example when choosing Print instead of Preview.
  • Installed Examples now use DFLastID as the Auto Increment table.

Installer

  • Fixed case sensitivity issue with path to WorkstationSetup.exe.

Packages

  • Fixed message displayed for client/server version check.
  • UpdatePageTitle now correctly updates psApplicationTitle.
  • Added SetUserPassword function to cWebSessionManager interface.
  • cWebParentCombo did not expand/show list when peLabelPosition was set to lpFloat — fixed.
  • Removed legacy SelectWorkspace.dg and related translation constants (used in DataFlex v8-11).

Registration Program

  • Registration Program can now be resized for better display of license information.

Runtime

  • Fixed sizing issue with a dbView being maximized then reopened.
  • Changed Mod function return type back to LongPtr to fix expression typing issues.
  • Fixed CodeJock Windows 10 and Windows 11 themes that displayed black on black.

Studio (additional fixes)

  • Restrict calls to Reconciling/Rebuilding libraries to processes that update classlist.xml — should help load workspaces faster.
  • Fixed resizing Codejock grid columns in the Windows Designer.
  • The Studio no longer adds a BOM to non-DataFlex source files.
  • Web Designer did not get focus when switching back from Table Explorer — fixed.
  • Studio no longer saves an extra space to the end of 64BitSuffix if that setting is blank.
  • Corrected code placement for Properties when objects are created via a DFO file.
  • Enhanced options to make setting identity column easier.
  • Corrected label in Conversion Wizard for MSSQL from Owner to Schema.
  • SQL Conversion Wizard: selected wrong index for PK when there was a gap in index numbers — fixed.
  • Adjusted Workspace Dashboard style to better accommodate numbers above 100.

Web Controls

  • Fixed rendering issue with cWebTabContainer when navigating back.
  • Labels of cWebList grouping selector are now translated.
  • ActionMode scModeWait was not blocking when inside cWebModalDialog — fixed.
  • Fixed sizing issue with lazy rendering of tabs in cWebTabContainer.
  • Fixed cWebDrawing localization issues with floats.
  • Improved df.defineClass compatibility for non-ES6 custom controls.
  • Fixed cWebTagsForm not showing initial tags.
  • Fixed bug in Dynamic Object Container when using nested dynamic objects.
  • Fixed Dynamic Object Container storing handles in server web properties.
  • Fixed cWebMenuButton JavaScript error and positioning issue.
  • Added peVerticalAlign property to cWebColumn.
  • cWebDynamicObject container now checks for # and $ characters in dynamic object IDs (those are not allowed).
  • Fixed Web Control locking issue exposing itself with cWebForm OnChange event.
  • UpdateSubNodes of cWebTreeView before expand no longer causes error when expanding later.
  • cWebParentCombo should not call Establish_Find_Direction as this might clear the first item's RowId.
  • Escape key no longer closes cWebModalDialog when pbServerOnEscape is true and OnEscape does not close the modal dialog.
  • Fixed uncaught error in dev tools console when removing all groups from web lists.
  • For cWebDDOHost_mixin classes (cWebGroup, cWebCard), Main_DD at runtime now delegates to its parent if there is no DDO structure in the object. This restores backwards compatibility with the Server behavior.
  • cWebCombo required 2 clicks to expand — fixed.
  • WebListExpandPanel swiping did not work when a swipe button was present in the main list — fixed.

FlexTron

  • Improved focus control when using Web Controls in a cDbLocalWebControlHost.
  • DataFlex Reports report generated an error in FlexTron example — fixed.

Web Framework

  • Take pbScroll into account when calculating center panel height; make it work without setting pbFillHeight.
  • Fixed a CSS issue in the Windows-Like theme for cWebMultiSelectList.
  • Fixed a memory leak in cWebDynamicObjectContainer.
  • Fixed cWebService auto-generated documentation parameters.
  • Fixed issue where cJsonHttpTransfer would not send an application/json Accept header.

WebApp Administrator

  • Fixed Web Application Administrator becoming very small.

Documentation Changes

What's New

Tutorials

  • Updated Tutorials to DataFlex 25.0 standards.
  • Replaced many screenshots.
  • Renamed tables and columns in samples to match updated sample workspaces.
  • Added DFLastID system table usage.
  • Removed "Skinning Your Windows Applications" tutorial (no longer recommended).

Tools / Studio

  • Renamed Visual Designer to Windows Designer (help page names kept for compatibility).
  • Clarified WebProperty pages with supported data types.
  • Updated documentation for menus and toolbars in the current Studio.
  • Copied Navigation Designer page from What's New to Studio documentation.

Development Guide

  • Added info on using displayView and displayApp to "The JavaScript Engine" page.
  • Added info and samples for grouping manual web lists to WebList Grouping topic and cWebList class page.
  • Updated JavaScript / Custom Web Control pages with new ES6 syntax after framework refactor.
  • Added "Configurable Widgets" page.
  • Corrected dfdebug references (was vdfdebug).
  • Documentation of Trim_Varchar_Values was completed and added to DB2DRV.INT and ODBC_DRV.INT pages.

Language Reference

  • Fixed indentation of arguments in Include_Text.
  • Added documentation for the Composite command.
  • Added docs for:
  • tWidgetConfigProp.md
  • tWidgetConfigPropSettings.md
  • tWidgetConfigPropValue.md
  • tWidgetDef.md
  • Corrected explanation in DF_DATE_4_STATE_ONLY_ON_PARSE (String and Date types were reversed).
  • Fixed SearchArray reference to SortArray in the BinarySearch paragraph.
  • Completed documentation of Trim_Varchar_Values and associated attributes.

Class Reference

  • Added predefined values to constants in Class Reference (values now appear in parentheses).
  • OnDefineRowCssClass: corrected CSS example and added note about global buffers having the proper record loaded for a data-aware grid.
  • Updated cRegEx doc with latest changes.
  • Added docs for widget classes:
  • cWebWidget
  • cWebWidgetConfigurationWizard
  • cWebWidgetConfigurationWizardStandard
  • cWebWidgetContainer
  • cWebWidgetContainerContextMenu
  • cWebWidgetPalette
  • Added doc for pbUpdateApplicationTitle.
  • Added doc for cPasswordHasher class.
  • Clarified DfDateToSqlDate example differences between SQL Server and other drivers.
  • Updated docs to reflect Main_DD delegation behavior for cWebDDOHost_mixin classes.

Deployment Guide

  • Installation & Environment Guide: fixed naming for DataFlex Windows Client installation EXE; updated to 25.0.

Miscellaneous

  • Fixed a number of typos (including "paramater").

See Also