Release Notes 2023-12-28

Version Information

OpenEdge Release

Version Information

11.7.9, 11.7.10, 11.7.11, 11.7.12, 12.2, 12.6, 12.7 CQC

Release 11.7 #78490@2023-12-28

Security Bulletin - log4j CVE-2021-44228

Further details: log4j CVE-2021-44228

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.6 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 12.6. We hereby declare OpenEdge 12.6 fully supported for the SmartComponent Library as of the release of  October 4th 2022.

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: 

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 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 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 debug information when errors are thrown from

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=, 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

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 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-4293 Update to OpenAPI version 3.1.0


The Swaggerfile.json templates used for generating Swagger/OpenAPI documentation has been changed to the latest version, 3.1.0. This is to prevent errors being raised when DELETE operations are defined with a request body (as is done with RESTful requests in the SmartComponent Library). Note that a warning is still showm, due to the HTTP RFC having no defined semantics for request bodies for DELETE, GET or HEAD operations.

SCL-4294 Fixed SmartPage.TabGroup exported with additional whitespaces


We have fixed the export of the TabGroup attribute in smartrepo files. Previously this attribute has been exported with an additional line break.

SCL-4301 DynamicFormWithRibbon: property WindowPositionRegistryKey always returned value "DynamicFormWithRibbon"


We have fixed an issue in the DynamicFormWithRibbon. Forms rendered with that rendering form type, always shared the same WindowPositionRegistryKey value. This issue is now resolved.

SCL-4302 Implemented Procedure that allows to test the correct versions of .NET Assemblies are included


The SmartComponent Library now includes a procedure


that can be used in build or deployment scripts to ensure the expected assemblies are deployed and included in assemblies.xml.

SCL-4304 Telemetry Toolkit: Runtime error in deactivate procedure caused request to remain "pending"


We have fixed an error that was causing requests that ended with a runtime error within the deactivate procedure to remain indicated as pending requests. Those requests are now also logged as finished requests and removed from the pending request folder.

SCL-4305 DatasetHelper:ChildRelationUnique did return field list without delimiter


We have fixed an issue in the DatasetHelper that did return the field list without the comma as the expected delimited.

SCL-4312 Handling of CASE-SENSITIVE Integer Fields in the Business Entity Designer


Weird but true. Customer’s database contained INTEGER fields that have been marked as CASE-SENSITIVE. This was the result of a DF file generation by a 3rd party ERD designer tool. The consequence was that the Business Entity Designer inherited the CASE-SENSITIVE setting on the INTEGER field which was causing compile-errors in the generated temp-table definition.

The CASE-SENSITIVE Attribute is now only inherited for CHARACTER and CLOB fields.

SCL-4317 Fields list now used in all cases for creating a collection response


The list of fields provided by a caller to the RestResourceFormatService’s BuildCollectionResponse is now used when no id field name is provided.

SCL-4318 Improved LookupRenderer handling of invalid field names


We have improved the LookupRenderes (GUI for .NET) handling of invalid lookup field names during rendering. Previously an error message might have been raised indicating an invalid buffer name.

SCL-4326 SmartRepositoryService's GetObjectMasterAttributeValue method may return invalid values


We have fixed the query used by the GetObjectMasterAttributeValue method of the SmartRepositoryService. The previous implementation may have returned an invalid attribute value.


SCL-4278 Support for RESTful invokation of methods without parameter object


Methods that have no parameter object can be invoked through a RESTful interface. Valid signatures for methods that can be invoked have the following characteristics:

* Zero to five INPUT-OUTPUT datasets or dataset handles.
* Zero or one INPUT parameter object. If used, the parameter object must be the last parameter defined.
* A void return value, or an OOABL type that is serializable to JSON (typically using the Consultingwerk.IJsonSerializable interface).

This includes methods that take no inputs and return no values, as well as methods that have only a single dataset INPUT-OUTPUT parameter.

More information is available at

SCL-4279 Swagger documentation shows enum values for temp-table fields with custom field types


Using the Business Entity Designer, temp-table fields may provide a custom field type, containing an enum of the field values. The character names of the enumeration members are generated into the Swagger document for the Business Entity, for request and response bodies, as well as for query string parameters for GET requests on collection RestAddresses. If the enum names have been mapped to custom strings, those custom strings will be used in the Swagger documentation.

SCL-4295 Added support for Rendering "BatchSize" of a MetaDataSource


The Repository now supports rendering of the BatchSize attribute of the SmartBusinessEntityAdapter.

SCL-4296 Implemented support in InputPromptHelper:ComplexInput for validation messages


Based on validators implementing the new Interface Consultingwerk.IValueObjectValidatorWithMessages we now support validation in the ComplexInput method of the InputPromptHelper that return a validation message per property instead of just a boolean values.

SCL-4297 Implement support in InputPromptHelper:ComplexInput for to/from Controls


