DataFlex 2025 Beta 2 Release Notes
This page lists the specific changes in DataFlex 2025 between Beta 1 and Beta 2.
See What's New in DataFlex 2025 for all new features in DataFlex 2025.
New Features
Regular Expressions Changes
Refactored and Extended API
The cRegEx API has been extended and refactored. To avoid confusion with the database find operations, the method names of Find, FindAll, FindAllGroups, and FindAllExCallback have been changed to Match, MatchAll, MatchAllGroups, and MatchAllCallback. Note that this means that Match now returns the offset of the first match, where 0 means no match.
For completeness, a couple of methods have been created: SubstituteAll and MatchAllOffsets. Several properties to configure the regex behavior have also been added: pbMultiline, pbGreedy, pbAnchored, pbIgnoreCase, and pbUnicodeProperties.
Demo & Test View
The WebOrder sample now contains a view that demonstrates the regular expression engine. It also 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.

Changes in Primary Key Creation
Introduced in Beta 1, automatically creating a primary key during new table creation was configured through a simple checkbox, which defaulted to True. This feature has been enhanced in Beta 2 to offer an option for creating a primary key and to save which table will be remembered during this Studio session.
See Automatic Primary Key Columns for details.
Configurable Name for ID Columns
The automatically created ID columns for the Auto Increment table were using a predefined, fixed name format: ID. This has now been made configurable and can be defined using the Tools menu, Configure Workspace option.
In the Table Editor group, the form Primary key format is available for developers to define the name format for new ID columns using ${TableName}.

Note that column length is limited to 32 characters, and the name of the table will be truncated to fit the combination defined as the format for column names.
Added COMP$TIMESTAMP for Embedding of a Compile Time Build Timestamp
Some developers might want more specific build information of their program builds. Previously, developers might have done this using pre-compilation steps and custom scripts. As of Beta 2, this is no longer needed.
A new Define/Replace is globally available in your programs called COMP$TIMESTAMP, which is defined as the UNIX UTC (number of seconds since 1 January 1970) timestamp as a constant UBigInt. We use a UNIX UTC timestamp to ensure that build timestamps are independent of locale.
While custom calculations are possible depending on your use case, the Date & Time library (link) is available to perform any calculations easily.
Move COMP$TIMESTAMP to ullUnixUTC
Improved Performance When Loading Workspaces
The process to collect information required for view generation involves opening every table in the workspace and retrieving and parsing every DDO associated with them. This caused a noticeable delay when starting the Studio, especially when a workspace had a large number of tables.
This process has been reviewed and improved; it is now done during the initial opening of the Navigation Designer, lightening the load and removing the long wait when opening a workspace.
As part of this review, the “Cannot open table…” errors when a database connection was not successful at the opening of a workspace have also been eliminated.
Composite Classes
The Composite Class is a new object-oriented class type that allows for creating compositions of multiple objects. This means that a Composite can be instantiated like a Class, but the scope in-between Composite and End_Composite is written like an object. This allows for nested objects and procedures, making it very comparable to an instantiable template.
This new class type was initially added to help with the instantiation of multiple objects as a single component, such as a cWebWidget, but can be used in many ways. The Composite is also very useful when dealing with complex Dynamic Objects, as the framework will automatically pick up on the nested objects.
Configurable Object Names for Navigation Designer
When a block for a view was dragged from the palette onto the Navigation Designer, the objects created had a fixed name format: oSelect, oZoom, or oZoomDetail. This has been changed to be configurable in the Studio, enabling developers to decide on the name applied at the object creation.
This option can be configured in the Tools menu, Configure Workspace option. The block of Navigation Designer configurable options on the Workspace Preferences tab now includes three forms – Select, Zoom, Detail – where the name format can be entered using ${TableName} to determine a naming pattern for new objects.
Note that objects already created will not have their names changed to follow the defined pattern.

Improvements and Bug Fixes
Connectivity
- Improved the
EnumerateServersLocalfunction that could sometimes wrongly return nothing. - Database driver DLLs are now codesigned.
Database Explorer
- Fixed errors when accessing filters in Database Explorer.
Examples
- Installed Examples now use
DFLastIDas Auto Increment table.
Navigator
- Fixed: Loading workspace with a large number of tables could be extremely slow.
- Fixed: Loading workspace could display numerous "Cannot open table..." errors when the database connection was not successful.
- Name for generated views is now configurable.
Packages
UpdatePageTitledid not correctly updatepsApplicationTitle.
Runtime
- Fixed CodeJock Windows 10 and Windows 11 themes that displayed black on black.
SQL Executor
- SQLExecutor returned no result set after INSERT of an empty result set.
Studio
- Corrected code placement for Properties when objects are created via a DFO file.
- Enhanced the options to make setting identity columns easier.
- Corrected label in Conversion Wizard for MSSQL from Owner to Schema.
- SQL Conversion Wizard selected the wrong index for PK when there was a gap in index numbers.
- Adjusted Workspace Dashboard style to better accommodate the number of items above 100.
- Start Center no longer shows workspace names in UPPERCASE.
Web Controls
- Fixed
cWebTagsFormnot showing initial tags. - Fixed bug in Dynamic Object Container when using nested dynamic objects.
- Fixed issue with Dynamic Object Container storing handles in server web properties.
- Fixed
cWebMenuButtonJavaScript error and positioning issue.
Documentation
Development Guide
- Updated JavaScript / Custom Web Control pages with new syntax after JavaScript code of the WebApp Framework has been refactored into actual JavaScript ES6 classes.
- Added ‘Configurable Widgets’ page.
Language Reference
- Added documentation for Composite command.
- Added documentation for tWidgetConfigProp, tWidgetConfigPropSettings, tWidgetConfigPropValue, and tWidgetDef.
- Corrected wording in
DF_DATE_4_STATE_ONLY_ON_PARSE, which had String and Date types reversed in the explanation.
Class Reference
- Updated
cRegExdocumentation with latest changes (e.g., new Properties, renamed Functions). - Added documentation for Widget classes:
cWebWidget,cWebWidgetConfigurationWizard,cWebWidgetConfigurationWizardStandard,cWebWidgetContainer,cWebWidgetContainerContextMenu, andcWebWidgetPalette. - Added documentation for
pbUpdateApplicationTitle. - Miscellaneous edits.