Release Notes 2018-08-01

Version Information

OpenEdge Release

Version Information

11.3.3, 11.3.4, 11.4, 11.6.2, 11.6.3, 11.7, 11.7.1, 11.7.2

Release 11.3 #47847@2018-08-01

OpenEdge 11.7.3 Product alert!

We've encountered a severe regression with the Progress Developer Studio Visual Designer in OpenEdge Release 11.7.3 (Service Pack 3 of OpenEdge 11.7). We won't announce formal compatibility of the SmartComponent Library with OpenEdge 11.7.3 for this reason. We'll inform once Progress Software has resolved this issue. 

Besides the issue with the Visual Designer however, we are not aware of any incompatibilities with OpenEdge 11.7.3. 

This article provides further details: Visual Designer related OpenEdge 11.7.3 product alert!!!

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: 

A login is required to participate in the forum. Don't be shy - create your account today!

OpenEdge 11.7 Service Pack 2

We are announcing full compatibility with the Service Pack 2 for OpenEdge 11.7 (OpenEdge 11.7.2).

See further remarks below.

Deletion of SmartDataAdapters and BindingSources

In SCL-2019 we have changed the clean-up behavior of the SmartDataBrowser control when a Form is closed. After this change, the SmartDataBrowser will delete it's linked SmartDataSource (e.g. SmartBusinessEntityAdpater) instance and DataSource (binding source). In rare cases, where those instances may still be required after the form containing the browser have been closed, developers can set the following new property of the SmartDataBrowser to FALSE:

 * Purpose: Controls if the SmartDataBrowser deletes it's SmartDataSource and DataSource
 *          when the Form is closed
 * Notes:

Your action may be required!

Changes to the SmartDB and SmartDB upgrade and migration utility

Announcing the SmartFramework ERD Designer

We are announcing the availability of the SmartFramework ERD Designer

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.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 we further recommend all customers to apply this hotfix as well. 

New Versions of Proparse .NET Assemblies (08 April 2018)

We have updated proparse with further enhancements in this release (see Please download the .NET Assemblies ZIP file from our ESD and replace the in your environment with the latest one. The new assembly reference is:

<assembly name=", Version=, Culture=neutral, PublicKeyToken=cda1b098b1034b24"/>

As proparse is used by our Business Entity Generator, this new version of the 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 methods for refactoring purposes. The most recent code in the Consultingwerk.Studio package relies on those methods. It's therefore mandatory to update proparse to this version.

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

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}

UTF-8 based deployments available

Starting August 14th 2016 we ship our source code also as UTF-8 encoded. The ZIP files ending with 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

Overview of included tickets


SCL-2247 Object master copy fails due to record conflict error


Copying an object master might have caused a runtime error indicating that attribute value records do already exist. This was typically caused when creating object instances inside a parent object instance (nested object instances) and the parent object instance was deleted prior to copying the object master.

The cause of this issue was a missing SmartRelation from the SmartObjectInstance table to itself deleting the nested object instances when the parent instance was removed.

This issue was resolved together with SCL-2261.

SCL-2261 Resolved invalid object instace guids in SmartLink records


We've resolved an issue where SmartLink could be left with invalid SourceObjectInstanceGuid or TargetObjectInstanceGuid values when the source or target object instance has been deleted from the container. The fix has multiple parts:

# We've added SmartRelation records from the SmartObjectInstance table to the SmartLink table both for the SourceObjectInstanceGuid and TargetObjectInstanceGuid fields
# We've resolved an issue in the SmartRelationService that resulted in the fact that the relations from the SmartObjectInstance table have been processed twice for the SourceSmartObjectInstanceGuid field as the query iterating the child records to be deleted was always built for the first relation defined between the two tabels
# The Object Master Maintenance Form reopens the container when instances have been deleted now. This is because deleting instances may delete links or nested instances and this is the most reliable way to ensure the form represents the current data from the repository database

The issue was resolved together with issue SCL-2247.

SCL-2264 SmartRelation service did not process delete's correctly when using an alternative name for the SmartDB


When the SmartDB &SCOPED-DEFINE in Consultingwerk/products.i was used to define a customized logical database name for the SmartDB, the SmartRelationService did not process relations correctly. This was caused by the fact, that the SmartDB Relations shipped by Consultingwerk reference the SmartDB under it's unmodified name "SmartDB". This caused that no relations to/from the table to be deleted have been found in the SmartRelation table.

This has been resolved by creating fixed versions of the cached SmartRelation records at runtime.

SCL-2284 Improved error handling from the RestServerSessionActivator class and Web Handlers


