Release Notes 2026-01-15

Release Notes 2026-01-15

Version Information

OpenEdge Release

Version Information

OpenEdge Release

Version Information

11.7.21, 12.2.18, 12.8.7, 12.8.8, 12.8.9

Release 11.7 #88546@2026-01-15

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 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:

<assembly name="proparse.net, Version=4.0.1.1177, Culture=neutral, PublicKeyToken=cda1b098b1034b24"/>

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 handler1=Consultingwerk.OERA.JsdoGenericService.WebHandler.CatalogWebHandler: /Catalog/{EntityName} handler2=Consultingwerk.OERA.JsdoGenericService.WebHandler.CatalogsWebHandler: /Catalogs/{PackageName} handler3=Consultingwerk.OERA.JsdoGenericService.WebHandler.CountWebHandler: /Resource/{EntityName}/count handler4=Consultingwerk.OERA.JsdoGenericService.WebHandler.ResourceSubmitWebHandler: /Resource/{EntityName}/SubmitData handler5=Consultingwerk.OERA.JsdoGenericService.WebHandler.InvokeMethodWebHandler: /Resource/{EntityName}/{MethodName} handler6=Consultingwerk.OERA.JsdoGenericService.WebHandler.ResourceWebHandler: /Resource/{EntityName} handler7=Consultingwerk.OERA.JsdoGenericService.WebHandler.BusinessServicesWebHandler: /BusinessServices/{OutputFormat}/{PackageName} handler8=Consultingwerk.Web2.WebHandler.SmartMenuWebHandler: /SmartMenu/{MenuStructureId} handler9=Consultingwerk.Web2.WebHandler.SmartMenuStructureWebHandler: /SmartMenuStructure handler10=Consultingwerk.Web2.WebHandler.SmartRoutesWebHandler: /SmartRoutes handler11=Consultingwerk.Web2.Services.SmartViewsHandler.SmartGridWebHandler: /SmartViews/Grid/{EntityName}/{ViewName}/{DetailTemplate} handler12=Consultingwerk.Web2.Services.SmartViewsHandler.SmartGridWebHandler: /SmartViews/Grid/{EntityName}/{ViewName} handler13=Consultingwerk.Web2.Services.SmartViewsHandler.SmartGridWebHandler: /SmartViews/Grid/{CustomViewName} handler14=Consultingwerk.Web2.Services.SmartViewsHandler.SmartViewerWebHandler: /SmartViewer/Viewer/{EntityName}/{ViewName} handler15=Consultingwerk.Web2.Services.SmartViewsHandler.SmartViewerWebHandler: /SmartViewer/Viewer/{ObjectName} handler16=Consultingwerk.Web2.Services.SmartViewsHandler.SmartFormWebHandler: /SmartForm/{FormTemplate}/{EntityName}/{ViewName} handler17=Consultingwerk.Web2.Services.SmartViewsHandler.SmartFormWebHandler: /SmartForm/{FormTemplate}/{ObjectName} handler18=Consultingwerk.Web2.WebHandler.SmartMessageWebHandler: /SmartMessage/{MessageGroup}/{MessageNumber} handler19=Consultingwerk.Web2.WebHandler.GetImageWebHandler: /Image/{FileName} handler20=Consultingwerk.Web2.WebHandler.SmartValueListWebHandler: /ValueList/{ValueList} handler21=Consultingwerk.Web2.WebHandler.SmartAttachmentsWebHandler: /Attachments/{Table}/{KeyValues} handler22=Consultingwerk.Web2.WebHandler.SmartAttachmentWebHandler: /Attachment/{Guid} handler23=Consultingwerk.Web2.WebHandler.SessionContextWebHandler: /SessionContext handler24=Consultingwerk.Web2.WebHandler.ContextPropertiesWebHandler: /ContextProperties/{PropertyName} handler25=Consultingwerk.Web2.WebHandler.ContextPropertiesWebHandler: /ContextProperties handler26=Consultingwerk.Web2.WebHandler.SessionInfoWebHandler: /SessionInfo handler27=Consultingwerk.Web2.WebHandler.FileSearchWebHandler: /FileSearch/{FileName} handler28=Consultingwerk.Web2.WebHandler.ExecuteAblWebHandler: /ExecuteAbl handler29=Consultingwerk.Web2.WebHandler.SmartLanguagesWebHandler: /Languages handler30=Consultingwerk.OERA.RestResource.RestEntitiesWebHandler: /Entities handler31=Consultingwerk.OERA.Swagger.SwaggerWebHandler: /Swagger/{EntityName} handler32=Consultingwerk.OERA.Swagger.SwaggerRestEntitiesWebHandler: /SwaggerEntities/{OutputType} handler33=Consultingwerk.Web2.WebHandler.SmartTokenSecurityCheckWebHandler: /TokenSecurityCheck/{ObjectName} handler34=Consultingwerk.Web2.WebHandler.SmartTokenSecurityCheckWebHandler: /TokenSecurityCheck handler35=Consultingwerk.Web2.WebHandler.SmartEntityTableMappingHandler: /EntityTableMapping/{EntityName}/{TableName}/{UiTypeCodes} handler36=Consultingwerk.Web2.WebHandler.SmartTreeRootNodeWebHandler: /SmartViews/TreeRootNode/{rootnodeid} handler37=Consultingwerk.Web2.WebHandler.SmartTreeChildNodesWebHandler: /SmartViews/TreeChildNodes/{parentnodeid} handler38=Consultingwerk.Web2.WebHandler.SmartSecurityCheckWebHandler: /IsRestricted/{SecurityRealmCode}/{SecurityItemGuid} handler39=Consultingwerk.Web2.WebHandler.SmartFieldSecurityCheckWebHandler: /RestrictedFields/{TableName} handler40=Consultingwerk.Web2.WebHandler.GetImageNamesHandler: /ImageNames
handler41=Consultingwerk.Web2.WebHandler.ExecuteQueryWebHandler: /ExecuteQuery
handler42=Consultingwerk.Web2.WebHandler.TranslationProviderWebHandler: /GetTranslation

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

