Release Notes 2026-06-01

Release Notes 2026-06-01

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 #89253@2026-06-01

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

Fixed: Business Entity generation no longer fails on date fields caused by session date-format reset

The Business Entity Designer reset the session date format to 'mdy' while fetching the database schema, which caused invalid INITIAL value errors for date fields when generating Business Entities under non-US date formats (e.g. 'dmy'). This has been corrected so initial date values are now interpreted correctly regardless of the active session date format. No changes required in customer code.

New wizard converts procedure/function definitions into class methods directly from the Proparse Tree View

A new wizard has been added that converts a PROCEDURE or FUNCTION definition into a class method. It is implemented as a Proparse Tree View customizer plugin (Consultingwerk.Studio.Proparse.IProparseTreeViewCustomizer), launched via the ProparseTreeViewCustomizerFactory, and consists of a graphical wizard plus a core converter. Developers can adjust the method name and access modifier, control how each parameter and the return value map to method parameters or to generated Parameter and Response objects, and the converter generates the corresponding classes and returns the method signature for display in the Procedure Editor control. Handle-based table parameters can be passed as HANDLE parameters or mapped to a selectable TableModel (BufferModel mode).

Group assignment can now exclude parent groups of already assigned user groups

Backend support was added to the user group assignment to optionally hide parent groups of already assigned groups from the list of assignable groups, matching the existing behaviour in user group maintenance. The GetUserGroupAssignments request now honours the optional ExcludeParentsOfSelectedParentGroups=true argument. No changes required in customer code unless the new filtering option is desired.

Repository now supports custom object types that extend and override existing object types

Object types can now be customized by linking another object type through the CustomObjectTypeGuid value on eSmartObjectType. Attribute values of the custom object type override the base object type's defaults, and additional attributes of the custom object type are added to the effective attribute list; parent and grand-parent object types of the custom object type are honored as well. The change affects RepositoryCacheTableFactory (dynamic temp-table assembly), the AttributeValueBusinessEntity methods for retrieving and storing object master and object instance attributes, SmartRepositoryIntegrityCheckTask, and SmartRepositoryService methods such as GetObjectInstanceAttributeValue and StoreObjectInstanceAttributes. Existing repository APIs continue to work unchanged — customization is resolved transparently.

TabOrderManager focus events now expose the key or event that triggered them

The FocusChangingEventArgs and FocusChangedEventArgs classes in Consultingwerk.Support were extended with an additional property identifying the key or event that caused the focus change. This allows customer code to reliably distinguish between TAB and SHIFT-TAB (back-tab) navigation without relying on LAST-KEY or LAST-EVENT, which Progress does not populate in these cases.

Server-side file and folder picker component added, including Desktop rendering support

A new server-side file and folder picker component has been added, allowing users to browse and select files and folders located on the server. It follows the design of the existing similar picker components and additionally supports rendering on the Desktop client. Developers can embed the component in their dialogs to provide server-side path selection without writing custom browse logic.

GUI for .NET Viewers (UserControls) can now be converted into the Repository

A new conversion tool parses Visual Designer based GUI for .NET UserControls and reconstructs their viewer layout into the repository. The new UserControlParser class analyzes the UserControl via the IProparseApi, maps .NET control types to ABL VIEW-AS phrases, converts pixel coordinates and sizes into ABL character units, and handles GroupBox/UltraGroupBox controls as ABL rectangles with corrected relative positioning. Special controls such as SmartBusinessEntityLookup and SmartComboEditor are supported through a new ExtraProperties field on ttFrameWidget that stores additional property values as a JSON object. Developers can open a *.cls UserControl through the AblFrameMigrationForm and generate an equivalent MetaViewer in the repository database.

GUI for .NET SmartDataBrowsers can now be converted into the Repository

A new conversion tool parses Visual Designer based GUI for .NET Forms and extracts their SmartDataBrowser and SmartUpdatableBrowser grid definitions into the repository. The new FormGridControlParser class analyzes the Form layout via the IProparseApi, reads control properties from the InitializeComponents method and the .resx file, converts pixel column widths into ABL character units, and supports Forms containing multiple grids. Developers can open a *.cls Form through the AblBrowseMigrationForm and have its grid columns, together with the BindingSource EntityName, EntityTable and EntityView, populated into ttBrowseColumn for repository generation.

MCP Server tools added for managing server-side event handlers on repository instances

