Release Notes 2026-05-03

Release Notes 2026-05-03

Version Information

OpenEdge Release

Version Information

OpenEdge Release

Version Information

11.7.21, 12.2.19, 12.8.9, 12.8.11, 13.0.0

Release 11.7 #89109@2026-05-03

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:

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

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

"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

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

Tooling commands scl-gen, scl-sng and related tools now supported in VS Code project structures

Previously, the SmartComponent Library tooling environment was derived exclusively from the .propath file of PDSOE projects. The tooling now recognizes VS Code project structures as well, so developers working in VS Code can use scl-gen, scl-sng, and related code-generation commands without a PDSOE setup. Existing PDSOE-based workflows are unaffected.

Repository Grid: Server-Side Event Hook (SSEH) support added for GUI for .NET

The Repository Grid in GUI for .NET now supports the Server-Side Event Hook (SSEH) infrastructure on par with the support already available in the Angular and Web2 front ends. Customer developers can subscribe to grid-level SSEH events to react to data and lifecycle events on the server side when running the Repository Grid in a GUI for .NET application.

Combo editor support added to input prompt dialogs in SmartSingleEntityHandler and Business Entity Validation

Input prompt dialogs created via the Questions API now accept combo editors as a PropertyType, allowing developers to present users with a predefined list of selectable values. The capability is wired into the SmartSingleEntityHandler (SSEH) and the Business Entity Validation flows. Developers configure the combo editor directly through the existing Questions API parameters; no additional plumbing is required.

Fixed: Unnecessary backend count requests no longer issued when the front end already received all records

When a SmartBusinessEntityAdapter on a tab page actively performs RetrieveData requests and receives all rows in a single response (BindingSource Batching is FALSE and NextContext is empty), the record count is now derived from the BindingSource count after RetrieveData instead of issuing a separate count request to the backend. This avoids redundant round-trips in forms such as the attribute maintenance form. No changes required in customer code.

SSEH: AfterRetrieveData event of data sources now supported for MetaDataSource rendering in GUI for .NET and Angular

The Server-Side Event Hook (SSEH) framework now supports the AfterRetrieveData event of data sources during MetaDataSource rendering in GUI for .NET and Angular front end clients. The event payload includes the data source name, the Business Entity name and tables, the query string, and an available flag indicating whether the query returned data. Customer developers can subscribe to this event in their server-side hook implementations to react after a data source has been populated.

SSEH viewer and grid field events now include the row update state in the event payload

Server-Side Event Hook (SSEH) events for fields in viewers and updatable grids now include the row update state ("add", "copy", or "modify") as part of the event payload. This allows server-side hook implementations to react differently depending on whether a row is being newly added, copied from an existing row, or modified by the user.

OERA REST: Invalid request input now returns 400 Bad Request instead of 500 Internal Server Error

The RestEntitiesWebHandler in the OERA REST stack now wraps input processing (URL parameters, request body parameter object and dataset, header values) in try/catch blocks and translates failures into a new Consultingwerk.OERA.RestResource.BadInputException with the original errors preserved as additional error information. The new exception class implements IHttp400Error so that the response correctly returns HTTP 400 Bad Request with the original error messages, instead of HTTP 500 Internal Server Error as before. Customer developers do not need to change their code; existing REST endpoints automatically benefit from the improved error mapping.

Fixed: eSmartAttribute temp-table now consistent across AttributeBusinessEntity and AttributeValueBusinessEntity

The eSmartAttribute temp-table definitions in Consultingwerk\SmartFramework\Repository\Class\AttributeBusinessEntity.bedgm and Consultingwerk\SmartFramework\Repository\Class\AttributeValueBusinessEntity.bedgm have been consolidated so that the fields and tables are now identical between the two Business Entities. No changes required in customer code.

Web2: New GridViewManagerWebRendering service for the GridViewManager repository object

Added a new Web2 form component renderer at Consultingwerk/Web2/Services/Rendering/FormComponents/GridViewManagerWebRendering.cls for the GridViewManager repository object. The class implements IFormWebRenderingComponent and produces deterministic JSON containing componentType, componentOptions (objectName, verticalStretch, context, gridInstanceName), and the common Web settings (settings.style, settings.classList) plus help rendering. The GridViewManager repository object is registered to use this renderer in Web2 applications, and a unit test under Consultingwerk.SmartFrameworkTests.Repository.SCL5232.TestClass verifies the generated JSON.