SCL-5051 New feature implemented that returns a Grid in JSON format

The GridRenderingService class has been updated to support the feature of exporting/rendering a SmartGrid to JSON.

SCL-5095 Updated the Consultingwerk.UltraControls.25.1.20251.100 assembly for OpenEdge 13.0

The Consultingwerk.UltraControls.25.1.20251.100 assembly for OpenEdge 13.0 have been updated to support the new Infragistics Release.

SCL-5096 The GuiStartupManager has been improved to provide a cancellable event just before the StartupForm is loaded.

The GuiClientStartupManager class now provides a new cancellable event "BeforeShowStartupForm" that is raised before the Startup Form is loaded and shown. This feature now allows the user to define cancellable actions, such as showing the 'login screen' or other more informative details before the main "startup-services" is loaded.

SCL-5097 Improved the MenuTreeView Control to not fetch the menu before the RootNodeKey is set.

Prevents loading a large menu structure before the application is ready to do so.

SCL-4980 Updated the usage of ServiceInterface:FetchData within the Consultingwerk.Web2 package.

The Consultingwerk.Web2 package has now been updated so that the calling into ServiceInterface:FetchData to read data from Business Entities, now accesses a Business Entity directly.

SCL-5061 Implemented JSON rendering support for maxLength setting of text fields

The feature for defining the "maxLength" value on "inputsettings" of text fields has now been incorporated.

SCL-5086 Updated the Copyright to 2026

The Copyright year value has been updated to 2026.

SCL-5049 Fixed an issue when ABL GUI FRAME Widget Migration wrongly assumes a field is a Lookup when using the MCP tool.

There were some scenarios where the ABL GUI FRAME Widget Migration tool, incorrectly assumed certain fields as a Lookup attribute when using the MCP tool. The LegacyGuiMigrationTools routine has now been updated to resolve unknown alternative control types.

SCL-5064 Fixed handling of smart links without SourcePropertyName set.

