Release Notes 2022-01-10

Version Information

OpenEdge Release

Version Information

11.7.9, 11.7.10, 12.2, 12.3, 12.4

Release 11.7 #69106@2022-01-10

Security Bulletin - log4j CVE-2021-44228

Further details: log4j CVE-2021-44228

OpenEdge 12.3 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.3. We hereby declare OpenEdge 12.3 fully supported for the SmartComponent Library as of the release of  November 24th 2020.

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.

.NET Framework Version 4.7

.NET 4.7 is not supported with OpenEdge 11.x, see: Is .NET 4.7 certified and supported for OpenEdge? 

Progress has reported severy issues with OpenEdge GUI for .NET and .NET 4.7: GUI .Net Application crashes after .Net upgrade to 4.7

When using the .NET Framework 4.7, please make sure, you upgrade to OpenEdge 11.6.4 or OpenEdge 11.7.2 or later. Also, it may be required to recompile the application on a PC running .NET Framework 4.7 when applications are also executed on a PC with .NET Framework 4.7.

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: 

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.

OpenEdge 11.7.3 compatibility

During our tests on OpenEdge 11.7.3 we have experienced the following issues: 

  • [SCL-2216] - 11.7.3 Visual Designer disabling properties of ABL user controls

The issue has been resolved by Progress Software with hotfix 007 for OpenEdge 11.7.3.

OpenEdge 11.7.2 compatibility

During our tests on OpenEdge 11.7.2 we have experienced two issues: 

  • [SCL-2007] - Correct support for WebHandler in CcsServiceManager
  • [SCL-2008] - Closing SmartWindowForm causes crash on OpenEdge 11.7.2

We consider it mandatory for customers using OpenEdge 11.7.2 to use at least the release #44166@2017-11-27 of the SmartComponent Library. 

Due to an fix for

  • [SCL-1924] - SmartViewerControl: copy mechanism cannot cope with clob datatype

from Progress Software for in OpenEdge we further recommend all customers to apply this hotfix as well. 

New Versions of Proparse .NET Assemblies (30 December 2018)

