Release Notes 2021-11-02

Version Information

OpenEdge Release

Version Information

11.7.9, 11.7.10, 12.2, 12.3, 12.4

Release 11.7 #68469@2021-11-02

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-3510 Menu Renderer is now receiving the MenuStyleCode

Description:

The Menu Renderer class is now receiving the MenuStyleCode and thus can render custom menu styles.

SCL-3511 MenuRenderer now supports to render TaskList menu structures

Description:

The MenuRenderer class now supports rendering of TaskList style menu structures.

SCL-3539 Adding column to Grid in Visual Designer was throwing an error

Description:

We have resolved an issue in the SmartFramework repository grid designer. The issue prevented adding new columns to a grid in the WYSIWYG design view. The error raised was:

Invalid object type "?"

SCL-3549 Resolved issues in SmartToolbarStateController with multiple TableIO or Navigation Targets

Description:

We have resolved an issue in the SmartToolbarStateController (of the SmartToolbarController) which may have caused enabling the wrong state of the TableIO or Navigation buttons when linked to multiple viewers/grids/data adapters.

Improvement

SCL-3512 Support to change the same property for multiple selected controls in the Viewer Designer

Description:

The visual designer for MetaViewer object masters now supports applying a modified property value to all selected control instances.

SCL-3514 Web Rendering of Command Buttons in Repository Grid Layouts

Description:

We now support rendering of Button columns (command buttons) based no Buttons instances in the MetaGrid object master.

SCL-3515 Desktop Rendering of Buttons in Repository Based Grids

Description:

We now support repository based rendering of buttons in GUI for .NET based MetaGrid instances. The rendering is based on placing Button instances in the MetaGrid object master.

SCL-3517 Enabled support for RESTful invocation of CopySecurityAssignmentBusinessTask:Copy()

Description:

Implemented as POST to /web/Entities/SmartFramework/Authorization/CopySecurityAssignment

See https://sfrbo.consultingwerkcloud.com:8821/web/SwaggerEntities/html#/Consultingwerk.SmartFramework.Authentication.CopySecurityAssignmentBusinessTask/postSmartFrameworkAuthorizationCopySecurityAssignment for details.

SCL-3525 Added additional constructor to the Primitive Dictionary classes

Description:

We have added an additional parameter with a single CHARACTER parameter to the Primitive Dictionary classes. This parameter allows to set the delimiter used to store both the values and keys.

SCL-3526 Added option to use Include Fields and Exclude Fields option of ATTACH-DATA-SOURCE with the BufferDataSource

Description:

When using the BufferDataSource in a Data Access class we now support the additional parameters to the AttachDataSource method for passing the include and exclude fields arguments to the ATTACH-DATA-SOURCE method of the ABL buffer object handle.

SCL-3529 Added support for 10 arguments for Factory to create-instance.i Include File

Description:

The create-instance.i Include file for using the factory for creating object instances had a limitation of 8 positional parameters (2 ... 9) or 8 named include file parameters for calling into the Factory:CreateInstance method.

There's no reason for this limitation: The ArrayHelper:Array used supports up to 10 arguments and unlike SUBSTITUTE the positional arguments to include files are not limited to 9.

SCL-3530 StringHelper now has a method to remove the given characters from a String

Description:

The new API StringHelper:RemoveCharacters removes a list of characters from an input string

StringHelper:RemoveCharacters ("InputString", "IU") -> "nptStrng"

SCL-3536 Implemented Support SmartUpdatableBrowser as a GroupAssignSource

Description:

The SmartUpdatableBrowser now supports the use as a GroupAssignSource. This allows updating the same record in an updatable grid and one or many SmartViewerControl’s. Please note that when the same field is present in the grid and the viewer, developers will have to synchronize the values during update through client side code.

SCL-3540 Implemented Repository Lookup Dialog for Toolbar Buttons

Description:

We have implemented a lookup function for the buttons used on a MetaToolbar instance. The lookup is utilizing the buttons referenced in the .applicationsettings file. So it may be useful to define the Web2ToolbarButtonDefinitions in the .applicationsettingsfile too. Typically they are only set for the .restapplicationsettings file used by the AppServer by default.

SCL-3541 Business Entity Designer now validates for % in Field Name

Description:

The model validation of the Business Entity Designer now also checks for fields with the % sign in the name (commonly used in legacy ABL applications). The % sign in the field name is not supported when exposing the Business Entity schema to XSD.

SCL-3542 Dynamic Form Rendering now supports rendering based on custom Form

Description:

The rendering of MetaForm object masters (GUI for .NET repository rendering) now supports using a custom form type (derived from the DynamicForm class) based on the RenderingFormType property. This allows to use custom Form layouts (e.g. additional controls on form layout).