Two new MCP Server procedures have been added to the Consultingwerk.SmartFrameworkMcpServer directory: get-repository-instance-events.p returns the events registered against the object type of a given container instance, and set-repository-instance-event.p assigns a server-side event handler class and method to a specific event on a repository instance. The new procedures use the ISmartRepositoryService methods GetObjectInstanceAttributeValue and StoreObjectInstanceAttributes and respect the ServerSideEventHandlerClass attribute on the container when no class name is passed. Developers can now configure server-side event handlers for repository instances directly from any MCP-enabled client.

File download UiAction added to instruct the front end to download backend-generated files

A new UiAction has been added that can be returned from a Server-Side Event Handler (SSEH) method after a file has been generated or located on the server. The UiAction carries the information the front end needs - such as a download URL - to trigger the browser's default download functionality in the Web Client. Developers can return this UiAction from their SSEH methods to enable file downloads without writing custom front end code.

New Node.js tool added for managing feature-branch SmartDB copies in the SmartComponent Library

A new Node.js-based web application has been added to manage SmartDB copies that are paired with feature branches. It is built on Express.js on the back end and Kendo UI on the front end and can be launched with a single npx command, which starts the backend and opens the browser automatically. The tool lists feature branches with their associated SmartDBs, identifies orphaned SmartDBs (folders without a matching git branch), and can initialize a branch using the existing init-branch script.

Improved: IAuthenticationService:ChangePassword now offers a safer object-based variant that prevents passwords from leaking into 4GLtrace logs

A new variant of ChangePassword has been added to the IAuthenticationService interface and all of its implementations. The new variant takes a single ChangePasswordParameter object as input, so credentials are no longer emitted as plain CHARACTER parameters into 4GLtrace output. The previous variant with individual CHARACTER parameters is retained as a deprecated proxy that constructs a ChangePasswordParameter and delegates to the new method, preserving backward compatibility. Customer developers should migrate their calls to ChangePassword to use the new ChangePasswordParameter-based variant.

Fixed: Proparse now correctly parses ON DELETE OF THIS-PROCEDURE blocks

Proparse previously failed with 'Unknown table name: THIS-PROCEDURE' when parsing ON DELETE OF THIS-PROCEDURE blocks (for example in ry/app/ryplipmain.i). This has been fixed. No changes required in customer code.

Repository Viewer Designer: Property grid keeps the previously selected property when switching components

When switching between components in the Repository Viewer Designer, the Kendo UI Property Grid now preserves the previously selected property on the new component if that property exists, falling back to the default selection otherwise. This removes the need to manually scroll to and re-select frequently edited properties such as Label when editing the same property across multiple components. The change is implemented in the ISelectionService.SelectionChanged handler of Consultingwerk.Windows.Framework.Repository.Object.ViewerDesignerControl. No changes required in customer code.

UserGroupDataSource added to the unit test exception list

The UserGroupDataSource has been added to the unit test exception list so that the data source counter operates correctly and the affected Jenkins unit tests no longer fail. No changes required in customer code.

Repository Viewer Designer: 'Replace Instance' button added to the graphical Design tab

The 'Replace Instance' action is now available directly on the graphical Design tab of the Repository Viewer Designer, in addition to the existing button on the Instances tab. The new button is provided through the contextual ribbon tab maintained by Consultingwerk.Windows.Framework.Repository.Object.ViewerDesignerControl and is enabled only when exactly one instance is selected; the replacement logic is shared with the main ribbon button on SmartObjectMasterForm. After a replacement, the viewer design is reloaded automatically so the change is visible without switching tabs.

Fixed: JsdoGenericService ValueList now correctly resolves serialize-name values for primary unique key fields

Fixed an issue in Consultingwerk.OERA.JsdoGenericService.Service where the JSDO Generic Service failed with 'Property was not found' when the primary unique key of a Business Entity temp-table contained a field with a serialize-name. A new helper method in Consultingwerk.OERA.BufferHelper now resolves ABL field names into their corresponding serialize-name values (falling back to the field name when no serialize-name is defined). Both call sites in Service.cls that previously passed raw unique field names to JsonHelper:ValueList have been updated to use this helper. No changes required in customer code.

Business Task added to expose the Unsupported Attributes Report to the front end

A new Business Task has been implemented that exposes the Unsupported Attributes Report through the standard IBusinessEntity interface, so the SmartGrid/JSDO infrastructure can consume it like a regular Business Entity. Its FetchData implementation calls Consultingwerk.SmartFramework.Repository.Class.UnsupportedAttributesReport and wraps the resulting temp-table into a ProDataset, reusing an existing dataset definition. SaveChanges is not supported and throws a not-supported exception. Developers can consume this Business Task from the SmartGrid Excel export to retrieve the list of unsupported attributes.