Release Notes 2021-03-08

Version Information

OpenEdge Release

Version Information

11.7.7, 11.7.8, 12.2, 12.3

Release 11.7 #65092@2021-03-08

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!

Announcing the SmartFramework ERD Designer

We are announcing the availability of the SmartFramework ERD Designer

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-3302 Fixed Propoarse error when parsing comment ending with ~


We have fixed an issue in Proparse that was causing failing to interpret source code that contains a single line comment ending with the tilde character (~). Proparse was incorrectly interpreting the tilde to join the following line into the single line comment.
This behaviour is fixed now.

SCL-3316 Fixed query processing error when splitting array fields into separate Fields


We have fixed a critical regression in the Query Parser of the Data Access classes. The issue was for instance affecting parsing of queries where field names contained the _ character.


SCL-3322 Implemented web rendering support for grid's disableTextSelection attribute


We have added a new Attribute DisableTextSelection in the repository grid setup and rendering support. This attribute controls is text in the Kendo UI Angular grid can be selected (for copy and paste). As that behavior is limiting the grid's row selection capabilities, we've set the default value to FALSE.

SCL-3323 Angular decimal field spinner improvements


When rendering a decimal field for the Angular UI, we're now rendering the format property to reflect the number of decimal digits defined for the ABL field. So an ABL format with 9 digits, will be rendered as a Kendo UI format of n9.
We have added a new property to the repository called SpinIncrement. This property controls the step size rendered to the Angular text editor component.
The default value is 1. When the value is set to 0, the number of decimal digits of the ABL format string will be used to determine the step size, however, due to limitations of the Kendo UI text box component, the spinner step size will never be smaller than 0.000001. So for an ABL format of 9.99 the step size would be determined at 0.01, for an ABL format of 9.999999999 the steps size would be 0.000001.

New Feature

SCL-2461 Ability to distinguish STOP and STOP-AFTER


We have now introduced the ability to distinguish between different types of STOP conditions. This feature is based on the ABL's capability to treat STOP conditional more like errors using the constructs of structured error handling. See for details.
This new capability is officially available since OpenEdge 12.0 and was introduced as an unofficial tech-preview in OpenEdge 11.7.4.
To avoid compile errors on OpenEdge releases not supporting the new handling of STOP conditions and to avoid regression issues with customer's applications expecting our legacy handling of STOP conditions the new behavior needs to be turned on in products.i - similar to this here:

&IF 1=0 &THEN
/* Mike Fechner, Consultingwerk Ltd. 02.03.2021
   SCL-2461: Support for -catchStop - on OpenEdge 11 */

The new behavior is used, when the CATCH-STOP preprocessor has a non blank value.
Previously when our backend was encountering a STOP condition, the ServiceAdapter and ServiceInterface have been handling those using the traditional DO ON STOP construct and returning an instance of the Consultingwerk.Exceptions.StopConditionException to the frontend. This StopConditionException could not be qualified any further (STOP-AFTER, lock wait timeout, R-Code related issues, DB trigger CRC issue, ...). Especially for the STOP-AFTER condition this was really limiting, as STOP-AFTER is more an application feature used to limit long running AppServer requests rather than any sort of critical system issue.
When the new behavior is used, we will no longer handle STOP conditions on the backend (or elsewhere). The Progress.Lang.Stop derived errors are thrown to the caller and can be catched there. A slight exception here are the Count requests in our web handlers. Those utilize the STOP-AFTER feature to limit long running count requests and return a “magic number” when the result cannot be counted in the desired time.
We have extended the ErrorHelper and LogManager classes to provide functionality to deal with the Progress.Lang.Stop derived instances like with Progress.Lang.Error instances (interestingly, Progress.Lang.Error is just an Interface for errors, whereas Progress.Lang.Stop is a class).
We have also extended the Consultingwerk/Windows/ui-catch.i include file to CATCH Progress.Lang.Stop instances as well and invoke the ErrorHelper to display details from those errors.
We're expecting two consequences for customer applications that enable the improved handling of STOP conditions
- code the explicitly catches Consultingwerk.Exceptions.StopConditionException will not catch anything anymore. The CATCH block for this specific error should be replaced (or an additional CATCH block should be added) with a CATCH block for Progress.Lang.Stop.
- event handlers, that only catch Progress.Lang.Error will no longer catch a STOP condition, as the StopConditionException is implementing this error like all AppError derived instances, but Progress has decided that the Progress.Lang.Stop does not.
As the CATCH-Stop feature was not officially released in OpenEdge 11.7, we do not recommend the usage of the -catchStop 1 Startup Parameter to enable this optional feature on OpenEdge 11.7. While we are aware of any issues, we haven't performed intensive tests with the new feature on OpenEdge 11.7.
We recommend any ABL developer to read the Progress documentation on those described changes about the handling of STOP conditions.

SCL-2961 Added support for trapping STOP Conditions in SmartUnit


SmartUnit now provides better handling of STOP conditions on OpenEdge 12 or OpenEdge 11.7.4 with the -catchStop 1 parameter.
It is now possible to "expect" STOP conditions from Unit Tests by specifying the error class (e.g. Progress.Lang.StopAfter).
When reporting error messages, we're now also distinguishing the various types of STOP conditions.
Customers are recommended to consult the OpenEdge documentation to learn more about the improvements to handling STOP conditions in the ABL.