Release Notes 2022-01-31

Version Information

OpenEdge Release

Version Information

11.7.9, 11.7.10, 12.2, 12.3, 12.4

Release 11.7 #69382@2022-01-31

Security Bulletin - log4j CVE-2021-44228

Further details: log4j CVE-2021-44228

OpenEdge 12.3 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.3. We hereby declare OpenEdge 12.3 fully supported for the SmartComponent Library as of the release of  November 24th 2020.

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: 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.

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 11.7.2.001 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 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-3581 Fixed issue with SubmitRow in SmartViewerControl causing NullReferenceException when saving CLOB with > 32 k

Description:

An Exception similar to the one shown below was raised when saving a CLOB field with more than 32k of data from a text-box. We have implemented a workaround to what seems to be an issue in the Progress BindingSource implementation.

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Call Stack:
UpdateRow Consultingwerk.SmartComponents.Base.SmartDatasetAdapter at line 3643 (P:\\xBase1\\SmartComponentLibrary\\Consultingwerk\\SmartComponents\\Base\\SmartDatasetAdapter.r)
UpdateRow Consultingwerk.SmartComponents.Base.SmartDatasetAdapter at line 3499 (P:\\xBase1\\SmartComponentLibrary\\Consultingwerk\\SmartComponents\\Base\\SmartDatasetAdapter.r)
SaveChanges xbase.Windows.SmartBaseControl.xbSmartViewerControl at line 5156 (P:\\xBase1\\Framework\\xbase\\Windows\\SmartBaseControl\\xbSmartViewerControl.r)
okButton_Click xbase.Windows.Control.ListViewDialog at line 282 (P:\\xBase1\\Framework\\xbase\\Windows\\Control\\ListViewDialog.r)
CopyEntry xbase.Windows.Control.Editor.xbListViewControl at line 1786 (P:\\xBase1\\Framework\\xbase\\Windows\\Control\\Editor\\xbListViewControl.r)
radButtonCopy_Click xbase.Windows.Control.Editor.xbListViewControl at line 2640 (P:\\xBase1\\Framework\\xbase\\Windows\\Control\\Editor\\xbListViewControl.r)
xb15stam.r at line 13253 (P:\\xBase1\\Legacy\\xbase\\prog\\xb15stam.r)
ba00cmnu_init_start ba00mess.p at line 12577 (V:\\PCSSW\\base\\prog\\ba00mess.r)
ExecuteAction Pcs.Patidok.Framework.ActionRun3Parm at line 127 (V:\\PCSSW\\Pcs\\Patidok\\Framework\\ActionRun3Parm.r)
FireAction Pcs.Patidok.Gui.ActionbarBase at line 1747 (V:\\PCSSW\\Pcs\\Patidok\\Gui\\ActionbarBase.r)
ActionStart_Handler Pcs.Patidok.Gui.ActionBarTreeButtons at line 987 (v:\\pcssw\\Pcs\\Patidok\\Gui\\ActionBarTreeButtons.r)
Button_Click Pcs.Patidok.Gui.PatidokTabbedButtons at line 1861 (v:\\pcssw\\Pcs\\Patidok\\Gui\\PatidokTabbedButtons.r)
doLogin ba00nlog.p at line 17733 (V:\\PCSSW\\base\\prog\\ba00nlog.r)
ba00pvs.p at line 13543 (V:\\PCSSW\\base\\prog\\ba00pvs.r)
ba00glin.p at line 6561 (V:\\PCSSW\\base\\prog\\ba00glin.r)
ba00runx.p at line 2222 (V:\\PCSSW\\base\\prog\\ba00runx.r)
TimerTickHandler ba00nrun.p at line 1482 (V:\\PCSSW\\BASE\\PROG\\ba00nrun.r)
ba00nrun.p at line 1156 (V:\\PCSSW\\BASE\\PROG\\ba00nrun.r)
bb_start_patidok.p at line 532 (P:\\xBase1\\Legacy\\bb\\bb_start_patidok.r)
P:\\xBase1\\Legacy\\bb\\bbsp.r at line 179 (P:\\xBase1\\Legacy\\bb\\bbsp.r)

.NET Stack Trace:
bei Progress.ClrBridge.ProMarshal.StringToLONGCHRFLD(ditem* A_0, String A_1)

bei Progress.ClrBridge.ProMarshal.FromString(ditem* A_0, Object A_1)

bei Progress.ClrBridge.ProMarshal.ToDItem(ditem* A_0, Object A_1)

bei Progress.ClrBridge.BrgClrFromPro.unbox(BrgClrFromPro , ditem A_0, ditem* A_1)

SCL-3614 Fixed access of broadcast URL in SmartMessageService

Description:

We have fixed an issue in the SmartMessageService when accessing the SmartMessageBroadcast setting.

SCL-3617 Corrected orphaned records in SmartDB data provided with customer release

Description:

We have corrected the SmartRepository data deployed to our customers. Previously we have been deploying test data that was not intended to be deployed.

SCL-3621 Fixed FindRecord implementation with QueryExpressionWithSort

Description:

We have fixed the implementation of FindRecord in the DataAccess class when the query is opened based on a QueryExpressionWithSort argument.

SCL-3625 Fixed RESTful update that results in _QUESTIONS-PENDING reporting successful update

Description:

We have resolved an issue with updates in RESTful Business Entities that returned questions to the caller. Those requests have previously reported an HTTP 200 status together with the message “Update Successful”. Those requests will now fail with an HTTP 400 and indicating if questions are pending or the have led to cancelling the processing.

Improvement

