Release Notes 2026-08-24
Version Information
OpenEdge Release | Version Information |
|---|---|
11.7.21, 12.2.19, 12.8.9, 12.8.11, 13.0.0 | Release 11.7 #89495@2026-08-24 |
Retirement of OpenEdge 11.7
OpenEdge 11.7 has been retired by Progress Software on April 1st 2025. In consequence we urge all customers still using OpenEdge 11 to upgrade to OpenEdge 12.2 or 12.8 as soon as possible.
We are intending to drop the official support of the SmartComponent Library for OpenEdge 11.7 during the second half of the year 2025. We will then no longer ensure that new features of the framework will be usable with OpenEdge 11.7
Customers that are concerned by this intention, should reach out to us as soon as possible, so that we can discuss about a solution.
OpenEdge 13.0 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 13.0. We hereby declare OpenEdge 13.0 fully supported for the SmartComponent Library as of the release of February 15th 2026.
OpenEdge 12.8 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.8. We hereby declare OpenEdge 12.8 fully supported for the SmartComponent Library as of the release of January 15th 2024.
OpenEdge 12.2 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.2. We hereby declare OpenEdge 12.2 fully supported for the SmartComponent Library as of the release of April 09th 2020.
PASOE / OEMANAGER VS Code Extension
Our first VS Code extension is available in the VS Code marketplace: https://marketplace.visualstudio.com/items?itemName=ConsultingwerkApplicationModernizationSolutionsLtd.oemanager
The extension supports developers with PASOE related routine tasks during development:
checking agent or session status
trimming the PASOE agents
restarting a new agent vai the ping request
Introducing the SmartComponent Library developer forum
Got questions about using the SmartComponent Library? Wish to discuss feature requests with other users of the SmartComponent Library? To facilitate networking in the growing number of SmartComponent Library users and developers, we've added a developer forum on our new home-page. The developer forum can be found at: https://www.consultingwerk.com/support/forum
A login is required to participate in the forum. Don't be shy - create your account today!
Release Notes
Following the release of the OpenEdge 11.7 Release we have completed our testing of the SmartComponent Library on this release of Progress and are proud to announce formal support for the SmartComponent Library on OpenEdge 11.7 with the 2017-04-24 release of the SmartComponent Library. Generally we recommend customers on OpenEdge 11 to upgrade to OpenEdge 11.7 quickly. Starting the 2017-07-14 release we are supporting OpenEdge 11.7 Service Pack 1 (11.7.1).
Starting the 2015-10-09 release the Business Entity Designer will feature a start page with links to most recent release note articles on this site.
With SCL-751 we have adopted native Enums for OpenEdge 11.6. To activate this feature customers must add a definition to products.i. SCL-751 provides details for this.
With SCL-1113 we have modified the templates for SmartWindowForms and SmartTabFolderPages generated from the Business Entity Designer. We have removed the initialization of the viewer controls SmartTableIOState property (value was set to "NoDataSource" within the InitializeComponent method). Customers using their own set of templates should adopt the same fix to their templates.
New Versions of Proparse .NET Assemblies (30 December 2018)
We have updated proparse with further enhancements in this release (see https://github.com/consultingwerk/proparse/releases/tag/4.0.1.1177). Please download the .NET Assemblies ZIP file from our ESD and replace the proparse.net.dll in your environment with the latest one. The new assembly reference is:
|
|---|
As proparse is used by our Business Entity Generator, this new version of the proparse.net Assembly is also relevant for customers not doing GUI for .NET development and require support for parsing new ABL language constructs.
This version of proparse provides additional debug information when errors are thrown from proparse.net.dll.
New Version of the Consultingwerk.SmartComponents Assemly (09 January 2019)
To support the new SmartFilterControl and the "Filter" link between the SmartFilterControl/SmartDynamciFilterControl and a SmartBusinessEntityAdapter or SmartDatasetChildAdapter we have updated the Consultingwerk.SmartComponents.dll. The new Assembly reference is:
<assembly name="Consultingwerk.SmartComponents, Version=2.2.0.49856, Culture=neutral, PublicKeyToken=10603cb31df311b3"/>Customers need to update this Assembly in order to compile the latest releases of the SmartComponent Library.
Hybrid Realm now using IAuthenticationService
We've updated the SmartHybridRealm class used for http authentication to leverage the IAuthenticationService. It is therefor required that for AppServers requiring http Authentication (e.g. REST or Web) the correct IAuthenticationService implementation is registered (using service.xml files).
Customers relying on the previous behavior should ensure that the Consultingwerk.SmartFramework.Authentication.AuthenticationService is regsitered as the IAuthenticationService. This implementation will auhtenticate users against the password stored in the SmartUser database table.
When users with no Login Company set should be able to login using the SmartHybridRealm, it's required to set the Login Company Tennant Domain (similar to the field in the Login Company Maintenance) in the .restapplicationsettings / .applicationsettings, e.g.:
"DefaultAuthenticationDomain": "consultingwerk" |
|---|
This is required as the Hydrid Realm Interface from Progress does not provide the domain name to the authentication method.
Web Handler overview
This is an overview of the web handlers supported by this release
defaultHandler=OpenEdge.Web.CompatibilityHandler |
|---|
UTF-8 based deployments available
Starting August 14th 2016 we ship our source code also as UTF-8 encoded. The ZIP files ending with _utf8.zip contain the source code encoded with that code page. The source code in the remaining archives is still encoded in ISO8859-1. Also on Github there is a new branch containing the OpenEdge 11 based source code in UTF-8.
Related article (Progress K-Base): How to get Progress Developer Studio to save in UTF-8 encoding
New Feature Documentation
Download Link
http://esd.consultingwerkcloud.com/
https://github.com/consultingwerk/SmartComponentLibrary
Overview of included tickets
Service Interface Activate and Deactivate events are now raised while the shared variables are in scope
The procedures enabled through the ServiceInterfaceSupportsSharedVariables preprocessor switch now include the Activate and Deactivate events, so the shared variable definitions are in scope when those events are raised. Previously the events were invoked before and after the shared variables were scoped, which caused runtime errors such as "Shared variable ... has not yet been created. (392)" when an activator assigned session context from an OnAfterActivated handler. Applications using ServiceInterfaceSupportsSharedVariables should rebuild the generated Service Interface procedures; no changes are required in customer code.
TempTableAddedToDesign event now raised by the server-side Business Entity Designer plugin infrastructure, plus a new RowidSourcePlugin
The TempTableAddedToDesign event has been added to Consultingwerk.BusinessEntityDesigner.Common.IBusinessEntityDatasetController, so that shared abstract plugin base classes now work identically for the GUI and the server variant. BatchGenerator raises a new TempTableAdded event once the fields and indexes of a new temp-table are present - in AddTempTable and in GenerateBusinessEntity before the .bedgm file is written and the source code is generated - and BusinessEntityDesignerMcpBusinessTask forwards it as TempTableAddedToDesign in the add_temp_table and create_businessentity MCP paths, so plugin changes to the design are persisted and generated. A new three-fold plugin (AbstractRowidSourcePlugin, RowidSourcePlugin, RowidSourceServerPlugin) ships with the standard plugin packages: for a newly added temp-table without a primary unique index it adds a <DatabaseTable>Rowid field sourced from ROWID(<source buffer>), sets the Keys phrase to KEYS (ROWID) and creates a primary unique index on that field, demoting any primary non-unique index inherited from the source table. Customer classes implementing IBusinessEntityDatasetController must declare the new event.
Keys phrase in the Business Entity Designer Source Buffer Keys context menu now respects the configured keyword casing
The "Key Fields" and "ROWID" context menu functions on the Source Buffer Keys field of the Business Entity Designer previously hard-coded the upper-case phrases KEYS (ROWID) and KEYS (<fields>) into the design, so the casing survived into the generated DataAccess class even when KeywordCasing was set to LOWER. SetKeysFields and SetKeysRowid in Consultingwerk.BusinessEntityDesigner.UI.MemberTableViewerControl now build the phrase through BusinessEntityGenerator:CaseKeywords, applying the casing to the keyword literal only and never to the substituted buffer or field names. Generated code is now consistently cased without relying on the KeywordCasePlugin or KeywordCaseServerPlugin post-processing the written file. No changes required in customer code.
Generated static query request classes now use prettified table names in their class names
The AbstractStaticDataAccessQueryPlugin now prettifies the source table name when building the name of the generated request class, so generated classes are named FetchCustomerByAccountRequest instead of FetchcustomerByAccountRequest. In addition, an optional static property on the generator class allows the EntityClassName of the model to be used as the source of the table part of the generated class name; like other static generator configuration it can be assigned through the JSON startup files. Existing generated classes are not renamed automatically, because case-only renames are problematic on Windows and in several source control systems. Developers who want the new naming should regenerate the affected request classes.
Telemetry Service output folders now support environment variables and tokens
The Telemetry Service now resolves tokens such as ${env.MLSLOG} in the outputDirectory and pendingRequestsOutputDirectory properties of the telemetry.conf configuration file. Previously the folder assertion during initialization of the TelemetryService raised an error at agent startup when these properties contained tokens, because the raw, unresolved value was validated. Tokens are now resolved before the folder is validated, so agents start up normally with environment-variable based telemetry output folders. The structure and supported properties of the telemetry.conf file are documented on the Consultingwerk Telemetry Toolkit page in the documentation; no changes are required in customer code.
Quick-Launch / Command Palette added: global action search via Ctrl+Shift+P
A global, keyboard-driven Quick-Launch palette is now available in SmartComponent Library desktop applications. Ctrl+Shift+P opens a search dialog that queries several pluggable result sources at once - menu functions, the enabled Ribbon and toolbar buttons of the active SmartWindowForm, its folder pages, the other open windows, and application data such as Object Master, user and customer records - using VS Code style fuzzy matching with acronym support, and ranks results by match quality and by how often the user has launched them from the palette in the same form context. The new classes are QuickLaunchDialog, QuickLaunchShortcutHandler, QuickLaunchSearchEventArgs, QuickLaunchResult and QuickLaunchUsageTracker in Consultingwerk.Windows.Framework.QuickLaunch, together with the shipped providers for menu, Ribbon, toolbar, folder pages, windows, Object Master, user and customer. Applications can contribute their own sources by implementing IQuickLaunchResultProvider - which extends Ccs.Common.IService, so initialize() and dispose() handle the subscription to the static search event - and registering the class with the ServiceContainer; no change to the palette dialog is required. Existing menu, Ribbon, toolbar and folder page behaviour and the existing permission checks are unchanged.
Quick-Launch data searches are now combined into a single backend call by a reusable Entity Search component
The Object Master, user and customer lookups of the Quick-Launch palette no longer make three independent backend round trips per keystroke; they are executed together in one call. The new Common Component Consultingwerk.Framework.Search - with EntitySearchQuery, EntitySearchQueryList, EntitySearchRow, EntitySearchCache and the IEntitySearchService facade on the client, and Consultingwerk.Framework.Server.Search.EntitySearchBusinessTask on the server - runs any number of Business Entity queries in a single InvokeTask, transported in the input-output ProDataset dsEntitySearch and returning the requested field values as flat rows. The task fetches through ServiceInterface:FetchData, so the existing IRequestAuthorizationProvider permission checks still apply, and a failing query is reported on its own request record instead of aborting the whole batch. A client-side result cache (60 seconds by default for Quick-Launch queries, off by default in the component) answers repeated searches without any backend call. The component is independent of Quick-Launch and is also exposed as a REST method, so any screen or the web frontend can batch entity searches the same way; Quick-Launch result providers opt in by declaring a QuickLaunchBackendQuery through poEventArgs:AddBackendQuery instead of running their own query, and may implement IQuickLaunchBackendResultProvider when they need to build results themselves. Providers that do not opt in are unaffected.
Fixed: Registering a second worksheet no longer produces a damaged workbook
The ExcelHelper methods CreateWorksheet and CreateWorksheetPart in Consultingwerk.Utilities.Support appended a new sheets element to the workbook on every call and reused sheetId 1, so a workbook with more than one worksheet was invalid and Excel reported damaged content. The helper now reuses an existing sheets element and assigns the next free sheetId. Public signatures are unchanged; the corrected assembly version 2.3.0.0 has to be downloaded into the Assemblies folder, no changes required in customer code.
Excel spreadsheets can now be created from scratch, without a template workbook
ExcelUtility gained a creation API so exports no longer require a template .xlsx file to be shipped and copied: the composite CreateSpreadsheetDocument (file name, sheet name) plus the fine-grained steps AddWorkbookPart, AddWorkbookStylesPart, AddWorksheetPart, CreateWorksheet and CreateSheet, which can also be used to build multi-sheet workbooks or to supply a custom stylesheet. Created workbooks receive a minimal schema-valid stylesheet; header formatting remains available through UseStylesheet. ExportWorksheetArguments has two new properties, CreateWorkbook and OverwriteExistingWorkbook - set CreateWorkbook to true and the exporter creates the target workbook itself, using WorksheetName as the sheet name. Existing template-based exports are unaffected.
Excel exports can now automatically size columns to their content
ExcelUtility gained an AutoSizeColumns method that computes the column widths from the exported cell content and inserts a schema-valid cols element before the sheet data, replacing an existing one in template workbooks. ExportWorksheetArguments offers three new properties to control it: AutoSizeColumns (opt-in, default false), AutoSizeMaximumDigitWidth (default 7) and AutoSizePixelPadding (default 15). Character counting now resolves shared strings, reads the bold flag from the actual stylesheet and measures date and datetime cells by their display format rather than their serial number. Set AutoSizeColumns to true on the export arguments to use it; existing exports are unchanged.
Fixed: Date and datetime cells in Excel exports no longer use the header font and fill
With ExportWorksheetArguments:UseStylesheet set to true, the generated stylesheet assigned the header font and the header row background to the date and datetime cell formats, so every date value in the data rows was rendered bold and highlighted. The two cell formats in ExcelStyleSheetUtility now use the plain data row font without a fill, consistent with the template path. No changes required in customer code.
Fixed: Excel export now writes a header label for every exported column, regardless of the template header row
When exporting into a template workbook, ExcelUtility only filled the header cells that already existed in the template row, so column labels beyond that were silently dropped, and a template row with more cells than exported columns could raise an IndexOutOfRangeException. Missing header cells are now appended to the template row using the style of the last template cell, and surplus template cells are left untouched. No changes required in customer code.