/
Release Notes 2025-04-01

Release Notes 2025-04-01

Version Information

OpenEdge Release

Version Information

11.7.21, 12.2.13, 12.8.4, 12.8.5, 12.8.6

Release 11.7 #84941@2025-04-01

Security Bulletin - log4j CVE-2021-44228

Further details: log4j CVE-2021-44228

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.

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

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


Bug

SCL-4744 FileHelper:GetFileListInDirectory now matches files against list of file masks

Description:

Previously the GetFileListInDirectory was only matching the files against the first file mask provided as a list.

SCL-4768 Resolved issue with rendering the height on vertical split container instances to Angular JSON layouts

Description:

Previously we’ve always been returning a height of 900px in that case. Now we’re returning the correct height. If the height is set to zero, we’re not rendering the height at all.

SCL-4769 Implemented workaround for losing prods:clientId for deleted records with messages or input prompt

Description:

This issue was affecting the handling of questions and input prompts returned from the Business Entity validation routine for deleted records.

As we cannot modify the SmartUiAction field of a deleted record (the before-table is read-only) we are rejecting the delete, modifying the SmartUiAction field of the actual temp-table record and deleting the record again. Unfortunately the prods:clientId is lost during that process and no longer returned with the ProDataset’s JSON representation.

We’re now working around that issue in the JSDO service interface and restore the prods:clientId if required.

SCL-4774 Resolved issue with "Filter" Button in Business Entity Tester

Description:

We have (finally) resolved the issue with the “filter” button in the Business Entity Tester. Previously there have been situations where the button was not enabled despite the fact, that a checked table was selected in the table picker/tree view.

SCL-4776 Fixed issue SmartRadDataBrowser: Subscribe operation failed. AfterBatchAvailableHandler has already subscribed to the AfterBatchAvailable event. (15329)

Description:

The issue might have been seen when a SmartRadDataBrowser was used in the Visual Designer of Progress Developer Studio and the LinkDataSource property was set, unset and set again.

This issue is now resolved.

Improvement

SCL-4536 New attribute to automatically add record counts to a TabFolders label

Description:

The TabFolder repository object type now has an attribute called CountDataSources. This new attribute expects a list of Page Numbers or Keys and Datasource names with entries in the format “<Page Number>=<Datasource instance name>” or “<Page Key>=<Datasource instance name>” seperated by commas. This will add the record count of that datasource to the Page Label. By default the count is appended at the end of the defilned label, surrounded by paranthesis. Alternatively, the placeholder “&1” can be included in the label at a custom position and will be substituted with the count.

SCL-4672 Added a graphical overview of Group hierarchies

Description:

We added new overviews over group hierarchies. They are read-only trees showing the group membership or inheritance of users or groups.

The User Maintenance now has a tab “Group Hierarchy” that displays a hierarchical overview of the currently selected user. There are also two new tabs on the Group Maintenance. “Parents Hierarchy” shows a hierarchy of the currently selected groups parent groups. “Child Hierarchy” shows the child groups of the currently selected group.

SCL-4740 Implemented new SmartLink Type "Export"

Description:

The Export link can be set from a Toolbar with one of the two export buttons: ExportToExcel and ExportToPdf.

The link then supports exporting the grid contents to either PDF or Excel. The link is supported for both Desktop (GUI for .NET) and Angular web.

SCL-4742 Lookup web rending was using LookupDialogQueryString for lookupQueryString

Description:

The SmartBusinessEntityLookupWebRendering service was returning the LookupDialogQueryString for the lookupQueryString property. Now the correct query string attributes will be mapped from the Repository to the JSON rendering.

SCL-4745 Implemented support for rendering PartialDataset property on a Smart Combo Editor object

Description:

When rendering SmartBusinessEntityComboEditor components to Angular, we now support the PartialDataset property.

SCL-4747 SmartRelationBusinessEntity now supports filtering by Parent and ChildTableName field

Description:

We now support filtering SmartRelation records by the ParentTableName and ChlidTableName calculated fields.

SCL-4751 SmartHttpClient now always sets the ServerNameIndicator for HTTPS requests

Description:

As more and more REST services use CDN like infrastructure, the ServerNameIndicator becomes more and more required. This was a huge issue recently with using the Atlassian web services (JIRA).

Our Smart HttpClient factory now always adds the arguments for the server name indicator.

SCL-4752 Implemented support for rendering queryString property on Smart Combo Editor

Description:

We have extended the rendering functionality for SmartComboEditors in Angular to support the questString property.

SCL-4753 Added External ID to menu structure web rendering

Description:

The menu function’s external ID property is now included in the response of the menu structure web handler.

SCL-4757 Added CountResultRecords method to BusinessEntityBusinessTask

Description:

The BusinessEntityBusinessTask base class now provides an implementation for the CountResultRecords method.

SCL-4759 Implement Workaround for UltraGridFilterRowHelper issue

Description:

A customer has reported an issue where the UltraGridFilterRowHelper was failing to produce a valid query expression in same grids. Although we could not reproduce the issue, we have changed the implementation.

See https://www.consultingwerk.com/support/forum/smartcomponent-library---developer-forum/ultragrid-columnfilter-error#EY9DIpT1dW-RPP8AADXKhw for the discussion on the issue.

SCL-4765 SmartValueListWebHandler now uses Service Interface when SmartDB is connected

Description:

The web handler was previously always using the Service Adapter to fetch data from the Business Entity. Now the service uses the Service Interface when the SmartDB is connected.

SCL-4766 Added modify button to CefBrowserForm

Description:

We have added support for a modify button to the CefBrowserForm. The button now mocks the Modify button in the Angular web page.

SCL-4771 SmartObjectMasterForm now prompts to open generated JSON layout