The RenderingHelper class has been altered to support the FormActionTarget link handling between .Net and Angular.

SCL-5078 Fixed Relation Maintenance to Export methods of the RelationBusinessEntity through BusinessTask.

Relation Maintenance has been enhanced to expose methods of the RelationBusinessEntity through a BusinessTask. The two new methods exposed are CreateMissingDatabaseRelations and GetMissingDatabaseRelations.

SCL-5079 Fixed the typos in the English message SFR 336.

The message SFR 336 in English has had the mispelling of "assignments" corrected.

SCL-5081 Fixed the UNBOX Error of System.Drawing.Bitmap during SSEH

The class SmartViewerUiControlHandler has been altered to only "UNBOX" Data Types that are not "BLOB" data-types.

SCL-5093 Fixed the issue of ListQueryExpression Clone\(\) changing the 'OR' into 'AND'.

The issue of using the ListExpression:Clone\(\) ‘OR’ being replaced by ‘AND’ has now been resolved.

SCL-4904 Fixed RESTful entity/Swagger to not expose/support the "/InitialValues" endpoint when canCreate=false.

When the attribute “canCreate” is set to “false” on the Collection Request, the “/InitialValues” endpoint is no longer exposed.

SCL-4988 Resolved the whole-index usage on SmartUser \+ SmartGroup when retrieving user rights.

When instigating a data retrieval within SecurityAssignmentBusinessEntity the usage of the whole-index on SmartUser is performed. In certain scenarios, the whole-index usage was not necessary and now the retrieval of data has been improved accordingly.

SCL-5012 Added the feature 'deprecated' to support Swagger deprecated field on operations.

The feature 'deprecated' has been added to the Swagger Generation, based on the "@deprecated" annotation, which now allows RestMethods to be marked as deprecated. When generated, the method/operation is declared as "deprecated" with the note to refrain from usage.

For further details, go toOpenAPI Specification - Version 3.1.0 | Swagger {: data-inline-card='' } and search for the keyword “deprecated”.

SCL-5013 Fixed codepage conversion issues for longchar and character property values from JSON in AssignBufferFieldFromJson.

There can be instances where certain characters within the JSON are not in the codepage of a buffer field \(either CPINTERNAL for CHARACTER fields, or COLUMN-CODEPAGE for CLOB fields\), which previously raised an exception when performing the assignment to the buffer field.

The CodepageHelper’s ConvertToCodepage method strips any characters that are not in the temp-table field’s codepage.

SCL-5019 Added file references support for database connections in startup.json files.

Improved the reusability of database connections in startup.json files, by supporting the usage of strings or string\[\] as an alternative to the JsonObject in the databases section.

Each string represents a file, with a set of database connections:

"sports2000": "-db C:/Work/SmartComponents4NET/128\_64/DB/Sports2000/sports2000.db"

or a reference to an openedge-project.json with databases, where multiple files can be defined using an array:
"dbConnections": \[
\{
"name": "SmartDB",
"schemaFile": "../DB/build/SmartDB/SmartDB.df",
"connect": "-db c:/Work/SmartComponents4NET/128\_64/DB/SmartDB/SmartDB",
"aliases": \[\]
\}
\]

SCL-5020 Added a new feature for the opening of a .bedgm \(Business Entity Designer\) file.

A new additional feature has been implemented that allows the opening of "Business Entity Designer" .bedgm files via Windows Browse Dialog. The Dialog retrieves all the .bedgm files within the working directory and also contains a 'Quick Search' feature.

SCL-5023 Added new API methods in JsonHelper that return if a JSON property is an Array, Object, String or Null.

The JsonHelper class now contains four new methods \(all the methods have a return type of logical\):

  • IsJsonObject

  • IsJsonArray

  • IsString

  • IsNull

These methods can be used to determine if a JSON property is an Array, Object, String or Null.

SCL-5024 Added feature to setup.xml for the deletion of files.

During the course of a 'product life-cycle', certain features can become deprecated. The "Setup.xml" file has been improved to support the deletion of files \(such as deprecated files\).
Setup.xml now contains two addtional targets:

  • list-deprecated-files

  • delete-deprecated-files