The InputPromptHelper now supports a series of To..From fields that allow updating two properties of the value object in the ComplexInput method.

SCL-4298 Enable STAThread warning workaround for OpenEdge 12.2


More recent OpenEdge 12.2 releases include versions of the OpenEdge UltraControls that requires the UltraDockManagerSTAThreadWarningWorkaround switch in products.i to avoid error messages like this when launching the Business Entity Designer or our GUI for .NET main menu based applications:

The ‘AllowDrop’ property is set to true but the ApartmentState of the current thread does not support drag drop…

SCL-4300 Improved SmartDB upgrade and migration utility


We have improved the SmartDB upgrade and migration utility - especially when executed in environments without the source code of the SmartComponent Library or R-Code included in a procedure library. This includes:

* ignore issues when the Consultingwerk\frameworkversion.i file is not available
* ignore issues when the src/SmartDbTrigs folder is not availalbe

SCL-4303 ComplexInputPrompt now support rendering of lookups from the repository


The ComplexInputPrompt now supports rendering of lookups from the repository as shown by this sampel code:


USING Consultingwerk.*                                 FROM PROPATH.
USING Consultingwerk.Framework.RepositoryServices.*    FROM PROPATH.
USING Consultingwerk.SmartFramework.Repository.*       FROM PROPATH.
USING Consultingwerk.Util.*                            FROM PROPATH.
USING Consultingwerk.Windows.Util.ComplexInputPrompt.* FROM PROPATH.

DEFINE VARIABLE oParameter AS IntegerHolder NO-UNDO .

DEFINE VARIABLE oProperties AS PropertyInputSpec EXTENT 1 NO-UNDO .
DEFINE VARIABLE oRepository AS ISmartRepositoryClientService NO-UNDO .

/* ***************************  Main Block  *************************** */

oRepository = {Consultingwerk/get-service.i ISmartRepositoryClientService
                                "NEW SmartRepositoryClientService()"} .

oParameter = NEW IntegerHolder (42) .

oProperties[1] = NEW PropertyInputSpec ("Value",
                                        "Customer number",
                                        NEW ComplexInputSmartBusinessEntityLookupControl
                                                (SmartBusinessEntityLookupDescriptor:FromRepository("CustomerLookup":U))) .

InputPromptHelper:ComplexInput("Select customer", oParameter, oProperties, ?) .


SCL-4308 Maked code that looks for class names more robust


In the tooling of the SmartComponent Library, the ClassHelper API’s that return a temp-table with all ABL class names available to the runtime or developer session is rather essential. The method does rely on the RCODE-INFORMATION system handle. However in OpenEdge 12.5 to OpenEdge 12.8 the RCODE-INFORMATION handle is broken in some cases. While the expected R-Code version is 1200 for those releases, classes that use the new ability to override property implementations return an R-Code version of 1202. This results in error

Invalid version, 1202 (expected 1200) in object file <somew class>.r (2888).

We’re now handling error 2888 in the ClassHelper API’s and ignore those classes.

SCL-4316 Implement support for specifying fields for FetchData requests


A new Fields property on the Consultingwerk.OERA.IFetchDataRequest and its implementations allows control developers to specify which field values should be populated when retrieving data from a Business Entity. The Fields property contains a comma-separated list. Entries in this list may be unqualified field names, tablename.fieldname or tablename.* . Blank is the default value.

This property is populated for RESTful requests from the fields query string, or if none is sent from the client, from the RestAddress’s Fields property .

SCL-4319 Repository Viewer Designer now provides tool to "autofit" viewer size


The Repository Viewer Designer now provides a new button in the Ribbon. This button allows to auto-fit the viewer size to the controls contained in the Viewer.

SCL-4321 FieldRenderer now supports rendering of extended controls


The FieldRenderer now supports rendering of extended controls (e.g. custom UltraTextEditor derived controls) based on the new RenderingControlType attribute.

SCL-4322 Added method to JsonHelper to turn an extent of JsonSerializable ABL objects into a JsonArray


We have added a new method to the JsonHelper that turns an array (extent) of IJsonSerializable instances into an JsonArray

     * Purpose: Turns an ABL extent of JsonSerializable objects into an JsonArray
     * Notes:
     * @param poJsonSerializable The Array of JsonSerializable objects
     * @return The JsonArray
    METHOD PUBLIC STATIC JsonArray ToJsonArray (poJsonSerializable AS IJsonSerializable EXTENT):

SCL-4323 Support for returning an array of objects from an invoked task in a business service has been added to the ServiceInterface and RestEntitiesWebHandler classes.


Support for returning an array of objects from an invoked task in a business service has been added to the Consultingwerk.OERA.ServiceInterface and Consultingwerk.OERA.RestResource.RestEntitiesWebHandler classes. The return value arrays may be defined as fixed or indeterminate.