Early errors in our Web Handlers (like validating the Client-Principal seal did not result in reporting those errors correctly to the browser.

We have improved the error handling to ensure that we'll always be returning an error document to the browser.

SCL-2286 Business Entity Designer include generation failed when using -d dmy


We've resolved issues with the generation of the INITIAL value phrase for fields in temp-tables generated by the Business Entity designer.

SCL-2289 RESTful entities web handler - empty selection issues with Query String


The RESTful entities web handler was passing a query string like "FOR EACH eCustomer WHERE" to the Business Entity when no selection was provided by the caller. This might have caused issues with query manipulation code in the Business Entity or Data Access code. We're now avoiding the unnecessary usage of "WHERE".

SCL-2290 Fixed exist condition on the RequestUserTableStatusMonitor


The RequestUserTableStatusMonitor was only generating the output in the AppServer log file ( ) when there was output both for Index Reads and Data Reads. In situations, where due to the Table Range Size do data was reported for certain tables or indexes this might have surpressed certain output. This has been changed, so that output is made when there is data for Index Reads OR Data Reads.

SCL-2296 Copy of Repository object does now set the modified flag for the new object


We're now setting the modified flag for copied object master records in the repository.


SCL-1827 Implemented InputHelper method for complex input prompts


The InputPromptHelper:ComplexInput allows updating multiple properties of an value object through a dynamic dialog. The properties of the object are specified through an Array of PropertyInputSpec instances.

DEFINE VARIABLE oValue      AS CopyObjectMasterParameter NO-UNDO .
DEFINE VARIABLE lOk         AS LOGICAL                   NO-UNDO .

DEFINE VARIABLE oProperties AS PropertyInputSpec         NO-UNDO EXTENT 4 .

oValue = NEW CopyObjectMasterParameter() .

oValue:SourceObjectMaster     = THIS-OBJECT:smartBusinessEntityAdapter1:GetFieldValues("ObjectName":U) .
oValue:TargetObjectMasterName = "" .
oValue:ObjectTypeName         = THIS-OBJECT:smartBusinessEntityAdapter1:GetFieldValues("ObjectTypeName":U) .
oValue:ModuleName             = THIS-OBJECT:smartBusinessEntityAdapter1:GetFieldValues("ModuleName":U) .

oProperties[1] = NEW PropertyInputSpec ("SourceObjectMaster":U, "Source Object":U, TRUE, NEW ComplexInputTextBoxControl()) .
oProperties[2] = NEW PropertyInputSpec ("TargetObjectMasterName":U, "Target Object":U, NEW ComplexInputTextBoxControl()) .
oProperties[3] = NEW PropertyInputSpec ("ObjectTypeName":U, "New Object Type":U, NEW ComplexInputSmartBusinessEntityLookupControl("Consultingwerk/Windows/Framework/Repository/Class/ObjectTypeBusinessEntity.lookup":U)) .
oProperties[4] = NEW PropertyInputSpec ("ModuleName":U, "New Module Name":U, NEW ComplexInputSmartBusinessEntityLookupControl("Consultingwerk/Windows/Framework/Menu/ModuleBusinessEntity.lookup":U)) .

lOk = InputPromptHelper:ComplexInput ("Save Object As..."{&TRAN}, oValue, oProperties,
                                              NEW CopyObjectMasterParameterValidator()) .

    RETURN .

SCL-2214 Improvements to the Batch Business Entity Generator Plugin of the Business Entity Designer


The Batch Business Entity Designer plugin now stores previously used values/settings in the Windows Registry to simplify reusing the same settings for a different set of tables.

The plugin does now also set the "Default Search Code" flag for unique indexes.

SCL-2233 Customizability of class naming in the TableQueryBuilderGeneratorPlugin


The TableQueryBuilderGeneratorPlugin of the Business Entity Designer now properly supports using the SuffixTableQuery property so that a derived version of the plugin and use a different suffix value than "Query".

SCL-2235 Improved reordering of fields in large database tables


Reordering fields in the Business Entity Designer "Reorder fields" dialog does now work through drag and drop in the list of fields as well.

SCL-2251 Implemented FillFirst and FillLast methods in the DatasetModel


The DatasetModel classes now support a FillFirst and FillLast method. Those methods temporarily set the BatchSize to 1 and fetch data from the Business Entity.

DEFINE VARIABLE oCustomer AS CustomerDatasetModel NO-UNDO .
oCustomer = NEW CustomerDatasetModel () .
oCustomer:Customer:FillFirst() .


oCustomer = NEW CustomerDatasetModel () .
oCustomer:Customer:FillFirst() .

SCL-2268 ImageHelper:Load Performance Improvements by using an .resx file with all images


Through the new Consultingwerk.Util.IImageCache service interface (default implementation Consultingwerk.Windows.Util.ImageCache) it is now possible to cache PNG Images from disk in .resx files. This will improve the load time of images significantly. The ANT Script


is a sample for how the .resx Files can be created from all .PNG files in a folder structure. The usage of the .resx files is completely transparent to requesting the Images through the ImageHelper:Load method. The .resx files to be used for images should be referenced in the .applicationsettings file like this. Multiple .resx files are possible:

"LoadImageResources": {
    "1": "Consultingwerk/Windows/Images/images.resx"

SCL-2285 Added a link to the JIRA Service Desk Portal to the SmartComponent Library Desktop


As developers should be using the JIRA Service Desk primarily to report issue with when using the product, we've added a link to the utility to the SmartComponent Library Desktop.

SCL-2287 Business Entity Designer/BusinessEntityGenerator does now report which fields are invalid during code generation


We've improved the reporting of errors caused by invalid properties of fields in the Business Entity Designer. Errors do now also return the name of the field that caused the issue.

SCL-2288 Added support for additional query operators to the RESTful Entities


We've added support for EQ, GE, GT, LE, LT, NE, CONTAINS, MATCHES and BEGINS as operators to the RESTful Entities. Those operators can be used in square brackets like this:


SCL-2292 Added Cycle protection to LazyLoadingServiceCreator


In case a Lazy loaded service did reference another lazy loaded service in the constructor, this might have lead to infinite loops and crashes. We're now raising a meaningful error in those situations.

SCL-2294 When scl-gen is started without any parameters it should display the Confluence documentation



SCL-2295 Validation of the number of Parameters passed to the scl-gen Parameter template


When no further parameters are provided to the scl-gen Parameter script, we're now raising a meaningful error message.

SCL-2305 When closing a Form an (updatable browser) should reset the Column's EditorComponent


We are now setting the EditorComponent reference of all columns in all instances of the UltraGrid (and derived types) when a Form is closed.

This is to work around issues in the UltraGrid implementation which has cyclic references between the Grid and the EditorComponent which are not resolved when the Grid is disposed. See response from Infragistics support:

I have been investigating into the behavior you are referring to, and I have reproduced it. After profiling a sample project that reproduces this, I am seeing that the UltraCheckEditor appears to be hanging onto the UltraGrid by usage of a couple of event handlers – namely the SubObjectPropChanged event of the UltraGridColumn that the editor exists in, and possibly the Disposed event of the UltraGrid as well.

I have worked around this behavior by marking the EditorComponent of the column null prior to the UltraGrid attempting to dispose by handling the FormClosing event of the Form that contains the grid. I am attaching the sample that I used to test this. If you would like to cause the memory leak to see the difference, I would recommend commenting out this line in Form2.cs:

grid.DisplayLayout.Bands[0].Columns["IsChecked"].EditorComponent = null;

We have implemented this in the OnFormClosed method of the BaseForm class calling into a new Method of the GarbageCollectorHelper.

SCL-2308 Added a logical return value to the Remove... methods of our List and Dictionary classes


Not all variants of the List and Dictionary Remove methods (RemoveAt, RemoveKey, RemoveValue, etc.) were raising an error when the object to be removed did not exist in the list. As we could not change this behavior (it would break existing code), we've added logical return values to those methods that don't raise an error, so that developers can check if the remove operation was successful.

SCL-2310 Allow users to specify page guids when creating records with ObjectMasterBusinessEntity


Data ObjectMasterDataAccess class does now allow a consumer of the ObjectMasterBusinessEntity to pass GUID's for new created SmartPage and SmartLink records. When the consumer is passing in those GUID's, they are assigned to the created database records. If they are not passed in, the database triggers will create new GUID's.

This change allows a consumer to submit new SmartPage and SmartObjectInstance records referencing those SmartPage records in a single transaction.

SCL-2311 Removed copy of Kendo UI from Consultingwerk\Web\KendoUI


Those files were required for Angular JS or plain JavaScript Applications.

Customers can still use those features. We'll just remove those files from our development setup to reduce the size of our feature branches. We have never deployed those files to customers as Kendo UI has always been a component that needs to be licensed through Progress Software.

SCL-2312 The SmartSecurityCheckWebHandler (/IsRestricted) now supports also checking by key value and not only by GUID


Clients can pass to this Web Handler now either the GUID or the Key (e.g. Token Name) of a security item.

New Feature

SCL-2096 Implemented "Save As" in the Object Master Maintenance Form


We've added a new Button in the Object Master Maintenance Form which prompts the user for a Product Module and Object Name and stores the Object Master as a copy of the currently opened one.

SCL-2281 Added a human meaningful key to the SmartPage record


The SmartPage record in the Object Master Maintenance Form does now also have a human meaningful page key. This can be used by frontend developers to reference pages.

SCL-2300 Improvements to the ProDataset content assist in the Business Entity Tester


The content assist now allows a developer to continue typing while the content assist drop down is open.

SCL-2301 Resolved issue with loosing first typed character in the property sheets of the object master maintenance form


We have resolved this annoyance.

SCL-2313 Implemented Web Handler that returns Field Security (hidden/read only) to the caller


A new Web Handler was imnplemented ( http://localhost:8820/web/FieldSecurityCheck/eCustomer ) that returns a JSON structure with all fields that have security related restrictions for the current user, e.g.:

  "City": {
    "hidden": false,
    "readonly": false
  "Comments": {
    "hidden": true,
    "readonly": true
  "Country": {
    "hidden": false,
    "readonly": false
  "CustNum": {
    "hidden": false,
    "readonly": true
  "Discount": {
    "hidden": false,
    "readonly": false