We have updated proparse with further enhancements in this release (see Please download the .NET Assemblies ZIP file from our ESD and replace the in your environment with the latest one. The new assembly reference is:

<assembly name=", Version=, Culture=neutral, PublicKeyToken=cda1b098b1034b24"/>

As proparse is used by our Business Entity Generator, this new version of the 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

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=, 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

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

Overview of included tickets


SCL-3580 Fixed issue in Menu Security Maintenance


The Menu Security Maintenance did not allow to change the authorization setting when only a single user or user group have been selected in the user/group selection dialog.

This issue is now fixed.

SCL-3593 Fixed issue with updating model from lower case generated temp-table into Business Entity Designer


After importing a temp-table (or refreshing a temp-table model in the Business Entity Designer from an include file with lower-case ABL keywords, the combo-box with the DATA-TYPE of the temp-table fields did not display the current DATA-TYPE of the field. This was due to the fact that the combo-box is expecting UPPER-case values for the DATA-TYPE and the value was imported as found in the source-code.

This issue is resolved now.

SCL-3597 Fixed invalid reference to GetMessage(0) in SwaggerRestEntitiesWebHandler


The SwaggerRestEntitiesWebHandler class was falsely querying the GetMessage (0) of a caught Progress.Lang.Error in debug code. This has been changed into a reference to GetMessage (1).


SCL-1625 Rename/Move utility for Business Entities


The Business Entity Designer now provides the ability to rename and/or move a Business Entity. This utility can be invoked from the File menu of the Business Entity Designer.

The tool moves or renames the Business Entity and all it’s supporting file into a different directory or performs a remove.

SCL-3544 Business Entity now provides methods to return type of DatasetModel and TableModel


The ModelClassGeneratorPlugin of the Business Entity Designer will now add annotations to the generated Business Entity describing the class name of the DatasetModel and TableModels generated for the Business Entity.

Based on those annotations, the Business Entity now provides two methods:

METHOD PUBLIC Progress.Lang.Class GetDatasetModelType ():
METHOD PUBLIC Progress.Lang.Class GetTableModelType (pcTableName AS CHARACTER):

These methods can be used by developers that need to obtain the type of the Dataset- or TableModel at runtime.

SCL-3582 Support for customized base class of SmartRadDataBrowser through products.i


We have added a new optional switch in Consultingwerk/products.i that allows to specify an alternative base class for the SmartRadDataBrowser. This facilitates the usage of an enhanced (.NET) base class instead of the Telerik RadGridView component.

Customers that intend to make use of this new feature need to set the SmartRadDataBrowserBaseClass in products.i to the name of the base class they intend to use. The base class needs to extend the Telerik.WinControls.UI.RadGridView class itself.

&IF 1=0 &THEN
/* Mike Fechner, Consultingwerk Ltd. 27.12.2021
   SCL-3582: Ability to customize base class of SmartRadDataBrowser */
&GLOBAL-DEFINE SmartRadDataBrowserBaseClass Telerik.WinControls.UI.RadGridView

SCL-3583 Added support for alternative buffer handle to SmartDatasetChildAdapter


By default a SmartDatasetChildAdapter creates a query on the default buffers of a member temp-table of the SmartBusinessEntityAdpater’s dataset.

To support scenarios where a separate buffer either on the SmartBusinessEntityAdapter’s EntityTab3le or multiple different views on alternative temp-tables may be required, the SmartDatasetChildAdapter now supports creating a dedicated buffer for the temp-tables. This new behavior is controlled by the CreatedDistrinctBuffer property of the SmartDatasetAdapter class.

SCL-3592 Implemented optional status display to the Extract Annotations ANT builder.


We have made various improvement to the Annotation ANT builder implementation.

Based on an optional argument displayStatus to extractClassAnnotations ANT macro (defined in Consultingwerk/Studio/ExtractClassAnnotations/extract-class-annotations.xml) the builder can now display the current status/progress of the annotation builder in a floating GUI window.

    <target name="ExtractClassAnnotationsBuilder" depends="init">        
        <extractClassAnnotations directory="."

This will improve the developer experience after large build jobs, when the Annotation builder is processing a potentially large list of build files.

In addition we have been able to make a number of significant Performance improvements to the builder reducing the runtime of of the job for a large number of files to a fraction of the previous execution time.

SCL-3594 RESTful entities now respect non-serializable fields when building record JSON representation


The RESTful entities (RestEntitiesWebHandler) now correctly respect non-serializable temp-table fields when building the JSON response for a request.

SCL-3595 Implemented scl-pasoe and scl-gen support for setups with a Procedure Library


We have modified the scl-pasoe and scl-gen scripts to that they can be correctly executed when a file (generated by the setup.xml script) containing the complete R-Code of the SmartComponent Library is referenced in the project PROPATH.

It is expected that the file is contained in the root location of the SmartComponent Library installation.

SCL-3596 Imported OpenEdge Messages of 12.4 into SmartMessage Table


We have imported the OpenEdge runtime error messages of OpenEdge 12.4 (from the PROMSGS file) into the SmartMessage table.

New Feature

SCL-3477 Added Tooltip Field to SmartFunction and SmartMenu


The SmartFunction and SmartMenu table of the SmartDB and the maintenance programs for those now perovide an additional field that can be used to store a tooltip for a menu item.

SCL-3546 Implemented a time-zone calculator service


We have implemented the new service Consultingwerk.Framework.TimeZones.TimeZoneService based on the Consultingwerk.Framework.TimeZones.ITimeZoneService interface. This interface defines methods to return DATETIME-TZ values based on an DATETIME or DATETIME-TZ value in a different time-zone.

The supported time-zones are defined in the file Consultingwerk/Framework/TimeZones/timezones.json. Alternatively the TimeZonesDefinition property in the .applicationsettings or .restapplicationsettings file can point to a different JSON file defining the time-zones.

SCL-3569 Implemented backend support to cancel JSDO GET requests


When the JSDO adds a client request ID (e.g. a GUID value) to the JSDO GET request arguments like in this example:

The backend now supports the following call to Cancel the JSDO GET request by stopping the PASOE ABL session executing the request:

Instead of 4711 it is recommended to provide a unique GUID value.

The feature is based on the OEMANAGER web app that needs to be deployed to the PASOE instance.

The URL and username/password required for the communication with the OEMANAGER needs to be configured in the .restapplicationsettings file:

    "oemanager": {
        "url": "http://localhost:8820/oemanager/",
        "username": "tomcat",
        "password": "tomcat"

The request to the OEMANAGER is made from the ABL web application deployed on the same PASOE instance.

SCL-3578 Implement REST service for adding SmartFramework default fields to a temp-table in the BusinessEntity Designer for the Web


To support the implementation of the SmartFramework Support web frontend plugin, we have implemented a REST service that, given the current dataset model and the selected temp table name returns the dataset with the SmartFramework default fields added to the selected table:


The default fields added to the temp-table are based on the file Consultingwerk/BusinessEntityDesigner/Plugins/SmartFrameworkDefaultFields.template

SCL-3586 Implemented REST endpoint for providing related tables


To support the Business Entity Designer for the Web we have implemented a REST endpoint to return related tables of a selected database-table as a JSON array:

http://localhost:8820/web/Entities/BusinessEntityDesigner/Tables/GetRelatedTables ?DatabaseName=Sports2000&TableName=Customer

The response of this call is a JSON Array of strings consisting of the database and table name of related tables.

Related tables are determined based on database relations defined in the SmartDB.

SCL-3591 Extended setup.xml script with target to create a .PL with R-Code and a ZIP with other files


We have added another ANT target to the SmartDB upgrade and migration routine that is intended to be executed by developers.

This new ANT target is called createLibrary and creates two files based on a result of a full compilation (calling the setup target with the -Dcompile=full option).


The two files can be used to provide a pre-compiled setup of the SmartComponent Library to developers without the need to provide full source code or without requiring a full compile job from ever developer.

Procedure Library is expected to be copied (or distributed via SCM) to the installation root folder of the SmartComponent Library. The ZIP file is expected to be extracted (or the contents to be distributed via SCM) into the same directory.

The PROPATH for this setup should then be set to (in this order)

  • <install-dir>/

  • <install-dir>

  • <install-dir>/src