SCL-2132 SmartUnit View for Progress Developer Studio

Description:

We with this release we are providing the first version of a new View for Progress Developer Studio. This view allows to execute unit tests using the SmartUnit runtime based on a custom ANT script. Details about the new plugin can be found on this page here: https://consultingwerk.atlassian.net/wiki/spaces/SCL/pages/1705541633/SmartUnit+Progress+Developer+Studio+Plugin

We’ll be releasing further enhancements to this plugin in the coming releases.

SCL-3441 Added event to Business Entity Designer which allows to provide custom buffer name for a source DB-table

Description:

We have added the new event GetSourceBufferName to the BusinesEntityDatasetController. By subscribing to this event, developers are enabled to provide a custom buffer name for a database table used in a temp-table’s data-source.

SCL-3455 SmartUnit now supports the execution of an individual method

Description:

SmartUnit now supports the new argument testmethods which can be passed via a PCT Param node. This parameter allows to provide a patternset for test methods that should be executed.

SCL-3579 Improve reference implementation of the SMT security realm check in MessageBusinessEntity

Description:

The check for the SMT (SmartMessageTranslation) security realm in the MessageBusinessEntity has been improved and can serve as a template for custom row level security based validation.

SCL-3599 Improved error message when calling GetFieldValues on closed SmartBusinessEntityAdapter query

Description:

We are not throwing a more meaningful error message when calling into the GetFieldValues method of a SmartBusinessEntityAdapter or SmartDatasetChildAdapter while the query is closed.

SCL-3600 Improved inheritability of AppServerServiceManager.cls

Description:

The AppServerServiceManager.cls now exposes the handle of the as-utils.w persistent procedure as a PROTECTED property AppSrvUtils. This simplifies customization of the component through inheritance.

SCL-3601 Preparations for OpenEdge 12.5

Description:

We have prepared the SmartComponent Library for the expected release of OpenEdge 12.5 by

* extension of the ProVersion Enum
* extension of the Business Entity Designer Launcher Configuration
* extension of the Batch Files for our command line utilities when obtaining the DLC value

SCL-3603 Implemented deep Clone for QueryExpressionWithSort

Description:

We have implemented the Clone() method of the QueryExpressionWithSort class. This method now provides a deep clone, cloning all referenced QueryExpression and SortField instances.

SCL-3606 Fixed typo in .applicationsettings property name ensureAbsolutelPropath

Description:

We have fixed a typo in the AppServerStartupManager when requesting the value for ensureAbsolutePropath. For backwards compatibility we are checking for the property named ensureAbsolutePropath and _ensureAbsolutelPropath_.

SCL-3608 Implemented folder selection for data-directory in Module maintenance

Description:

We have implemented a folder browser dialog for the data-directory field in the Product Module Maintenance

SCL-3611 Web rendering of Button columns in Grid now include the "action" property

Description:

When adding a Button column to a MetaGrid's instances, setting the value of "Click" did previously not cause the "action" property to be rendered in a JSON layout. This has been improved now.

SCL-3612 Providing BusinessEntity:GetTopNavBuffers as a simple method

Description:

The method has previously only been available as an invokable method. We have now in addition implemented this as a simple method.

SCL-3620 Added verticalWeight property to Angular component rendering

Description:

We have added a new property verticalWeight to viewer, grid and tabfolder components in the repository. This property may control the proportional weight of the component when stretch mode is applied.

SCL-3622 Moved IRelatedTablesProvider to new package Consultingwerk.Framework.StudioSupport

Description:

We have moved the IRelatedTablesProvider interface to a new package Consultingwerk.Framework.StudioSupport to resolve dependencies of the Business Entity Designer for the web based support component from the Consultingwerk.BusinessEntityDesigner package.

SCL-3624 Implemented support for oemanager password encryption for the SmartRequestManager

Description:

On customers demand we have implemented optional encryption for the OEMANAGER password stored in the .restapplicationsettings file to support the ability to cancel PASOE requests (see SCL-3569). The encryption and decryption is implemented as a service of the Consultingwerk.Framework.IPasswordEncryptionService service interface (which is also used to encrypt stored passwords for the GUI for .NET application. We provide a default ABL based implementation now. But customers are advised to implement their own encryption or decryption algorithm based on the ABL cryptography methods to achieve the specific demands for security.

The encrypted password along with the information that the password is encrypted is stored in the .applicationsettings or .restapplicationsettings file in the oemanager JSON object like this.

New Feature

SCL-2409 Implementation of AppServer telemetry service

Description:

We have implemented a new service that tracks telemetry data for requests to the SmartComponent Library AppServer backend. The service will record requests made along with timing information and details about the requested service for APSV, WEB, REST and SOAP requests. Details about the service can be found here: https://consultingwerk.atlassian.net/wiki/spaces/SCL/pages/1806958593/SmartComponent+Library+Telemetry+Service

We are working on various forms of visualization for this data:

* Integrated into ProTop
* Imported into the InMyData BI platform
* Visualized in a .NET Control

SCL-3616 Implemented simple AppServer profiler

Description:

We have implemented a service that allows simple profiling of an AppServer request: Consultingwerk.Framework:Server:SimpleProfiler:ISimpleProfilerService

The service allows messages to be written to the AppServer logfile. Messages will be buffered till the end of the AppServer request and will display timing in milliseconds since the start of the AppServer request and since the last message.

Story

SCL-3619 Implemented display setting for the Meta Tab Folder in the repository

Description:

We have added a new Setting that controls the display style of the tabs of a repository based tabfolder:

* image and label
* label only
* image only