Description:

The Object Master Designer now prompts the developer if a generated JSON file with the Angular markup should be opened after it has been exported.

SCL-4772 Consultingwerk GenericLists now support replacing an item with another once

Description:

The new Replace method of the GenericList class is now supported both for our legacy type lists and lists based on the ABL core generic lists.

SCL-4780 Resolved SmartBusinessEntityAdapter:RetrieveData errors for Business Task that does not implement IProvidesBusinessEntityDescriptor

Description:

The BusinessEntityDescriptorClient service was not checking if a Business Task (that is used in place of a Business Entity) was implementing the IProvidesBusinessEntityDescriptor interface.

This has been resolved now. When the Business Task does not implement IProvidesBusinessEntityDescriptor the service will return the unknown value/invalid reference for the Business Entity Descriptor. Previously, this error was raised:

Invalid cast from Demo.IncidentMeasureBusinessTask.IncidentMeasureBusinessTask to Consultingwerk.OERA.BusinessEntityDescriptor.IProvidesBusinessEntityDescriptor. (12869)

SCL-4781 Security Assignment Form now refreshes grid after selecting a security item in the lookup

Description:

The Security Assignment form now refreshes the grid contents after selecting a security item in the lookup. Before this change, users had to perform a search or sort in the grid to see the list of security assignments filtered by the selected item.

SCL-4785 Web Viewer Rendering now uses the Business Entity Descriptor Client to access the Business Entity Descriptor

Description:

When rendering the Angular JSON markup for a repository based viewer, we’re now using the IBusinessEntityDescriptorClient service to obtain the Business Entity Descriptor. This will facilitate the caching there and is also aware of Business Tasks that may not implement the IProvidesBusinessEntityDescriptor interface.

New Feature

SCL-4737 SSEH now supports to open a web page

Description:

Server side event handler now support opening a web page by returning an instance of the Consultingwerk.CommonUi.OpenWebPageAction in the Actions list of the UiControl response.

SCL-4739 New BusinessTask and Service to retrieve file and folder information from the backend

Description:

We added a FilePickerBusinessTask that uses an IFilePickerService to retrieve directory and file information from the backend.



The FilePickerService implementation reads the information about directories from application settings for “folderbrowserscopes”. A foldersope should contain the following information:

* “browsefiles”: “true” if it should be allowed to browse the files in this folderscope, “false” if only the directories should be available.
“filepatterns”: An alternating list of pattern name and file pattern to limit which files can be shown. The individual entries should be seperated by '|', e.g.: "PNG Files (.png)|.png|JPG Files (.jpg)|.jpg|GIF Files (.gif)|.gif|All Image Files (.png, .jpg, .gif)|.png,.jpg,.gif" to show only .png-files, only .jpg-files, only .gif-files or any of the three. It is also posible to add “All Files (.)|." to show all files.
* “rootfolders”: Defines the root folders that are part of the scope. It should have at least one entry. An entry has a numeric name (e.g. “1”) and be an object with a “folder” giving the path to the root directory.



This information can be retrieved via Rest at /web/Entities/Framework/FolderBrowser/. The available POST endpoints are:

* GetRootFolders: Expects a folderscope and returns an array of its rootfolders.
GetFilePatterns: Expects a folderscope and returns an array containing the individual pairs defined in the filepatterns. Each pattern in the array has a description (e.g. “PNG Files (.png)”) and a pattern (e.g. “.png”). This requires “browsefiles” to be “true”.
* GetFolders: Returns a list of the direct sub-folders of a given folder. It expects a folderscope, the index of a root folder of that scope and an optional Subfolder of that root folder. The result is an array of the direct child folders.
* GetFiles: Returns a list of the files in a given folder. It expects the same parameters as GetFolders as well as a comma seperated list of indexes in the array returned by GetFilePatterns. It returns an arraqy of object containing file info (“name” for the files name, “size” for the files size and “date” for the datetime of the last modification). This requires “browsefiles” to be “true”.
* CreateFolder: Adds a new folder. It expects the same info as GetFolders to identify where the new folder should be located as well as a name for the new folder.



These operations can be restricted through the use of security tokens.

* “FolderScope-<folderscope>” restricts the folderscope in general.
* “CreateFolder-<folderscope>” allows reading information through the Get… methods but restricts the CreateFolder method.

SCL-4741 Added FileHelper method to return a list of subdirectories

Description:

We have implemented a new method GetDirectoryListInDirectory in the FileHelper that supports returning a list of sub-directories of a given folder.

SCL-4746 Implemented JSON rendering support for Smart Grid promptBeforeExport setting

Description:

To support configuring the Smart Grid’s prompt before export text, a new attribute named PromptBeforeExport (repository) and promptBeforeExport (JSON) is required.

SCL-4748 Support BeforeEnableFields event in server-side event handler

Description:

Support has been implemented to support a cancelable BeforeEnableFields event in server-side event handler.

SCL-4749 Implemented JSON rendering support for images in Smart Combo Editors

Description:

The SmartComboEditor Angular web rendering now supports the various image related properties.

SCL-4750 Implemented support for InputPrompts during validations in a Business Entity

Description:

Similar to the support for questions, the UiInteractionService now also supports returning input prompts (similar to the complex input prompts) from validation routines.

SCL-4778 Implement SmartFramework Backend API's for new VS Code Extension

Description:

We have implemented some backend API’s to prepare a new VS Code extension that will allow to create error messages from within VS Code.

The endpoints support retrieving all defined message groups and to create a new SmartMessage record.

Task

SCL-4754 Implemented JSON rendering support for Smart File Picker

Description:

We have implemented JSON rendering support for the Angular file picker component.