SCL-5038 Updated the session activator to allow the client-principal to be set against > 1 database\(s\).

Within the the application settings/configuration, the authenticationDb property now allows for a comma delimited list of DB's. This now provides the enhanced feature of setting the client-principal on multiple databases during activation on PASOE.

SCL-5050 Fixed DetectLookupControlFrameMigrationPreProcessor to support SELF:SCREEN-VALUE when detecting field names.

The DetectLookupControlFrameMigrationPreProcessor has been updated when analyzing lookup triggers to support SELF references in the FIND statement of the LEAVE trigger.

SCL-5052 Updated all server-side event handlers to receive details about active tab pages.

The "Event Argument" of all server-side event handlers now includes a list of tab folder status details. The details include, "tab folder instance name - InstanceName", "active tab page number - PageNumber" and "active tab page key - PageKey".

SCL-5053 Added support for rendering checkbox labels to the right within Desktop and Web

The DataFieldWebRendering class has been updated to support Check-Box labels to be positioned to the right within the Desktop and Web applications.
If Check-Box attribute "NoLabel" is set to false, then the labels are left-side positioned. If the attribute is now to set false, the labels are right-side positioned.

SCL-5054 Fixed the unexpected error when trying to implement SSEH on BLOB Data Types

The SmartViewerUiControlHandler class has been updated to resolve the Control's Data Bindings. Iterating through the Control's Data Bindings, the values are updated using the "buffer-field \(FieldName\):BUFFER-VALUE". This assignment failed with 'BLOB' data-types, therefore 'BLOB' data-types are subsequently ignored.

SCL-5055 Added data-binding for images to the Image component

The Consultingwerk.Windows.Framework.Repository.Rendering.ImageRenderer now supports data-binding for the “Image” property.

SCL-5056 Added a new feature to Enable/Disable TabFolder pages using SSEH

The SSEH SmartUiControlHandlerBase class now supports the ability to Enable/Disable TabFolder pages, via the new method "EnableDisableTabPage".

For further details on SSEH, see Server-Side Event Handler (SSEH) {: data-inline-card='' } .

SCL-5057 Enhanced setup.xml so that it now sets a version in a SmartDB

The setup.xml file has been updated with a new attribute "setSmartDbVersion" that now updates the SmartDB-Version configuration value.

SCL-5058 Improved StlyeLibraryHelper Error Messages when cannot load an ISL file

The StlyeLibraryHelper class has been updated to provide improved Error Messaging when the loading of files encounters an issue.

SCL-5059 Added new API's in Menu Security Maintenance to restrict/unrestrict all items in a column.

The Menu Security Maintenance now contains three new methods to facilitate the restrict/unrestrict of all items in a column. The methods are: "SetRestricted", "SetUnrestricted" and "SetDefault".

SCL-5060 Implemented support for rendering the Smart Status Bar component

The feature for rendering the Smart Status Bar component to JSON has been now incorporated.

SCL-5063 Improved Toolbar Security Item Lookup

In Security Assignment etc. - after retrieving record from Lookup Dialog, the lookup field shows the Button Name and the security object.

SCL-5067 Fixed the exposing of the endpoint for CreateObjectMasterFromInstanceTask.

Added the method "CreateObjectMasterFromInstance" and the appropriate "@RestMethod" annotations to the RepositoryBusinessTask class. The method is now exposed as an endpoint.

SCL-5068 Fixed the exposing of the endpoint for ReplaceObjectInstance.

Added the method "ReplaceObjectInstance" and the appropriate "@RestMethod" annotations to the RepositoryBusinessTask class. The method is now exposed as an endpoint.

SCL-5069 Added REST resource cache details to SessionInfo.

The SessionInfoProvider now raises an event "ObtainSessionInfoHolder" \(contained within RestResourcesJsonReader\) which nows adds details to the SessionInfo.

SCL-5070 Updated Menu Security Maintenance to remember selection of users and groups.

