Release Notes 2023-11-19

Version Information

OpenEdge Release

Version Information

11.7.9, 11.7.10, 11.7.11, 11.7.12, 12.2, 12.6, 12.7 CQC

Release 11.7 #78138@2023-11-19

Security Bulletin - log4j CVE-2021-44228

Further details: log4j CVE-2021-44228

OpenEdge 12.7 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.7. We hereby declare OpenEdge 12.7 fully supported for the SmartComponent Library as of the release of  May 10th 2023.

OpenEdge 12.6 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.6. We hereby declare OpenEdge 12.6 fully supported for the SmartComponent Library as of the release of  October 4th 2022.

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-4257 SmartViewerControl now only checks for Handle in DisableFields after OnLoad


We’ve improved the checks if a viewer has already been fully loaded in the DisableFields method. In some cases error messages have been raised from the DisableFields method. We’re now checking if OnLoad has already been executed before querying the Handle property of the SmartViewerControl.


SCL-4067 ABL Legacy Browse Migration now detects primary table for Business Entity based on order of tables in Browse widget


The ABL Legacy Browse migration Form now detects the primary table of a browse query based on the order of the tables in the database query. Previously the user has been prompted to select a table from the list of query tables as the primary database table.

SCL-4161 Ability to define and set NEW SHARED variables from ServiceInterface calls implemented


The Consultingwerk.OERA.ServiceInterface calls to retrieve and save data (FetchData and SaveChanges), to invoke tasks and methods (InvokeMethod, InvokeTask and InvokeTask2), and to retrieve metadata (FetchDataset) are OOABL methods that call other OOABL methods on a Business Service.

Since the ABL does not allow defining, setting or otherwise working with shared variables in classes, applications that need to set shared variable values can now define a ServiceInterfaceSupportsSharedVariables preprocessor in Consultingwerk/products.i to use an intermediary procedure for these operations. Using a .P allows developers to set shared variables prior to calls being made on the Business Service. These procedures use include files that must be created to define and set shared variable values. The include location is provided by the ProSIcustomIncludeDirectory preprocessor that must be defined in products.i.

||*Service Interface Operation*||*Procedure Name*||*Custom Include Name*||

SCL-4228 Allowing to create field security items from repository designer


Developers can now use the Repository Object Master Designer to create security fields. When selecting a field in the Viewer Designer, the tool “Create Field Security Item” can be used to create a security field definition for the selected field.

SCL-4244 New requestParameterSchemaType and responseSchemaType arguments for RestMethod annotations


To prevent the OOABL class names of parameters and return values used in invokable methods from appearing in Swagger documentation, the new requestParameterSchemaType and responseSchemaType annotation arguments have been implemented as part of the Swagger generation. These attributes allow developers to provide an alternative value to be used in the Swagger schemas.

For more detail, see

SCL-4247 SmartDB upgrade and migration utility now displays framework version


The SmartDB upgrade and migration utility now displays the SmartComponent Library version when executed.

SCL-4259 DatasetModel/TableModel CanFind Method now supports UseInterfaceEnum:ServiceManager


The DatasetModel/TableModel method CanFind now supports the UseInterface value of UseInterfaceEnum:ServiceManager.

SCL-4260 Ensuring begin-request.i is included in all SmartWebHandlers before calling ServiceInterface:Activate()


We have not added be begin-request.i Include file to all of our Webhandler implementations. This ensures proper monitoring of all requests using the Telemetry Toolkit.

SCL-4261 Error message when connecting DB from AppServerStartupManager now includes database name


The error message raised when the AppServerStartupManager fails to connect to a Database now includes the database name.

SCL-4265 JsonSerializable:AddSerializableProperties (Class) now detect IJsonSerializable properties


The JsonSerializable:AddSerializableProperties (Progress.Lang.Class) or JsonSerializable:AddSerializableProperties () now detect serializable properties based on the IJsonSerializable Interface and no longer relying on the actual JsonSerializable class. This allows to detect properties defined as Interface types when the Interfaces inherit from the IJsonSerializable Interface.

SCL-4266 Implemented TabOrderChanged event in TabOrderManager


We have added the TabOderChanged event to the TabOderManager / TabOrderMessageFilter. THe event is raised whenever the TabOrderManager manipulates the tab order in a Form or ABL window.

SCL-4268 Fix typo in method name RefreshAfterRejectTransaction of SmartBusinessEntityAdapter and SmartTempTableAdapter