For RestMethods that are invoked by the _Consultingwerk.OERA.RestResource.RestEntitiesWebHandler_’s Handle*() methods, the returned

If the return value’s array has an indeterminate extent, then an empty JSON array is returned, otherwise an JSON array containing the serialized values of the array items. The return value must be defined as a class that implements the Consultingwerk.IJsonSerializable interface (which includes classes that inherit from Consultingwerk.JsonSerializable).

The existing InvokeTask and InvokeTask2 methods in the Consultingwerk.OERA.ServiceInterface class will return an instance of Consultingwerk.ObjectArrayHolder that contains the array returned by the invoked method.

The Consultingwerk.OERA.ServiceInterface class has number of new InvokeTaskReturnArray methods, that return an array of Progress.Lang.Object objects. The signatures of thes methods varies by the number of INPUT-OUTPUT DATASET-HANDLE parameters: there can be between 0 and 5, inclusive. The parameter object is also optional. An example of the signature appears below.

     * Purpose: Invokes a method in a Task class.
     * Notes:   When no MethodName is passed then "Invoke" will be executed as the
     *          default task method
     *          This method always returns an array, even if the invoked method returns a single value
     * @param pcTaskName The name of the task class
     * @param pcMethodName The name of the method of the task to execute
     * @param phDataset1 INPUT-OUTPUT DATASET-HANDLE The first dataset-handle parameter to the task method
     * @param phDataset2 INPUT-OUTPUT DATASET-HANDLE The second dataset-handle parameter to the task method
     * @param phDataset3 INPUT-OUTPUT DATASET-HANDLE The third dataset-handle parameter to the task method
     * @param phDataset4 INPUT-OUTPUT DATASET-HANDLE The fourth dataset-handle parameter to the task method
     * @param phDataset5 INPUT-OUTPUT DATASET-HANDLE The fifth dataset-handle parameter to the task method
     * @param poParameter The parameter object
     * @return The optional return value object as an array of the Business Task Method. If the task method does not return an
     *         object, then the parameter object is returned as an array of size 1.
    METHOD PUBLIC STATIC Progress.Lang.Object EXTENT InvokeTaskReturnArray (pcTaskName AS CHARACTER,
                                                                            pcMethodName AS CHARACTER,
                                                                            INPUT-OUTPUT DATASET-HANDLE phDataset1,
                                                                            INPUT-OUTPUT DATASET-HANDLE phDataset2,
                                                                            INPUT-OUTPUT DATASET-HANDLE phDataset3,
                                                                            INPUT-OUTPUT DATASET-HANDLE phDataset4,
                                                                            INPUT-OUTPUT DATASET-HANDLE phDataset5,
                                                                            poParameter AS Progress.Lang.Object):

SCL-4328 Implement ability to disable updating of last imported time stamp in Generic Data Importer


The Consultingwerk/SmartFramework/Repository/Tools/import-repository-data.p now allows to control if the last imported time-stamp is updated during import in the SmartConfigurationValue table.

SCL-4330 Added CountResultRecords method to Business Entity that does not require Dataset Parameter


We have added a new variant of the CountResultRecords method to the Business Entity base class:

 * Purpose: Counts the number of results of the query
 * Notes:   Used by the Generic JSDO Service to support the Count feature
 *          Supports STOP-AFTER: When STOP-AFTER occurs, the StopAfterNumResults
 *          value of the parameter object is returns as the Results
 *          <>
 * @param poParameter The CharacterHolder to receive the list of TOP-NAV-BUFFERS
 * @return The number of records returned by the query
METHOD PUBLIC INT64 CountResultRecords (poParameter AS ICountRecordsRequest):

This variant is not invokable through the service interface but simplifies usage when used from within backend code that does not require to call through the Service Interface.

SCL-4331 Security Realm Maintenance now supports opening Security Service


The Security Realm Maintenance now allows to open the Security Service implementation of the currently selected security realm record in the configured IDE (Progress Developer Studio or Visual Studio Code).

SCL-4332 Enabled Toolbar Security Item Maintenance for Dynamic Screens without a Ribbon


The Toolbar Security Item Maintenance is now fully functional for screens that only contain a SmartPanelController based toolbar and not a Ribbon.

SCL-4333 Consultingwerk.UltraControls Support Assembly for OpenEdge 12.8


In preparation for the certification of OpenEdge 12.8 we have build a version of the Consultingwerk UltraControls Support Assembly for Infragistics Version 23.1.20231.6.

SCL-4334 Upgraded PCT to 227 for OpenEdge 12.8 compatibility


In preparation for the certification of OpenEdge 12.8 we have upgraded the version of PCT ( ) included with the SmartComponent Library to 227. The previous version of PCT and the version included with OpenEdge 12.8 failed during the creation of an incremental DF file when executed with OpenEdge 12.8.