The Menu Security Maintenance has been changed to remember the list of users/groups in the user profile. When the tool is started and the user/group selection opens for the first time, the list of users/groups stored in the user profile are initially selected.

Important Note: When the users/groups selection dialog is opened again from the toolbar button, the selected users/groups are not coming from the user profile, they are coming from the previously selected \(currently opened users and groups\).

SCL-5072 Updated Toolbar Security Item Maintenance so that Object is now provides a lookup.

The Toolbar Security Item Maintenance now provides the Object field as a SmartBusinessEntityLookup providing the ObjectName and ObjectDescription.

SCL-5073 Updated Security Assignment to support comma delimited values.

When using "Security Assignment" to enter the security item, user and group, it is now possible to enter comma delimited values for multiple records, e.g.,

  • User: mikefe,admin,radu

Using the entered comma delimited values, the appropriate backend records shall be created.

SCL-5074 Fixed the GUI for .NET Toolbar SSEH so that it now call's ShowInputPrompts.

The method HandleUiControl in SmartToolbarUiControlHandler is missing the call to ShowInputPrompts in its base class SmartUiControlHandlerBase.

SCL-5075 Added addition items to the Field Security Item Lookup.

Within Security Assignment etc., after retrieving a record from Lookup Dialog, the Lookup Dialog has been updated to return the following fields "Field Name, Security Key, Object Name".

SCL-5080 Added the feature to set status bar text using SSEH UI Action.

The SSEH UI Action has been updated to allow the setting of the "status bar text". For more details on SSEH, see Server-Side Event Handler (SSEH) {: data-inline-card='' }

SCL-5082 Implemented new variant of the ListLabel API to support UTF-8 to 1252 codepage conversion

A new variant of the ListLabel API has been implemented that now supports the conversion UTF-8 to 1252 codepage.

SCL-5083 Improved the integration of Data-Digger with the Desktop

The integration of Data-Digger with the Desktop has been improved.

SCL-5084 Added a new API CalculatedFieldHelper for calulated field usage within TableBusinessEntity\(s\).

A new and enhance feature has been introduced that can assist in the population of calculated fields during the processes of "ReceiveData" and "CustomizeFetchDataRequest \(data access layer\)".
For more further details, see Using the CalculatedFieldHelper {: data-inline-card='' }

SCL-5085 The Consultingwerk.Utilities.Excel ExcelWorksheetExporter and Importer now use OpenXML Libraries

The Consultingwerk.Utilities.Support assembly has now been replaced to support the utilization of OpenXML Libraries for exporting and importing data within the Consultingwerk.Utilities.Excel ExcelWorksheetExporter and Importer classes.

The Consultingwerk.Utilities.Support exposes the API ExcelHelper, which in conjuction with the new class ExcelUtility can be used for the importing and exporting of Excel data. Further details can be found at ExcelWorksheetExporter and Importer using OpenXML Libraries {: data-inline-card='' }

SCL-5087 Added multiple selection support for SmartMultiSelectionBusinessEntityLookup.

Rendering support for multi-selection SmartBusinessEntityLookup has been implemented based on two new repository attributes:

  • MULTIPLE: true/false → render SmartBusinessEntityLookup or SmartMultiSelectionBusinessEntityLookup control in GUI and “multiple” setting for Angular

  • DELIMITER: delimiter for multiple values

SCL-5088 Added .NET Framework Version details in Session Info.

The .NET Framework Version details has now beend added to both SessionInfoForm and SessionInfoProvider.

SCL-5089 The GUI Client Startup Manager has been enhanced for allowing services to provide startup status.

When starting a a GUI Client, during the startup of services, these services now provide message / information in the progress form.

SCL-5091 Inserted new feature to collapse all/expand all buttons in Menu Security Maintenance.

The Menu Security Maintenance now contains a feature to collapse all/expand all buttons.

SCL-5094 Improved the AppServerStartupManager: DB Connections based on openedge-project.json to follow .vscode/profile.json.

When using openedge-project.json to configure database connections for ABL sessions, profiles based on .vscode/project.json are now supported.