Fixed: AbstractMermaidDiagramPlugin now supports all ABL temp-table data types (INT64, DATETIME-TZ, BLOB, CLOB, ...)

Consultingwerk.BusinessEntityDesigner.Common.Plugins.AbstractMermaidDiagramPlugin now correctly maps all ABL temp-table data types (CHARACTER, LONGCHAR, INTEGER, INT64, DECIMAL, LOGICAL, DATE, DATETIME, DATETIME-TZ, RAW, RECID, ROWID, BLOB, CLOB, HANDLE) when generating the Mermaid diagram representation of a Business Entity. Previously missing types such as INT64 and DATETIME-TZ are now rendered properly. A new unit test exercises the data-type mapping with broad coverage using AttachmentBusinessEntity (for BLOB and CLOB) and SmartFramework Scheduler Business Entities (for DATETIME-TZ). No changes required in customer code.

New SmartFramework class with IsSmartDbConnected() method to standardize SmartDB connection checks

Introduced the new class Consultingwerk.SmartFramework.SmartFramework with the method IsSmartDbConnected(), which encapsulates the previously inline check involving the SmartDB preprocessor and the CONNECTED() function. The class includes Consultingwerk\products.i so the SmartDB preprocessor is resolved correctly. Existing usages of the inline pattern across the framework have been replaced with calls to the new method, and a unit test for IsSmartDbConnected() has been added. Customer developers can call Consultingwerk.SmartFramework.SmartFramework:IsSmartDbConnected() in their own code instead of the verbose inline preprocessor pattern.

ServiceAdapter call sites in SmartFramework now use ServiceInterface when SmartDB is connected

Multiple ServiceAdapter call sites across the Consultingwerk.SmartFramework package have been refactored to follow the standardized pattern: when SmartDB is connected locally, the call now goes through ServiceInterface (or directly via ServiceManager:GetBusinessService), and only falls back to ServiceAdapter when SmartDB is not connected. Affected classes include AuthenticationService, SmartDataBrowserViewManagerBusinessTask, ParentGroupDatasetController, UserInterfaceTranslationService, GenericDataExporter, AttachmentDatasetController, AttachmentRoleProvider, CommentRoleProvider, ObjectMasterDatasetController, RelationDatasetController, and SmartRelatedTablesProvider. This avoids unnecessary AppServer round-trips when SmartDB is locally available. No changes required in customer code.

BusinessEntityDesigner: Generated _fetchdatastaticqueries.i now suppresses SonarSource/CABL sharelock false positives

The code generator Consultingwerk.BusinessEntityDesigner.Common.Plugins.AbstractStaticDataAccessQueryPlugin now emits a {&proparse prolint-nowarn(sharelock)} annotation before every OPEN QUERY statement in generated _fetchdatastaticqueries.i include files. This eliminates the sharelock false-positive warnings previously raised by SonarSource and CABL on these generated files. Re-generate affected Business Entities to pick up the new annotation.

Record count feature now available in static SmartObjectMasterForm for Page, Instances, Links and Business Entity adapter tabs

The record count feature provided by Consultingwerk.Windows.Framework.Repository.Rendering.DataSourceRecordCountProvider, previously only used in the repository-rendered DynamicForm, is now also available in the classic static Consultingwerk.Windows.Framework.Repository.Object.SmartObjectMasterForm. Counts are wired up for the pageAdapter, instancesAdapter, linksAdapter, and smartBusinessEntityAdapter2 tabs, supporting the mix of SmartBusinessEntityAdapter and SmartDatasetChildAdapter instances used on those tabs. Developers using SmartObjectMasterForm receive the record count display on the affected tabs without additional configuration.

New MCP procedure for creating MetaBusinessEntityLookup repository components added

A new MCP procedure create-repository-lookup.p has been added to the SmartFramework MCP server, enabling automated creation of MetaBusinessEntityLookup repository components for a given Business Entity. The core creation logic is implemented in the new CreateMetaBusinessEntityLookup method of the ObjectMasterDesignBusinessTask class. Developers can invoke this procedure with the Business Entity name, lookup key field, grid columns, and optional mapping configuration to programmatically generate lookup components without using the CreateLookupWizardForm dialog.