We have resolved a typo in the name of the method RefreshAfterRejectTransaction of the SmartBusinessEntityAdapter and SmartTempTableAdapter classes. The method was previously called RefreshAfterRejectTranscation. The old method is kept for backwards compatibility but is considered deprecated.

SCL-4269 Fixed typo in property name DesignerHostLoading or SmartComponent


We have fixed a typo in the name of the property DesignerHostLoading or SmartComponent. The property previously was called DesingerHostLoading.

SCL-4270 Swagger documentation now properly documents properties defined as Enum types


The Swagger documentation now properly documents Enum properties or parameter and return object types.

SCL-4271 RestServerSessionActivator now supports customization of retrieval of the SESSION-ID


The RestServerSessionActivator now supports the customization of how the SESSION-ID property is retrieved from the client-principal. In situations where the client-principal is issued based on an OAuth2/JWT Token developers can override the method GetSessionId() in a derived type to return the SESSION-ID value based on claim in the JWT token.

SCL-4272 Implemented WebClientPackageHelper support for Batchmode Progress


The WebClientPackageHelper now supports to be executed in Batch-Mode. This allows to use the tool in a PCT/ANT/Jenkins based deployment script.

SCL-4273 ProparseTreeViewForm:OpenNewEditor now supports LONGCHAR


The OpenNewEditor method now supports LONGCHAR values with the contents of the editor to be opened. The INSERT-STING method of the underlying ABL EDITOR widget only support CHARACTER values. For longer texts, we’re now writing the LONGCHAR to a temporary file and use INSERT-FILE instead.

SCL-4274 New GetLogicalPluginSetting() method in BusinessEntityDesignerSettings


A new GetLogicalPluginSetting() method was added to the Consultingwerk.BusinessEntityDesigner.BusinessEntityDesignerSettings class, due to a typo in the GetLogilalPluginSetting() method name. The misspelled method is deprecated and should be replaced with the correctly-spelled method.

SCL-4275 Added WriteError (Stop) methods to LoggingStream


We have added a variant of the WriteError method based on a Progress.Lang.Stop instance to the LoggingStream implementations.

SCL-4276 Improved conversion of multi-table browsers to Business Entity


We have improved the result when converting browsers based on a query with multiple (database) tables. The improvements are in the area of converting calculated fields.

SCL-4280 Allow to return HTTP headers using the RestMethodResponse class


The RestMethodResponse type now supports returning an array of HTTP Header values from a RESTful method.

SCL-4282 Fixed representation of ABL-Class EXTENT properties in Swagger


We have resolved issues with representing ABL-Class EXTENT properties in Swagger. Previously those properties have been documented as a single object value, not an array.

SCL-4283 RESTful method invocation: Support populating parameter object mixed from query string and JSON payload


So far the parameter object to a RESTful method invoke is either populated from the query string or the request payload.

We now support a mix, to support e.g. a POST to an URL with query string parameters as well as JSON payload.

The JSON payload has preference over properties from the query string.

SCL-4284 New propertyFrom attribute in a RestMethod annotation indicates how proeprty values should be provided


A new propertyFrom attribute is available in the RestMethod annotation that provides the Swagger documentation with an indication of how parameter class property values should be provided by a client. This attribute contains a comma-delimited list of values indicating how property values for a parameter class should be provided. Each entry has the format <property-name>: query . A value of _query_ indicates that a query string is used. A value of _hidden_ indicates that a value for that property is not expected to be sent by a client.

See for more details.

SCL-4285 Implemented support for rendering of check-boxes with Labels on the Left of the checkbox


We have implemented support for rendering checkboxes with labels on the left or on the right of the Checkbox Control now.

Previously the NoLabels attribute of a MetaDataField instance controlled if the checkbox was rendering a label on the left hand side of the actual UltraToggleBox control in addition to the text that’s rendered as part of the UltraToggleBox control. Now the NoLabels Attribute of the MetaDataField has the following impact on the representation of the text in the Label attribute of the MetaDataField.

NoLabels = TRUE: The checkbox is rendered with the Label text rendered by the UltraToggleBox (right of the checkbox)

NoLabels = FALSE: We render an additional UltraLabel control on the left hand side of the checkbox and the Label text is not visualized by the UltraToggleBox

In addition, when NoLabels is set to FALSE the LabelOffset property allows to align the label with the label of other controls in a Viewer. The LabelOffset property for LOGICAL fields behaves the same as the LabelOffset property for other fields on a Viewer.

