Release Notes 2026-07-13
- 1 Version Information
- 2 Retirement of OpenEdge 11.7
- 3 OpenEdge 13.0 support!
- 4 OpenEdge 12.8 support!
- 5 OpenEdge 12.2 support!
- 6 PASOE / OEMANAGER VS Code Extension
- 7 Introducing the SmartComponent Library developer forum
- 8 Release Notes
- 9 New Versions of Proparse .NET Assemblies (30 December 2018)
- 10 New Version of the Consultingwerk.SmartComponents Assemly (09 January 2019)
- 11 Hybrid Realm now using IAuthenticationService
- 12 Web Handler overview
- 13 UTF-8 based deployments available
- 14 New Feature Documentation
- 15 Download Link
- 16 Overview of included tickets
- 16.1 User interface translation service now supports all six translation types in the resource translation form
- 16.2 SmartDataBrowser can now show new columns even when restoring a stored user profile
- 16.3 New Image Viewer component for displaying record images in Windows and Web
- 16.4 Menu structure retrieval over AppServer is now significantly faster
- 16.5 Added missing @ParameterSchema annotations to REST methods with dataset responses in the SmartFramework
- 16.6 Undo support (Ctrl+Z) added to the grid designer for reverting recent design changes
- 16.7 Undo support (Ctrl+Z) added to the viewer designer for reverting recent design changes
- 16.8 Business Entity Designer: the index selection dialog can now be re-run to add further indexes
- 16.9 Dialog editor for CHR(3) delimited Lookup Values added to SmartAttributeViewerControl
- 16.10 Improved: Repository object retrieval on PASOE accelerated by reusing object-type attribute caches
- 16.11 Improved: PASOE session startup accelerated by optimizing REST resources cache deserialization
- 16.12 Improved: User group assignment resolution optimized to avoid N+1 Business Entity fetches
- 16.13 SmartHttpClient now sets the TLS SNI from the request URI host name by default
- 16.14 Fixed: LastRecentlyUsedExplorerBarGroupController no longer throws error 14332 when logging is disabled
- 16.15 Fixed: CountRecordsBusinessTask now maps ForeignFields parent/child pairs correctly, resolving error 7351 on Add
- 16.16 Object Master Designer now automatically refreshes instance attribute values when master attributes are saved
- 16.17 Context menu added for instances in the Desktop Object Master Designer
- 16.18 Job Status screen now allows manually aborting a stuck Running job
- 16.19 Improved SmartParentGroup index structure and fixed index name typo
Version Information
OpenEdge Release | Version Information |
|---|---|
11.7.21, 12.2.19, 12.8.9, 12.8.11, 13.0.0 | Release 11.7 #89320@2026-07-13 |
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:
|
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" |
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 |
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
User interface translation service now supports all six translation types in the resource translation form
The default UserInterfaceTranslationService now implements all six translation types offered by the ResourceTranslationMaintenanceForm instead of only local-by-key. In addition to local-by-key it now supports local by partial key and text, local by text, and the three corresponding global variants (global by key, global by partial key and text, and global by text). Fetching, resolving and storing translations against the SmartUiTranslation table now honor global records (represented with an empty ObjectName) and apply the correct resolution precedence, so developers no longer need custom FilterStringResource / ObtainTranslation / StoreTranslation event subscribers to use these translation types.
SmartDataBrowser can now show new columns even when restoring a stored user profile
A new application-wide option lets the SmartDataBrowser display newly added grid columns even when a user already has column settings stored in the user profile, by comparing the initially visible columns against the stored profile instead of hiding them. The behavior accounts for the differences between repository based grids and static SmartDataBrowser instances. This avoids requiring users to reset their column settings or use the column chooser to see new columns.
New Image Viewer component for displaying record images in Windows and Web
A new Image Viewer component has been added that displays an image for the current record of a data source, with both a Windows (GUI for .NET) and a Web rendering, registered in the repository as the new object type MetaImageViewer. The Windows control ImageViewerControl renders the image in an UltraPictureBox with a toolbar combo for the scale mode (Never, Always, OnlyWhenNeeded) and exposes ShowImage methods, resolving files without keeping them locked. Developers configure the image source through repository attributes (SourceType URL / File / BackendService, URL and file-name fields, ScaleImage, VerticalStretch); rendering is provided by ImageViewerRenderer for Windows and ImageViewerWebRendering for the web front end, mirroring the existing PDF/Document Viewer component. A demo instance is wired into the CustomerExplorer example.
Menu structure retrieval over AppServer is now significantly faster
Menu structure retrieval through the AppServer was up to 20x slower than in the fat client, mainly caused by exception-driven SessionInfo population during menu security checks and by uncached translation and repository lookups. MenuFunctionContainerSecurityService now avoids exception-based control flow when checking container restrictions, ObjectMaster GUID lookups (including negative results) are cached in SmartRepositoryService / ObjectMasterDataAccess, and translation lookups are deduplicated per request using the existing static query in TranslationDataAccess. Together these changes substantially reduce the AppServer agent request time for login and menu rendering. No changes required in customer code.
Added missing @ParameterSchema annotations to REST methods with dataset responses in the SmartFramework
REST methods (@RestMethod) that return a ProDataset now carry the required @ParameterSchema annotation referencing the dataset's XSD schema file. 40 methods across 30 classes in Consultingwerk.SmartFramework were missing this annotation and have been corrected; four previously absent XSD schema files (dsUserAuthorizationReport, dsUserGroupReport, dsSecurityItemKeys, dsDataSourceSchema) were created as well. This improves the generated REST resource metadata for dataset responses. After deployment the .annotations files must be regenerated and restresources-cache.json deleted for the changes to take effect.
Undo support (Ctrl+Z) added to the grid designer for reverting recent design changes
A general-purpose undo framework has been introduced in the SmartComponent Library, consisting of the IDesignerAction interface and the DesignerActionStack class. The GridDesignerControl now hosts a contextual ribbon tab with an Undo button and a Ctrl+Z keyboard shortcut that revert the most recent grid design change - adding or removing columns, resizing, reordering, and attribute changes - including the underlying repository state where applicable. Developers can reuse DesignerActionStack (one instance per designer control) and implement IDesignerAction to make additional designer actions undoable.
Undo support (Ctrl+Z) added to the viewer designer for reverting recent design changes
Building on the general-purpose undo framework (IDesignerAction / DesignerActionStack), the ViewerDesignerControl now offers an Undo button in its existing contextual ribbon tab together with a Ctrl+Z keyboard shortcut. It reverts recent viewer design changes such as adding, removing, replacing, moving, re-parenting and resizing instances, as well as property changes made in the property grid. Viewer undo actions revert the local temp-table state and the rendered design surface; changes reach the repository only on save.
Business Entity Designer: the index selection dialog can now be re-run to add further indexes
The Business Entity Designer now lets developers re-run the index selection dialog at any time through a new "Index Selection" entry in the design canvas context menu, instead of only when a table is first dropped onto the canvas. This is enabled by a new general purpose extension point on the BusinessEntityDesignerForm (the DesignCanvasContextMenuOpening event and DesignCanvasContextMenuOpeningEventArgs), to which the IndexSelectionPlugin contributes its menu item, and by the new BusinessEntityDatasetController:AddIndexesFromSchema method that both the drop flow and the re-run flow now share. Only indexes not yet present on the selected temp-table are offered, and existing primary-index handling and DefaultSearchCodeGeneration rules are preserved. No changes are required in customer code.
Dialog editor for CHR(3) delimited Lookup Values added to SmartAttributeViewerControl
The SmartAttributeViewerControl now offers an additional editor button on the Lookup Values field that opens a dialog for editing the CHR(3) delimited list as Name/Value rows in a SmartUpdatableBrowser backed by a Temp-Table Adapter. The dialog converts the delimited list into a temp-table, lets the developer edit the entries in a grid, and on OK converts the records back into the CHR(3) delimited list returned to the viewer; Cancel leaves the value unchanged. This makes maintaining lookup value lists in the repository attribute viewer much more convenient than editing the raw delimited string.
Improved: Repository object retrieval on PASOE accelerated by reusing object-type attribute caches
Repository object retrieval on PASOE is now substantially faster, addressing a regression introduced with the customizable object-types support (
Improved: PASOE session startup accelerated by optimizing REST resources cache deserialization
PASOE session startup is now significantly faster because the deserialization of the REST resources cache (restresources-cache.json) has been optimized. The RestResourceService / RestResourcesJsonReader load path, together with JsonHelper, ArrayHelper and the RestMethod / RestAddress serialize-name resolution, previously executed roughly 1.3 million interpreted ABL statements per session start; property-name resolution is now done in a single pass, redundant longchar conversions and repeated service-container lookups were removed. No changes are required in customer code; each new PASOE session simply starts faster.
Improved: User group assignment resolution optimized to avoid N+1 Business Entity fetches
Resolving the group assignments of the authenticated user during login is now considerably faster. UserBusinessEntity:GetUserGroupAssignments previously issued one GroupBusinessEntity FetchData per parent group and recursively re-resolved the parent-group chain per row (an N+1 pattern), which dominated the SmartHybridRealm authentication path. Group retrieval is now batched and the parent-group closure is resolved once per request, with the result cached for the session/request context. No changes are required in customer code.
SmartHttpClient now sets the TLS SNI from the request URI host name by default
SmartHttpClient (Consultingwerk.Framework.Http) now sets the TLS Server Name Indication (SNI) from the request URI's host name by default, so HTTPS requests present the correct host to the server and receive the intended certificate without any additional configuration. SNI is applied only for https URIs and never for IP-address host literals (per RFC 6066), and a value the caller has set explicitly is never overridden. This resolves misleading TLS handshake failures against strict-SNI servers and CDNs that would otherwise serve a placeholder certificate or drop the connection.
Fixed: LastRecentlyUsedExplorerBarGroupController no longer throws error 14332 when logging is disabled
Fixed a defect where LastRecentlyUsedExplorerBarGroupController:RestoreSettings called log-manager:write-message directly instead of LogManager:WriteMessage, which caused error 14332 ("message cannot be written to the log because no log is open") when logging was not enabled, for example when starting without -clientlog. No changes required in customer code.
Fixed: CountRecordsBusinessTask now maps ForeignFields parent/child pairs correctly, resolving error 7351 on Add
Fixed a defect in CountRecordsBusinessTask where the parent and child field names of a ForeignFields pair were interpreted the wrong way round. This caused errors 7351/10068 when adding a record in forms whose parent and child foreign field names differ (for example SmartEntityTableMaintenanceForm), and could produce incorrect tab record counts on navigation. No changes required in customer code.
Object Master Designer now automatically refreshes instance attribute values when master attributes are saved
The Object Master Designer now refreshes the instance attributes property sheet automatically after the corresponding master attributes are saved, so users no longer have to navigate away from an instance and back to see inherited changes. A new public static event ObjectMasterAttributesChanged on SmartObjectMasterForm (with the new event args class ObjectMasterAttributesChangedEventArgs carrying the affected ObjectMasterGuid) notifies every open designer, and ObjectInstanceAttributesUserControl gains a RefreshAttributesKeepingViewState method that re-fetches the values from the backend while preserving the selected record and grid scroll position. The refresh only runs when no viewer or grid has unsaved changes, and it works across multiple concurrently open Object Master Designer forms.
Context menu added for instances in the Desktop Object Master Designer
The Desktop Object Master Designer now provides a right-click context menu for instances, both in the Object Instances grid of the SmartObjectMasterForm and on the design canvas of the ViewerDesignerControl. Menu entries include Duplicate Instance, Delete Instance, Replace Instance, Enable/Disable (canvas only) and Open JSON Layout. The new Duplicate Instance feature, also added to the Ribbon next to Replace Instance, creates a copy with a guaranteed unique instance name and is only available for MetaForm or MetaViewer derived object masters.
Job Status screen now allows manually aborting a stuck Running job
The Smart Scheduler Job Status screen now offers an action to set a job that is stuck in Running status (for example after a scheduler process crash) to Aborted, which unblocks scheduling and execution of further jobs of that type. The action requires the new SchedulerAbortJob security token and is only available for jobs in Running status. The actual abort is performed in the SchedulerRuntime; an aborted job ends in Finished status with a comment that it was aborted, and the change is reflected immediately in the screen.
Improved SmartParentGroup index structure and fixed index name typo
The GroupGuid index of the SmartParentGroup table (SmartDB) now includes ParentingGroupGuid as a second field, and the misspelled ParentineGroupGuid index name was corrected to ParentingGroupGuid. Customers need to apply the resulting database schema change; no other changes are required in customer code.