Release Notes 2024-03-12
Version Information
OpenEdge Release | Version Information |
---|---|
11.7.17, 12.2, 12.7, 12.8 | Release 11.7 #79489@2024-03-12 |
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.7 support!
We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.7. We hereby declare OpenEdge 12.7 fully supported for the SmartComponent Library as of the release of May 10th 2023.
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:
|
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 |
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
- Support for RESTful invocation of Business Task and Business Entity Methods
- Invalid Proparse code-page setting corrupts temp-table field labels during "Refresh from Include"
- Generic Factory Service
- Using Invokable Business Entity Methods with Dataset Model Classes
- Using the Business Entity method FetchDataByKeyTable
- PASOE management scripts
- Business Entity Designer Launcher
- Searching data using ROWID's within the SmartBusinessEntityAdapter
- Business Entity Count Method
- SmartFramework ERD Designer
- Changes to the SmartDB and SmartDB upgrade and migration utility
- How to implement dynamic initial values
- How do I control the amount of details provided for error messages caused by our web handler
- Using custom log entry types
- Strong-typed Query Support
- Swagger REST API Documentation for RESTful Services
- Swagger REST API Documention for JSDO Generic Service
- Scaffolding utility for common helper classes
- RESTful services
- JSON Configuration File Format
- Common Component Specification (CCS)
Download Link
http://esd.consultingwerkcloud.com/
https://github.com/consultingwerk/SmartComponentLibrary
Overview of included tickets
Bug
SCL-4367 Resolve incorrectly-show additionalProp1 value in sample JSON in Swagger documentation
Description:
Updated the Swagger UI to the latest version to remove incorrect additionalProp1 propery in sample JSON.
SCL-4412 ServiceNameMappingService now checks for connected SmartDB
Description:
A recent change to the ServiceNameMappingService caused issues when used in a thin-client as it was attempting to call into SmartFramework business entities directly without using the Service Adapter even when the SmartDB was not connected.
This issue is resolved now.
SCL-4413 SmartBusinessEntityLookupDialog did not resolve foreign fields when positioning on the current record
Description:
We have fixed an issue in the SmartBusinessEntityLookupDialog when used with ForeignFields of the SmartBusinessEntityLookup. The lookup dialog now also properly resolves the values of the Foreign Fields when retrieving data to be shown in the dialog.
Improvement
SCL-4338 The ProTop logo and download URL have been updated in the SmartComponent Library desktop
Description:
The ProTop logo and download URL have been updated in the SmartComponent Library desktop to reflect the current White Star Software branding.
SCL-4378 Implement support for overriding the HTTP POST method using the X-HTTP-Method-Override header
Description:
Implement support for overriding the HTTP POST method with PUT, PATCH or DELETE using the X- HTTP -Method-Override header for RESTful requests. If a request is made with the POST method and the request has an _X- HTTP -Method-Override_ header, the RestEntitiesWebHandler will run the relevant ABL method for values of PUT, PATCH and DELETE. If any other value is provided, an _Consultingwerk.OERA.RestResource.BadRequestException_ exception is raised, and a 400/Bad Request status is returned.
The header is ignored for requests made with any other HTTP method.
SCL-4388 Implemented logging for exceptions in the FileUploadService
Description:
Any exceptions raised in the Consultingwerk.Web2.Services.FileUpload.FileUploadService service during the processing of a file upload are now logged using the FileUploadService custom log entry type.
For more information on how to set custom log entry types, see the documentation at https://consultingwerk.atlassian.net/wiki/spaces/SCL/pages/8094147/Using+custom+log+entry+types .
SCL-4406 Security Realm Drop down in security maintenance screens now be longer
Description:
We’ve extended the size of the security realm drop down in the various security maintenance screens. This should avoid the scrollbar shown in the drop down and simplify selection of a security realm.
SCL-4414 Implemented support for server-side manipulation of UI Controls
Description:
We have implemented basic support for manipulation of UI Controls in a Viewer from backend methods (Business Tasks or Business Entities). This provides the foundation for handling UI events more completely on the AppServer and support moving complex screen-logic as Business Logic to the AppServer.
Business services can now return an instance of the Consultingwerk.CommonUi.UiControl class. The SmartViewerControl now provides new methods to support moving screen-logic to the AppServer. Those methods are also available through facades on the SmartViewerLogic class:
ASSIGN hScreenValues = THIS-OBJECT:GetScreenValuesDataset() .
Returns a dynamic ProDataset with the structure of the viewer’s DataSource’s ProDataset and a single record representing the screen-values of the viewer.
Developers are responsible for deleting this ProDataset instance.
In a client-side event handler, a call into a business task (aka presentation service) may be made passing the screen-value and receiving an instance of the UiControl object in return:
oUiControl = CAST (FrameworkSettings:ServiceAdapter:InvokeTask2 ("", "Demo.PresentationService.OrderPresentationService":U, "HandleCustNumChanged":U, INPUT-OUTPUT DATASET-HANDLE hScreenValues, ?), UiControl).
The HandleUiControl method then allows to process UI Control instructions from the UiControl instances, such as:
* enabling/disabling fields
* viewing/hiding fields
* setting the Infragistics StyleSetName of fields
* controlling the field that has focus
THIS-OBJECT:HandleUiControl(oUiControl, hScreenValues) .
When Save or Cancel of the viewer is completed, the viewer should reset the state of the fields:
THIS-OBJECT:ResetViewerState () .
Within the Business Task method, the UiControl is maintained like this:
METHOD PUBLIC UiControl HandleCustNumChanged (INPUT-OUTPUT DATASET dsOrder, piCustNum AS IntegerHolder): DEFINE VARIABLE oUiControl AS UiControl NO-UNDO . DEFINE VARIABLE oControl AS FieldControl NO-UNDO . FIND FIRST eOrder . ASSIGN eOrder.Instructions = "Handle with care" . oUiControl = NEW UiControl() . oControl = oUiControl:FieldControls:Add("Instructions") . oControl:Style = "error" . oControl:Enabled = FALSE . oControl = oUiControl:FieldControls:Add("Carrier") . oControl:Visible = FALSE . oUiControl:FocusFieldName = "Terms". RETURN oUiControl . END METHOD.
SCL-4416 Resolved issues in Toolbar Security Item Maintenance when multiple toolbars are contained in a Form
Description:
We have resolved issues in the Toolbar Security Item Maintenance caused by multiple SmartPanelController instances contained in a single form.
Story
SCL-4329 Swagger documentation supports methods that return an array of objects
Description:
The generated Swagger documentation for invokable methods that return an array of object now shows the correct schema for such methods, including whether the array is indeterminate or of a fixed size.