SCL-4286 Service Manager GUI now integrated into SmartFramework GUI application


We’re providing a menu function called “Monitor Business Services”. This menu function launches the screen that so far has only been available from the Business Entity Tester. This screen allows to monitor and to shut down a single or all running Business Services.

SCL-4287 Implemented support for mapping Enum members to custom strings


We have implemented the ability to map custom string values to Enum members using an Annotation in the Enum:

@EnumMapping (MemberName="PartiallyShipped", mappedCharacter="Partially Shipped") .
ENUM Demo.OrderStatusEnum :
    DEFINE ENUM Ordered Shipped PartiallyShipped .

This mapping is currently supported in the TableModel when using the Enum as a custom field type. The mapping allows to use an Enum to map database character values with values not supported as an enum member name, e.g. space characters etc..

To use this feature it’s required to extend the generation of the .annotation files to Enums. The mapping is implemented by the


service type.

SCL-4288 Added support for comparing an object master in repository with a .smartrepo file to the object master designer


We’ve added a new menu item to the File menu in the Object Master Designer. This tool allows to compare the currently opened object master to a .smartrepo file on disk.

SCL-4289 SwaggerRestEntitiesWebHandler now caches swagger.json


The SwaggerRestEntitiesWebHandler now caches swagger.json to improve the performance when opening the Swagger documentation of a service backend.

SCL-4291 Telemetry Toolkit now supports logging of pending requests


The Telemetry Toolkit now supports logging of pending requests. When the pendingRequestsOutputDirectory property is set in the telemetry.conf folder a single JSON file with the details gathered at the beginning of a request is created when a request starts. This file is deleted when the request finishes. The files in this folder allow to inspect (long) running AppServer calls or calls that have crashed severely.

New Feature

SCL-3903 New file upload endpoint at /web/UploadFiles


A new webhandler Consultingwerk.Web2.WebHandler.FileUploadWebHandler is available to handle file uploads.

Request format

The files must be uploaded using a PUT or POST request as standard {{multipart/form-data}} , with at least one part. This part contains the file being uploaded; the file name must be priovided using a {{Content-Disposition}} header with a {{fileName}} or {{fileName*}} parameter (per [ HTTP/Headers/Content-Disposition | HTTP/Headers/Content-Disposition ]). There may be multiple files uploaded in a single request. Each should have their own part. Filenames are not unique, although this should be avoided.

An additional, optional, part contains context for the upload. This part should have a {{Content-Disposition}} header with a {{name=context}} parameter value. The data in the part must be JSON; the structure and content of this context data is left to the application.

Processing uploads

The uploaded file(s) and context are made available to applications via a static event named {{Consultingwerk.Web2.WebHandler.FileUploadWebHandler:FileUpload}} . The event args object for this event contains the uploaded file(s) and context. The files are provided in binary format, as instances of Ccs.Common.Support.IMemptrHolder. The file contents are available via that object’s {{Value}} property. The wrapped {{MEMPTR}} values are expected to be cleaned up by the wrappers (typically OpenEdge.Core.ByteBucket or OpenEdge.Core.Memptr).

SCL-4251 New Business Entity Designer plugin to import temp-table schemas from Swagger documents


A new Business Entity Designer plugin


has been added to the product. This plugin allows to import a temp-table to a Business Entity based on the JSON schema found in a provided Swagger file.

SCL-4258 Implement Angular rendering support for the "allowDrag" property in the SmartGrid


We have implemented rendering support for the allowDrag property of the SmartGrid in our Angular UI.


SCL-4262 products.i now includes the UsePLOforSmartBusinessEntityAdapterSaveChangesParameter preprocessor


The products.i.template file shipped with the SmartComponent Library releases now includes the UsePLOforSmartBusinessEntityAdapterSaveChangesParameter switch. The switch was introduced in SCL-3845 “ServiceAdapter:SubmitChanges should support native Serialization of the SaveChanges parameter object” to avoid a breaking-change for applications expecting the SaveChangesParameter to be ISerializable instead.

As products.i.template is just used to support new applications we are not seeing the need to deactivate this switch by default.

SCL-4263 Fixed storage allocation for all SmartDB tables and indexes


Some SmartDB tables and indexes have not been allocated in the right storage area according to the CCSBE spec. This has been resolved now.

SCL-4264 Index improvements on SmartSchedulerJobStatus database table


We have improved the index usage on the SmartSchedulerJobStatus database table in the SmartDB by modifying the existing indexes.