What's New in DataFlex 2026
DataFlex 2026 introduces the DataFlex Package Manager and df-cli, Web Control Loading Optimizations, Web Control Dark Mode and more.
Changes Between Releases
This page lists all new features in DataFlex 2026.
See DataFlex 2026 Release Candidate 1 Changes for the specific list of changes between Beta 1 and Release Candidate 1.
See DataFlex 2026 Beta 1 Changes for the specific list of changes between Alpha 2 and Beta 1.
See DataFlex 2026 Alpha 2 Changes for the specific list of changes between Alpha 1 and Alpha 2.
See DataFlex 2026 Alpha 1 Changes for the list of bug fixes and improvements new to DataFlex 2026.
Compatibility Notes
For a step-by-step guide to upgrading an existing workspace, see Migrating Existing Workspaces to DataFlex 2026.
Workspace File Formats have Changed in DataFlex 26.0
To support the Package manager, the formats of Studio workspace (.SWS) files and workspace configuration files (.WS files) will be converted.
- After migrating a workspace to 26.0, the Studio will convert your
.SWSfile format from INI to JSON. This will take the workspace paths from theConfig.wsfile and move them into the JSON SWS file. From this point on, theConfig.wsfile is generated and will only be needed in a deployment environment. - If you want to change your workspace paths, you can do that in the
.SWSfile. The next time you open the workspace in the Studio or change the paths via the "Configure Workspace" panel, theConfig.wsfile will be updated.
If you intend to continue working on the same workspaces in older versions of DataFlex, you will need to maintain .SWS and .WS files in the old formats for this purpose.
DfComp and DFCompConsole have been Removed
If you use dfcomp or dfcompconsole, make sure to read about and test their replacement, df-cli. dfcomp and dfcompconsole do not understand the new workspace file format and have been removed in DataFlex 26.0.
Library Order and MakePath
Library order in .sws files is no longer used; the makepath is now driven by your dependency tree. Before 26.0 the makepath was built from your dependencies in declaration order, so large workspaces that grew across many revisions may have relied on that order rather than on a correct dependency tree, and can now require dependency-tree fixes to build. Declare dependencies instead of relying on order — see Package Manager and Migrating Existing Workspaces to DataFlex 2026 for how to resolve makepath issues.
The .sws and .sws.lock Files
DataFlex 26.0 workspaces have both an .sws file and an .sws.lock file. The .sws file always supersedes the lock file and specifies the version constraints for packages; the .sws.lock file records the exact version currently selected within those constraints. Always consider them together and commit both to version control.
Global Package Cache
Package dependencies are deduplicated in a new global cache at C:\ProgramData\DataFlex\Packages\Cache, so packages are not installed side by side repeatedly. The cache auto-prunes weekly once no links remain, and enables offline project creation by falling back to the newest cached version.
cIniFile Class Reimplemented
The cIniFile class has been rewritten. It now does not rely on the old Windows APIs that were originally designed to work with the registry and had some Unicode issues. The cIniFile class is intended to be backwards compatible. Its new base cIniProcessor class does the actual lifting.
Note that when reading or writing multiple values / sections, it is now more efficient to use the cIniProcessor APIs directly as it reads and parses the whole INI in memory and then writes it out again. Use ParseString or ReadFromFile to load ini data, use Stringify or WriteToFile to generate / save the data. Use functions like SetValue and GetValue to read / manipulate values.
Note that the class assumes INI files to contain UTF-8 data and ignores BOM values when reading.
Updated Minimum MSSQL Client Version
The default minimum client version for MSSQL has been updated to version 13.
We had the default set to version 10, the client for SQL Server 2008. We now updated it to use a more recent client version. The new default is set to 13, that comes with SQL Server 2016. That may impact your development as well as deployment environments.
Codejock controls have been updated to the latest released version (24.3.0)
There should be no impact on compiling your programs, but we encourage you to test your Windows applications.
Registration Codes
DataFlex 25.0 (and earlier) registration codes are not accepted to run DataFlex 26.0. New 26.0 registration codes are issued for subscribers.
SerializeObject(cWebObject) Compatibility warning
The signature SerializeObject of cWebObject has changed. This private function is known to be augmented in subclasses. This will now result in compiler errors. Classes can be adjusted to use the new PreSerializeObject or PostSerialieObject messages (which are private messages, but intended to be overridden by subclasses of cWebObject) or the public OnLoad event.
New Features
Package Manager and df-cli
DataFlex 2026 introduces the DataFlex Package Manager together with df-cli, the modern build system and command-line front end for DataFlex. Together they bring dependency management and building to JSON-based workspaces and take DataFlex library management to the next level.
The Package Manager is the dependency-management layer for DataFlex workspaces. It can automatically install libraries from the DataFlex package servers, from Git repositories over HTTPS and SSH, and from local workspaces during development. It manages dependency updates and upgrades across a full dependency tree, HTML include management for web packages (including CDN includes with integrity, crossorigin, module, async and defer attributes), a shared package cache with offline install fallback, and package packing and publishing. Packages are required to declare an SPDX license. Workspaces can define root-level overrides in the .sws file to pin, redirect or otherwise adjust dependency behavior without changing the dependency declaration itself…
df-cli build and df-cli build-file replace dfcomp and dfcompconsole for building outside the Studio, and df-cli run builds a project when needed and launches it directly from the workspace. In the Studio, the Package Manager appears as a panel with Browse, Installed and Updates tabs.
See the Package Manager page for detailed information.
Working with Packages
A few notes to keep in mind when working with the Package Manager:
- Held back versions — when the Studio shows a version as "held back", another package or your workspace has constrained that package to a specific version or range.
- Promoting — "promoting" moves a dependency to your root workspace. Only promote a package when your application depends on it directly.
- Never promote Web UI — Web UI is tied bi-directionally to a specific version of Web UI Server or Web UI FlexTron; promoting it prevents updates, because newer versions are marked as held back.
- Web Control developers — depend on
DataFlex-dev/Web UI#~1.0.0orDataFlex-dev/Web UI#^1.0.0to keep compatibility and the correct inclusion order. - The DfPkg directory — packages shown in the Studio's
DfPkgdirectory are references; they are deduplicated at a lower level and only copied when needed, otherwise linked to save space. - Version control — do not commit
DfPkgor theAppHtml/*, DLL and other files installed by the Package Manager. Commit them only to guarantee reproducibility, under exceptional circumstances.
The WebApp Framework is now a Package!
The WebApp Framework has been taken out of the core product and is now provided as a set of packages. This will allow Data Access to push updates and fixes between releases and let developers decide when they want to update for each individual workspace.
The main packages are Web UI Server for regular WebApps using the WebApp Framework and Web UI FlexTron for Windows Apps. The themes are installed using separate packages like Web UI Material Theme and Web UI Flat Desktop Theme. A helper dialog is added to the Studio that comes up automatically when the old JavaScript Engine is detected in a workspace. It will help with the necessary migration steps.
Migration steps include attaching the packages, cleaning out files from the AppHtml folder and adjusting Index.html. The Package Manager will be responsible for maintaining the script includes inside index.html. For FlexTron, the Package Manager will look for a new file called FlexTronScriptIncludes.html located inside AppSrc to place its script includes. Note that the Package Manager will include a version ref in the script include to overcome caching issues.
Packages that contain Web Controls should mark the Web UI package as a dependency, using a SemVer expression, so the JavaScript Engine is included before your control's JavaScript in index.html. See the Web Control developers note under Working with Packages above for the recommended expression.
Web Control Loading Optimizations
When loading web controls into a browser or when using FlexTron, DataFlex serializes all client web properties for each cWebObject instance into JSON. This process has been optimized by first serializing class properties and then, for each object, only serializing class properties that have actually changed. The serialized classes are then stored in a cache. This greatly reduces the load time of large WebApps and large Views and reduces the size of the HTTP response significantly.
Selection Forms and List Filtering
DataFlex 2026 adds cWebSelectionForm, a selection form for choosing a single value from suggestions. Selection forms can also include action rows in their suggestion popups, such as advanced search or application-specific actions.
cWebList now supports filtering rows by setting psFilter. By default, filtering matches visible columns. Set pbSearchHiddenColumns to include hidden columns.
Web Control Dark Mode
This feature builds on top of the CSS variables introduced in 25.0 and adds dark mode support for the following themes:
- Material
- Flat touch
- Flat desktop
This feature also introduces two new properties to cWebApp/cLocalWebAppHost. Those properties are:
peThemePreferencepeSystemPreference
peSystemPreference is a read only property that reads the system preference of the end user. This will tell you if they have a dark or light mode preference set in their browser. The possible values are spLightMode and spDarkMode.
peThemePreference is what decides which version of the theme the end user will be seeing. This property has three different values:
tpLightMode— lets the current theme run in light modetpDarkMode— lets the current theme run in dark modetpSystemPreference— lets the user's browser settings decide if it should use dark or light mode.
Support for Multiple cLocalWebAppHosts
This feature adds support for multiple cLocalWebAppHosts in one project. Previously it was only possible to have one cLocalWebAppHost in a project. This was due to the WebApp framework using global handles for the WebApp (ghoWebApp), session manager (ghoWebSessionManager), WebResourceManager (ghoWebResourceManager) and the WebViewStack (ghoWebViewStack). Because these objects were being moved to a global handle two of the same objects could not properly coexist in the same project.
To fix this issue the WebResourceManager, WebSessionManager and WebViewStack are now properties on the host object instead of global handles. These handles can now be retrieved in the following ways:
Move (Host(Self)) to hoWebAppMove (ResourceManager(Self)) to hoWebResourceManagerMove (SessionManager(Self)) to hoWebSessionManagerMove (ViewStack(Self)) to hoWebViewStack
To prevent applications that are converting from 25.0 to 26.0 from breaking, global handles will still continue to work. We do, however, intend to remove these global handles entirely in the future. It is recommended to change the global handles in your code to the functions above.
Dialogs in the Drill-Down model
Dialogs (cWebModalDialog) can now be used within the drill-down model. This means that they can be opened using NavigateForward / NavigateBegin / NavigatePath and also take part in the history management and state hash of the WebApp. So when a dialog is opened like this the page can be refreshed or a link can be sent to someone which will restore the state into the dialog. Popup can also still be used to show a dialog without drill-down and history management logic (also within a drill-down application).
We also extended the Navigation Designer with the option to generate modal dialog selects (or lookups). This is part of our effort to improve the drill-down model usability on desktop.
Create New
The create new dialog has been redesigned. The new create new dialog has been built inside of a FlexTron container and aims to help new developers find where they need to be more easily.

Some of the improvements that have been made to make it more accessible:
- Only project types will show when opening the create new dialog in a workspace without a project, steering new users towards creating a project and not something else.
- Most names and descriptions have been changed to make it more clear what a wizard does, some descriptions also link to the learning center to explain certain concepts.
- Added a only show relevant checkbox that only shows wizards usable for the current project type.
- Works in both light and dark mode.
Hardening (Improved Security) of All DataFlex Applications
To continue updating security in DataFlex applications, in 26.0 we focused on runtime application security. What this means is that we turned on hardening settings on the actual DataFlex runtime. This will improve a lot of results for security audits. With version 26.0, DataFlex now successfully passes the https://github.com/microsoft/binskim executable tests. We will continue improving this even further in the future.
Through testing, there as some runtime issues that might arise from our code which we explain below.
-
DataExecutionPrevention (DEP) — A hardware and software security feature in operating systems like Windows that stops malicious code from running in memory areas meant for data. The expected impact of this at runtime is practically none.
-
Control Flow Guard (CFG) — A Windows platform security feature designed to prevent memory corruption attacks by enforcing strict checks on where an application's code can execute. It places tight restrictions on indirect calls, making it significantly harder for attackers to hijack program control flow. Since DataFlex is a programming language/runtime, the chances were already relatively low. Expected impact is practically none.
-
Address Space Layout Randomization (ASLR) — A crucial cybersecurity defense that randomizes memory locations for program components (stack, heap, libraries, executable) to thwart memory corruption attacks like buffer overflows, making it difficult for attackers to predict addresses and inject malicious code, thereby increasing system security by adding unpredictability to exploits.
Through testing it has come to light that some non-conforming 64-bit code might pose issues. We have seen cases where
External_Functioncalls that should have aPointerType parameter. For example, CreateMutexA(Handle(Pointer, Integer, Pointer))was defined as(Handle(Integer, Integer, Integer))because under 32-bit, a pointer fit into an integer. Because we didn't have address randomization turned on by coincidence, passed pointers might have fit into the passed values, while now they are sliced, losing the upper bytes, as now they might be bigger than an integer more often. This means that if you see weird behavior concerningExternal_Functioncalls, be …
Excel Import
This new wizard lets you convert an Excel sheet into a database. This has support for both SQL and embedded database backends. The wizard is capable of automatically detecting the best data type for each column. It is also capable of checking if a field can be used as a primary key. If it is not capable of finding a field that could act as a primary key it will prompt you to automatically create a new primary key field using the DFLastId logic.
You can start this wizard from the 'Other Files & Sources' tab of the Create New dialog (File > Create New in the Studio).

Import Studio Preferences
A new dialog to allow for the reset of the current customizations and selection of preference settings to be imported is available in the Tools menu. Import either from previous versions of DataFlex detected on your machine or from an external JSON file generated by the also new Export Studio Preferences option.

Export Studio Preferences
Generate a JSON file containing settings that may be imported by the Studio to apply your customizations to other systems.
Improvements and Bug Fixes
Package Manager and df-cli
- Security improvements in all layers of the Package Manager.
- SWS and Config.ws files are now updated instead of rewritten from scratch (json style SWS files won't parse comments).
- A sws.lock.sws is now created to lock down on git branches and version expressions on dependencies.
- Held back packages have been formally added. When using an expression or in the case of pre-releases, they are marked as held back. This means they won't show up as updates, as they don't meet the requirements of any other dependencies you are using or otherwise.
- We've made changes in the Studio interface to provide for the metadata and license info.
- df-min and df-max have been removed, this is now handled by the cloud server.
- Package Manager now has dynamic metadata, every undocumented member in the package member is now considered as part of this dynamic metadata.
- Packing now has support for all official DataFlex extensions in the AppSrc folder.
- Added an "includeFiles" and "excludeFiles" property in the SWS file that allows adding additional files to the packing. This is for the case where you wish to add files, but not install them to the root workspace.
- The Package Manager web site now supports deleting of unpublished versions or published versions with no downloads. Later this will need to be done within a 72 hour window.
- Search form in the studio properly backspaces the last character now.
- Made all workspace paths multi-supported except for ConnectionINI, FileList, AppHtml, and IdeSrc.
- Restored Config.ws Home having a backslash and the others with none. Other content is being kept.
- Package Manager now shows the absolute path to local packages
- Studio Package Manager dashboard improvements
- Improved Studio update notifications for packages
- Added
df-cli sbomto generate Software Bill of Materials output in CycloneDX 1.6 JSON format. - Added dependency overrides in
.swsfiles for pinning or redirecting dependencies and controlling package behavior during development. - Added
df-cli runto build a runnable project when needed and launch it directly from the workspace. - Added
-w/--write-errorssupport forbuildandbuild-file. - Added SSH support for Git dependencies, including
git@...andssh://...remotes. - Added CDN-aware HTML includes with support for
integrity,crossorigin,module,asyncanddefer. - Improved Git dependency version resolution when version constraints are used.
package searchnow allows an empty search term and optional filters.- Dependency ordering now follows workspace declaration order more closely.
- Workspace and configuration writing now avoid rewriting files when content has not changed.
- Improved compatibility with legacy INI workspaces by preserving comments and blank lines, normalizing Windows-style slashes on non-Windows systems and improving preferred class handling.
- Improved compiler error reporting when the target executable is in use.
- Fixed
build-fileto return compiler exit codes correctly. - Fixed upgrade handling so transitive dependencies are included in lock processing.
- Fixed lockfile change detection logic.
- Fixed false-positive recovery messages when installing from cache.
- Fixed
--forcebehavior for package installation and cache-check bypass. - Fixed version-constraint forwarding in update and install flows.
- Fixed override handling across update, upgrade, dependency validation and dependency lookup paths.
- Fixed package details deserialization and Web API fallback handling.
New Features:
- Offline installs: when there's no internet connection, installs fall back to cached packages and suggest continuing from the cache.
- Automatic web app handling: df-cli can now stop and restart web apps automatically before building.
- Auto-upgrade on convert: converting a workspace now upgrades it to the current DataFlex version automatically.
- Studio operation queueing: overlapping Studio operations are queued and run in order.
- Transitive dependencies in Studio: the installed-packages list now includes transitive dependencies.
- Flexible push: the push command accepts a full repository/package identifier.
- Update pre-validation: candidate updates are validated before being applied.
- Unattended upgrades: added a
-y/--yesflag for fully non-interactive upgrades. - Request logging: added an option to log all web requests to help with troubleshooting.
Improvements:
- Faster workspace loading through reduced file-system access and lighter parsing.
- Faster failures: when several network requests fail, they now fail immediately instead of waiting through repeated timeouts.
- More reliable login: token refresh is more stable and now tolerates small clock differences between your computer and the server.
- Clearer message when an update check fails because of network problems.
- Clearer messages when a dependency is incompatible.
- Dialogs now stay on top and require a response so they can't be missed; routine message boxes only appear at the application level, reducing spurious pop-ups.
- Greater compiler stability, including more robust handling of compiler output and running multiple compiles in a single run.
- More reliable version comparison.
- Improved handling of hidden packages.
- Package descriptions now show the absolute path to where a package is installed.
- Package information is now displayed regardless of installation state.
- When compiling, if the output folder does not exist, both the folder and the compiled file are created when the compile is successful.
Bug Fixes:
- Fixed Studio freezing when background operations collided with save operations.
- Studio no longer reloads multiple times when the workspace file changes on disk.
- Workspace description changes are now saved correctly.
- Installs and upgrades now reliably detect and report failures.
- Upgrade now checks the correct file and applies the fetched version.
- Failed installs now clean up their dependencies.
- Fixed transitive and local dependency installs, and corrected transitive version comparison.
- Incompatible-version caches are no longer deleted.
- Repair now reinstalls missing cache files.
- Path resolution now correctly handles bitmap and program paths.
- Studio now selects only compatible toolchains.
- Precompiled packages skip the license check.
- Fixed dependency and generated-HTML ordering.
- Archive extraction and installs now detect and report errors.
- Windows process output is now forwarded correctly.
- Build-file now works without a configuration file and passes file suffixes correctly.
- Fixed the ordering of events raised between the CLI and Studio.
- SBOM output now uses hex hashes for CycloneDX compliance.
- Lockfile changes are now surfaced instead of applied silently.
- Installed count now shows the correct number.
- Fixed "LINK ERROR: ... MANIFEST FILE CANNOT BE FOUND IN MAKEPATH".
- Fixed an issue where the machine's date and time diverging too far from the server would make logins invalid.
- The Package Manager keyboard shortcut (Ctrl+Shift+P) no longer opens on the Updates tab by mistake.
- Version information no longer briefly appears and then disappears when selecting a version.
- Search filters are now cleared when the Package Manager is reopened.
- The Install button no longer loses its fill when navigating to the package zoom.
- Linking a manifest and resources is now optional when building.
Compiler
- DataFlex executables are now reproducible. Each compile should create the same result, assuming the content of your application has not changed. Should help with testing builds against anti-virus checks.
Connectivity
- Corrected ODBC_DRV Find on MySQL Client Indexes which could generate error or find wrong record before
- Added functions IsManagedConnection and TableConnectionID to cConnection class to return if a table uses managed connection and retrieve the connection ID of a table
- SQL Server driver disabled triggers will no longer be recreated as enabled during restructure
- SQL drivers Set_Attribute DF_DRIVER_CACHE_PATH will now add backslash when that is missing
- Server-only indexes no longer set a column's Main Index (DF_FIELD_INDEX)
SQL Executor
- Extended SQL Executor with API for querying informational messages - OnSQLInfoMessage which returns String[] psSQLInfoMessages
- SQLExecutor would incorrectly format numeric columns with large size
- Fixed memory leak that could happen when executing an SQL statement via SQLExecutor
Runtime
- BinarySearchArray now triggers an Illegal Datatype Conversion error if called with non-string data types.
- The error "Unable to write to license file" now includes filename
- SearchArray no longer returns wrong element when used with DFSTRICMP
- Fixed hanging condition in cRegEx MatchAllGroups
- Too much memory reserved in 32 bit now raises and out of memory error instead a GPF
CSS Themes
- Long string in WebTagsForm could go beyond its box
- Fixed incorrect color setting in theme.css of Df_Flat_Touch
Database Builder, Database Explorer and Studio
- Clicking the filter by value button should no longer ask for the data to be saved
- Tip of the Day dialog in Database Explorer adjusted to show all text regardless of system DPI
- Added menu option to count records besides Alt+C shortcut key combination
- Improved Count Records processing when filters are applied
- Help now emphasizes shortcut keys and special options available in Database Explorer's grid view
- Data grid no longer resizes columns after window is restored from minimize mode
- Made ABOUT dialogs in tools look more consistent
DataFlex Reports Previewer
- DataFlex Reports Previewer no longer generates error when clicking on report page in FlexTron example
Debugger
- Fixed: Erasing the contents of a local variable in the debugger does not always work
- Fixed: Closing workspace does not stop the debugger
Examples
- WebOrderMobile no longer shows as "Web Order Touch" on browser's tab
- In Order Entry, the FileDateTime function used in DataFlex Reports has been corrected to set dtCreated
- Added cache folder for DataFlex Reports to allow pdf exports in FlexTron example
- Replaced deprecated apple-mobile-web-app-capable meta tag with mobile-web-app-capable
- Examples now make use of server packages.
- Certain links in dark mode have been made more visible.
- All
.swsfiles of example workspaces are now in JSON format. - Fixed a broken link in the Collate example.
- Fixed the regex demo output being wrongly colored in dark mode.
- Fixed problem resolution panel issues in the web samples.
Installer
- Fixed error generated by Client installation when attempting to register Codejock64 on a Windows 32 bits.
Navigation Designer
- Added 'Toggle all' button to Navigation Designer field selector
- Improved Undo for Navigation Designer generated views
- Navigation Designer preserves existing OnClick implementation when creating connections
- Added table lookup lists to the Navigation Designer palette
- Navigation Designer now uses preferred DD class when generating views
- Improved Navigation Designer to not allow navigation paths to be added to invisible objects
- Reviewed Navigation Designer palette to make content more compact
Packages
- DefineExtendedField / DefineAllExtendedFields marked as obsolete in DataDict.pkg as they have been obsolete since version 17.1
- Modified DisplayData and UpdateData in cDbTextEdit and cDbRichEdit to be able to handle more than 255 characters
- Change comment in Datadict.pkg that mentioned field_value_description instead of Validation_Table_Description
- cComCServerStatInfo.pkg has been updated to match the actual definitions in the class
- Added INVALID_FILE_ATTRIBUTES constant missing from Winkern.pkg
- Added missing num_arguments check in VerifyPasswordHash function when pbPasswordHashing was optional
- PrependDynamicObject no longer removes all child objects when inserting the one we are prepending to the list
- Fixed MoveDynamicObjectToIndex not to overwrite passed object argument to be used as new parent
- FlexTron Clear / Clear-All changes would not always be applied
- Fixed Conditional Focus error in Mixed DataEntry view from FlexTron example
- Updated translations in Usr/Language/Espanol/Pkg/Language_WebApp_Espanol.inc
- Corrected cWebView2Browser's prZoomFactor function that would always return 0
- Fixed: No Status_Panel after error in BusinessProcess
- Freshened up the default About dialog's design
Registration
- License activation may now be done through a proxy server
Studio
- Fixed 'An unknown PCRE2 error occurred' error when using Find in Files with regular expression
- Disabling syntax highlighting in Editor configuration while in dark mode would result in black text on black background
- Package Manager replaced Maintain Libraries option in the Studio menu
- C in Connections Ini is no longer cut off in Configure Workspace dialog
- A prompt button to select a Connection INI file has been added to Configure Workspace
- Added a vertical splitter in the Studio DD modeler to better accommodate long field names
- The Studio does not allow changing read-only files anymore. This is to prevent users from force editing DFPkg files
- Fixed Studio not being able to load workspaces that had a minor version (20.1 as example)
- Fixed wizard preview not working in mobile wizards
- When nothing is selected, pressing Ctrl+C in the Studio now clears the clipboard
- Create New descriptions can now be in HTML format, and thus the Studio now sanitizes decription input
- Applied a more unified look throughout the Studio for things that use Web controls, such as Package Manager, Navigation Designer, Create New, Excel Import Wizard
- Added license selector and custom license file selector to Configure Workspace
- Added prerelease form to Configure Workspace dialog (with semver check for accepted version of dependencies)
- Improved Excel Import Wizard design
- Fixed: Creation of cWebColumn via drag-and-drop from Class Palette fails
- Fixed: Error when trying to create a FlexTron project
- Pressing DEL key in HTML Files Include line does not remove the character but the whole line
- Improved Output panel showing when loading a workspace
- Fixed: Running the 'Migrate to Web UI' dialog twice removes theme
- Studio Find in Files did not select a directory by clicking on it
- Optimized Class Palette load time
- Clarified what the Search form in Create New should be used for
- Fixed Flextron tooltip in Create New that showed "Basic Web Project Template"
- Fixed: New views are not added to the menu in Windows projects
- Fixed Output Panel message from Workspace Explorer that shows '\n' in the message
- WebAppUser DD class is now copied to DDsrc folder of workspace
- Studio becomes extremely slow
- Delete Component should respond on cursor keys
- Highlighting found text from Find in Files fails in offset when using tabs
- Fixed Studio window size changing when closing workspace
- The Studio no longer creates new DD files as UTF8 with a BOM when set to create source files as OEM
- Studio did not respect 'open in editor or designer' setting for web components
- Quick Open toolbar now supports mouse scrolling
- Studio shows an error if you try to use a DD that's in the pkg folder instead of the workspace
- Added Ctrl+Click navigation and Ctrl+Hover editor cues to the DataFlex Studio CodeMax editor
- Highlight all occurrences of the current identifier in the code editor
- Add native horizontal mouse-wheel scrolling support to CodeMax editor
- WindowList is now sortable, and its sort order can be reset to the original order.
- Fixed an issue where the output panel would not show the last line in the panel due to the horizontal scrollbar.
- Reloading a workspace due to
.swschanges now properly refreshes the project combo. - The Create New search bar can now search through all categories at the same time.
- Improved the ordering of items in Create New (now alphabetical).
- Canceling a wizard now returns you to the screen you started the wizard from.
- Class creation and creating new files are now always available in Create New, regardless of whether a project is present.
- Improved font size on higher-DPI screens for the Studio help system.
- The HTML file include dialog now shows what it is filtering on.
- The compiler and the Studio now use the same makepath.
- The Studio now shows the correct makepath as df-cli determines it.
- Fixed an issue where Import Studio Preferences could report "Successfully imported" without actually doing anything.
- Fixed Import Studio Preferences sometimes displaying the wrong message at the end of an import.
- Export Studio Preferences now allows the file name to be selected when saving preferences.
- Import Studio Preferences now validates the JSON file and the selected import options.
- Adjusted checkbox labels on the Select and Zoom wizard pages so they are not cut off at certain DPIs.
- The Web UI migration dialog no longer offers the "View index html" option when there is no
index.html. - Added multiple options for when occurrences of specific words are highlighted in the editor: Always on (On), Only when selected (Selection only), or Never (Off).
- Fixed some instances where the Studio could stay in a locked state while installing packages.
- Fixed an issue where the Studio could show an error message box with an error code instead of textual information explaining why the workspace was not opened.
- The Excel import wizard is now available from the Database menu and the Table Explorer context menu.
- Creating a new FlexTron project now adds the FlexTron script includes if they are not already present.
- A project located in a subfolder is now automatically added to the Workspace Explorer.
- Open Containing Folder now reliably opens the correct folder for paths that contain forward slashes.
- Fixed Bitmap/Bitmaps path handling in the Studio workspace configurator.
- Create New now remembers the "Only show relevant" setting between uses.
- Import Studio Preferences no longer errors when no earlier version of DataFlex is installed.
- Various help system (CHM) improvements, including a restored index and corrected link casing.
- The "Remove WebRegisterPath references" option is no longer shown when deleting a Desktop or Windows component.
Tools
- Fixed typo in DFManageVDir help called via /?
WebApp Administrator
- Added a new Open in Explorer option to the context menu in WebApp Administrator to open folder where webapp.exe is located
- Adjusted tab order for objects on Configure New Web Application page in WebApp Administrator
- Fixed: Text is clipped in the Web Application Administrator
WebApp Server
- WebAppServer exceptions now include session IDs and are available in DataFlex code
- Changed event log IDs for adding/removing/starting/stopping webapps
WebApp Framework
- Controls that augment mouse wheel events were adjusted to respond on Firefox the same way as on other browsers
- cWebForm with peLabelPosition set to lpFloat now properly floats the labels when the content is auto-filled by the browser.
- Optimized web framework object serialization for efficiency
Web Controls
- Pressing F9 in an empty cWebForm no longer behaves differently in 25.0 than in 19.1
- Added psTooltip to cWebListSwipeButton
- cWebColumnSelectionIndicator now includes a selectAll procedure
- Corrected displaying of error 4527 "Cannot refind record" when navigating back from zoom to weblist
- cWebWidgetContainer did not fire OnWidgetMoved or OnWidgetResized
- Added support for psCSSClass to cWebApp object
- First character in search form would get removed when using FireFox browser
- Non-scalar properties in Dynamic Object Container no longer generate "Cannot read properties of undefined (reading 'sort')" errors
- Fixed Flextron save behavior when changing columns back to original value
- WebOrderMobile: Widget configuration options on the Dashboard could display two options selected
- Focus can now be changed in callback from a modal dialog
- Shifting focus while waiting for a call with actionmode scModeProgress is now successfully done
- Malformed HTML generated in WebListRowModel.js
- Fixed: piDefaultRowHeights should be a string instead of integer
- Fixed: cWebGrid sends OnFocus while being disabled, causing errors
- Fixed Chrome warning on wrong usage of label element
- Multiselect list displays wrong records after FindFromBottom
- Added pbSizeToCurrentCard property to scale the height of WebCardContainer and WebTabPage dynamically based on the currently active card
- Improved how FlexTron DEOs attach to records.
- Fixed the grid layout designer.
- Fixed errors caused by
OnRemoveTagofcWebTagsForm. - SelectAll now selects all records, not only the currently loaded page.
WebMultiSelectListselection styling is now based on thepbShowSelectedproperty.- Setting
pbOfflineEditingto False for theWebMultiSelectListnow keeps its selection. - Fixed a DDO re-entrant error in
WebList. - Fixed
pbSuggestionsandpbPaged.pbSuggestionssets the SelectionForm to work as aWebSuggestionForm, where you must search for more records.pbPagedgives it pages and adds a "show more". - Advanced Search is now always visible when there is a prompt in the SelectionForm/TagsForm.
cTagsFormnow supports custom suggestions and automatically filters out tags that are already present.- Fixed
cTagsForm/cWebTagsFormlabels remaining visible when the control is set to invisible, and improved enabled/disabled state syncing. - Fixed an error when destroying a view or dialog containing a
cDbTagsForm. - Fixed changed-state handling for manual edits in
cDbTagsForm. - Dashboard widgets now use the native
pbAlwaysShowConfigureButtonproperty; new dashboard samples use it.
WebView 2
- NavigateToPage btNewWindow now works as expected under 32-bits in FlexTron
General
- The DataFlex Reports demo OCX has been updated to 26.
- The EULA and Readme have been updated.
- Fixed an error where pressing Back in the Excel import wizard could throw an unhandled exception.
- Slight design improvements for the Excel import wizard.
- Fixed an incorrect label on the Excel import column-name page.
- Fixed the Excel import wizard sometimes failing to create a data dictionary; it now handles fields longer than 255 characters.
- Fixed
LogErrorEventdisplaying and logging a nonexistent error number as different numbers. - Fixed a crash in the SQL executor when a struct argument was not an array.
- Fixed
SQLSetParameternot passing parameters longer than 4000 characters. - Fixed an access violation when calling Page_Delete on the RichTextEdit control.
- Fixed an out-of-bounds write error in the runtime.
Documentation Changes
- Improved documentation of ODBC Driver 18 for SQL Server support
- Updated default minimum client version for MSSQL to version 13
- Improved doc for "Can't find registration file" error for stand-alone Connectivity Kits
- Added missing Advanced Properties page to Administrator help
- Fixed typo on DDOConstraintFindMeta page
- Enhanced doc for IsFieldCommitted
- Added info on naming correspondence between struct member and query column name to cSQLExecutor page
- Included information about the use of Name in SQL statements on the MetaData tag page
- Removed 'of oCustomer' from all samples that call ServerVariables
- Expanded doc of cWebDynamicObjectContainer members
- Improved information about default button values in ShowYesNo and ShowYesNoCancel
- Sample code in cWebGroup did not match screenshot
- Clarified that Validate_Save sets ERR indicator when returning a non-zero value
- Fixed invalid sample for OnManualLoadData function
- Added note that multiline comments cannot be nested
- Added information about use with ComboForms to DescriptionValidationTable class and related classes
- Added help on GetDefaultView and GetLoginView about use of WebRegisterPath
- pbRequired description incorrectly stated that it only works for DEOs
- pbServerOnUploadFinished stated incorrect default value for cWebBaseFileUpload
- Fixed broken link to IIS Server Variables on ServerVariable page
- Added sample of getting WebService HTTP headers to ServerVariable page
- Replaced Create U_xxx in example with RefClass on cVersionInfo.DoCreate page
- Corrected sample code in RegisterOnCallEndEvent
- Clarified that cWebTreeView.OnSelect does not fire when current item is selected item
- Clarified description of SQLBindFile
- Corrected pbEnabledStatic reference to pbEnabledState to pbEnabled
- SQLStrLike now mentions the use of SQLEscapeStr
- psSQLFilter incorrectly suggested calling GridRefresh
- ChangeEditMode sample was missing call to SetActionButtons
- cHTMLHelp incorrectly suggested using obsolete std_help.pkg
- Added COMP$TIMESTAMP and IS$WIN64 to Predefined Conditionals list on Configure Workspace - Conditionals page
- psSQLMessage used the wrong property name in description
- Added default value for Protect_Key_State
- Enumeration_List was incorrectly used in many documentation pages instead of the correct Enum_List
- Added note to SizeOfArray about the use of -1 to add new element to the array
- Added permission requirements for managing WebApps
- Added directives list to the Compiler Directives page instead of only on individual pages
- Fixed broken link to DFLC on Unicode and Collation page
- Improved description of cWebColumn.piWidth
- Replaced outdated term DataFlex Report Writer with DataFlex Reports
- Replaced outdated term Web Previewer with Web Designer
- Improved doc on SQLExecutor structs and meta tags in cSQLExecutor and Query Tester pages
- cHttpTransfer sample used wrong pageid
- Clarified that RandomHexUUID returns a UUID string formatted with dashes
- Specified that pbFocusFirstOnShow is default behavior for dialogs
- Added rollback information to topics related to Begin_Transaction and End_Transaction
- Updated constant names for peFreezeColDividerStyle
- Updated changed default value of psAcceptTypes
- Added information on collation for embedded DataFlex tables to the Unicode and Collation page
- Fixed broken link to Error Codes on The DataFlex Help System page
- Clarified that psInputMode is for virtual keyboard display and not data formatting
- Removed extra closing parenthesis in NullComObject example
- Improved info on Registration page
- cWebTagsForm.piTagTruncateAt had an incorrect default value
- Added reference to Refill method on OnFill page
- Fixed Typo in NamedValueIndex function
- Fixed typo in BinarySearchArray doc
- Added samples using RefTable to Field_Current_Value and File_Field_Current_Value pages
- Clarified that RefTable can return both table and column numbers
- Clarified use of ParentNullAllowed with constraints
- Updated Field_Option Settings page in Development Guide with information about IsFieldCommitted
- Added note to Library Maintenance page that it has been replaced by Package Manager
- Removed Using the Navigation Designer page from the 25.0 What's New section and pointed links to permanent page for this
- Removed cWebDrawing page from the 24.0 What's New section and pointed links to permanent page for this
- Added return value to SQLExecute and link to New Embedded API doc
- Added 'Key Assignment' as an index entry pointing to AddKeyHandler and On_Key
- Clarified description and added example to show how to add cSQLExecutor to a WebApp on the Embedded SQL API page
- Revised the warning paragraph for pbSelectAllCheckbox
- Improved OnSelectAllRows description and corrected property mentioned from pbServerOnSelectRow to pbServerOnSelectAllRows
- Added return value description to HttpVerbAddrRequest
- Added Activation Information to the Help (in the Installation and Environment Guide)
- Improved Connect function description and added example to its Help page
- Added documentation for Navigation Designer 'Toggle all' button on field selector
- Corrected the description of iErr and examples for LogErrorEvent procedure
- Documented functions IsManagedConnection and TableConnectionID in cConnection class
- Corrected typo in the example code on cWebMultiSelectList page
- Included list of valid component and project types for templates in Configure Create New doc
- Clarified how license files can be included when running the client installation via command line
- Relate doc now states that it uses the parent column's main index to do the relate
- Added a note to the obsolete Inactivate command doc that discusses the NewRecord command
- Updated doc for 'Select Table Conversion Options' page in SQL Conversion Wizard
- Fixed sample code in cWebColumnButton psBtnCssClass doc
- The main FlexTron doc page now explains that FlexTron uses OnDefineScriptIncludes instead of Index.html to load scripts
- Added description of statuses to Read only on Creating Column page of Database Builder doc