SCL-3545 Added a variant of RetrieveData() method to SmartDatasetAdapter that allows to set QueryString

Description:

To simplify programmatically opening a specific query (FetchDataRequest) from client logic, we have added a variant of the RetrieveData method of the SmartDatasetAdapter (e.g. SmartBusinessEntityAdapter) that accepts a CHARACTER parameter. The value of this property will be assigned to the data adapter’s QueryString property before calling the actual RetrieveData implementation.

SCL-3550 Method ShowLookupDialog of the SmartLookup (and derived implementations) is now public

Description:

We have made the ShowLookupDialog property of the SmartLookup class (GUI for .NET) public to support client logic to open the lookup dialog programmatically.

SCL-3551 Rendering of Grids from Repository now sets the matching Cell's Style for integer and decimal columns

Description:

When rendering Grids from the SmartFramework repository (GUI for .NET) we’re now setting the SmartDataBrowsers’s column style to Double or Integer based on the temp-table field’s data-type.

SCL-3552 Lookup Renderer now sets default LookupQuerySort based on KeyField

Description:

The LookupRenderer (SmartFramework Repository) now sets the default sort for GUI for .NET based lookups to the lookup’s key field when no LookupQuerySort property has been set for the lookup master or instance.

New Feature

SCL-3513 Now supporting the export of Repository Layout to JSON in Web Client

Description:

The object master designer now supports the exporting of the JSON layout (repository web rendering) also when executed in a thin-client configuration (e.g. OpenEdge Web Client).

SCL-3516 Added support for xl Window Size (Bootstrap 4) to repository datafields

Description:

We have added support for setting the new xl Window size (Bootstrap 4) to data fields used in a MetaGrid.

SCL-3518 Providing additional strong-typed variants of the DynamicForm:GetInstance() method

Description:

We now provide variants of the GetInstance() method of the DynamicForm that returns to the requested instance strong-typed:

METHOD PUBLIC SmartBusinessEntityAdapter GetSmartBusinessEntityAdapterInstance (pcInstanceName AS CHARACTER)
METHOD PUBLIC SmartDataBrowser GetSmartDataBrowserInstance (pcInstanceName AS CHARACTER)
METHOD PUBLIC SmartDatasetAdapter GetSmartDatasetAdapterInstance (pcInstanceName AS CHARACTER)
METHOD PUBLIC SmartToolbarController GetSmartToolbarControllerInstance (pcInstanceName AS CHARACTER)
METHOD PUBLIC SmartViewerControl GetSmartViewerControlInstance (pcInstanceName AS CHARACTER)
METHOD PUBLIC UltraTabControl GetUltraTabControlInstance (pcInstanceName AS CHARACTER)

Description:

We are now sorting the object instances in the object master designer’s link tab based on the instance name.

SCL-3522 Object Master Designer now proposes layout position when adding instance to a container

Description:

When adding instances to a MetaForm object master the object master designer now proposes the new available layout position.

SCL-3524 In Object Master Designer the lookup for design time data source is now filtered by type

Description:

When selecting an object master to be used as the design time data source for a MetaViewer or MetaGrid master, the lookup is now filtered to MetaDataSource object masters.

SCL-3535 Added customization options to SmartDynamicFilterControl

Description:

We have added events to the SmartDynamicFilterControl class to support more influence especially on the settings of the filter per field.

* default selected filter operator per column
* ability to change filter operator at runtime based on value
* allow to use cursor down in a filter field to focus a grid

SCL-3537 Implemented API in QueryHelper to count the results based on a Query String

Description:

We have implemented a new API in the QueryHelper class. This new API can count the results based on a Query String for either database tables or handles of temp-tables.

// Single table count 
iResults = QueryHelper:CountResults ("for each Customer where Salesrep = 'BBB'"). 

// Joined Queries 
iResults = QueryHelper:CountResults ("for each Order where Order.OrderNum = 42, each OrderLine of Order"). 

// A single Buffer Handle (e.g. temp-table) 
iResults = QueryHelper:CountResults ("for each eCustomer where Salesrep = &1", phBufferHandle). 

// Array of Buffer Handles (e.g. temp-table) 
iResults = QueryHelper:CountResults ("for each eCustomer where Salesrep = &1", phBufferHandles).

SCL-3538 Repository Maintenance now displays icon per instance type

Description:

So simplify navigation in the grid of instances in an large object master we have added a column to the instances grid that indicates the type of the instance.

Story

SCL-3527 GUI for .NET Form rendering now supports row- and col-span in the container grid

Description:

The rendering of forms (GUI for .NET repository) now supports the RowSpan and ColSpan attributes of the TableLayoutPanel.