Release Notes 2026-03-30

Release Notes 2026-03-30

Version Information

OpenEdge Release

Version Information

OpenEdge Release

Version Information

11.7.21, 12.2.19, 12.8.9, 12.8.11, 13.0.0

Release 11.7 #88997@2026-03-30

Retirement of OpenEdge 11.7

OpenEdge 11.7 has been retired by Progress Software on April 1st 2025. In consequence we urge all customers still using OpenEdge 11 to upgrade to OpenEdge 12.2 or 12.8 as soon as possible.

We are intending to drop the official support of the SmartComponent Library for OpenEdge 11.7 during the second half of the year 2025. We will then no longer ensure that new features of the framework will be usable with OpenEdge 11.7

Customers that are concerned by this intention, should reach out to us as soon as possible, so that we can discuss about a solution.

OpenEdge 13.0 support!

We are pleased to announce that we are not aware of any issues using the SmartComponent Library on OpenEdge 13.0. We hereby declare OpenEdge 13.0 fully supported for the SmartComponent Library as of the release of February 15th 2026.

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

PASOE / OEMANAGER VS Code Extension

Our first VS Code extension is available in the VS Code marketplace: https://marketplace.visualstudio.com/items?itemName=ConsultingwerkApplicationModernizationSolutionsLtd.oemanager

The extension supports developers with PASOE related routine tasks during development:

  • checking agent or session status

  • trimming the PASOE agents

  • restarting a new agent vai the ping request

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:

<assembly name="proparse.net, Version=4.0.1.1177, Culture=neutral, PublicKeyToken=cda1b098b1034b24"/>

<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"

"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

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

Export behavior added to SmartDataBrowser

The SmartDataBrowser component has been enhanced with Export behavior support, allowing users to export browser content to common file formats. This extends the functionality introduced alongside the related data browser improvements to include export capabilities consistent with other browser controls in the SmartComponent Library. The Export behavior is based on an Export link defined in a Toolbar/Ribbon linked to the SmartDataBrowser. This brings the Export behavior in line with the Angular web application.

.NET Consultingwerk Libraries for OpenXML processing added to the SmartComponent Library

The SmartComponent Library now includes dedicated .NET libraries for OpenXML processing, compiled for both .NET Framework 4.8 and .NET 8. These assemblies enable advanced document processing capabilities based on OpenXML standards. Developers should ensure their project references include the appropriate assembly variant for their target .NET runtime. No changes to existing code are required if OpenXML features were not previously used. These new libraries serve as the foundation for a series of follow-up tickets that will leverage OpenXML processing capabilities.

Window list panel added to GUI for .NET forms for managing running MDI and floating forms

A new Consultingwerk.Windows.Controls.WindowListManager class has been introduced, providing a popup window list panel accessible from the Ribbon in GUI for .NET main menu forms. The panel displays running MDI child forms and floating forms with their icon, title, and a close button, allowing users to activate any listed form with a single click. Developers can integrate the WindowListManager by instantiating it from the OnLoad event of a form, passing a reference to the toolbars manager and the target PopupMenuTool key named "WindowList". No changes are required in existing customer forms that do not use this new feature.

CRUD responses via @RestAddress now return the updated record by default

Business Entities using @RestAddress annotations now return the updated or created record in CRUD operation responses, improving API usability for front end clients. A new service interface has been introduced to allow customization of the response payload. No mandatory changes are required in existing customer Business Entities, as the default behavior is backward-compatible. The new behavior is optional and can be controlled by the Consultingwerk.OERA.RestResource.IRestUpdateResponseService implementation loaded: Consultingwerk.OERA.RestResource.RestUpdateResponseService (default) or Consultingwerk.OERA.RestResource.RestUpdateResponseWithRecordService.

Business Entity Designer plugin for maintaining Business Entity names per database table

A new plugin (Consultingwerk.Windows.Framework.System.Plugins.SmartTableRegistrationPlugin) was introduced to automatically register the Business Entity name for a database table after a Business Entity is generated. The registration is stored in the SmartFramework Database Table Maintenance. This enables the SmartFramework Server to reliably determine the correct Business Entity for a given database table at runtime.

Recently edited Object Masters now accessible from the SmartFramework Administration Recents menu

The SmartFramework Administration application's Recent menu has been extended to show recently edited Object Masters from the Object Master Designer. Developers can open recently edited Object Masters directly from the Recents menu, improving navigation speed in the designer.

SmartComponent Library certified for compatibility with OpenEdge 13.0

The SmartComponent Library has been tested and certified for use with OpenEdge 13.0. Compatibility was verified across the core framework components and no breaking changes were introduced. Developers can upgrade their OpenEdge installation to version 13.0 without requiring changes to SmartComponent Library-based applications.

ExcelUtility extended with spreadsheet cell and range styling support

The ExcelUtility.cls base class in the Consultingwerk.Utilities.Excel namespace now supports applying styles — including fonts, colors, borders, and number formats — to cells and ranges in OpenXML spreadsheets. Developers can use the new styling methods to produce professionally formatted Excel output from ABL code.

ExcelUtility enhanced with ABL-native row and cell insertion for OpenXML spreadsheets

The ExcelUtility.cls class in the Consultingwerk.Utilities.Excel namespace has been extended with ABL-native methods for inserting rows and cells into OpenXML spreadsheets. Developers can now use these new methods to programmatically build and populate Excel files directly from ABL code without relying on additional .NET wrappers for this operation.

WordHelper.cs C# class added to the Consultingwerk.Utilities.Support .NET library

A new C# class WordHelper.cs has been added to the Consultingwerk.Utilities.Support .NET library, providing the underlying .NET-level helper methods for OpenXML Word document operations. This class is consumed by the ABL WordUtility.cls layer and does not require direct use by customer developers.

WordUtility base class introduced as the central OpenXML Word document processing facility

A new class WordUtility.cls has been created in the Consultingwerk.Utilities.Word namespace, serving as the central facility for OpenXML-based Word document processing. It acts as the foundation for all Word document operations in the SmartComponent Library utilities. Developers should use this class as the base for custom Word document handling.

WordUtility extended with additional facilities to update existing Word documents

Additional update functionality has been added to the WordUtility.cls base class within the Consultingwerk.Utilities.Word namespace. These enhancements allow developers to update specific sections and content fields within existing Word documents using the OpenXML SDK.

WordUtility enhanced with facilities to update content in existing Word documents

The WordUtility.cls base class in the Consultingwerk.Utilities.Word namespace has been extended with new methods for updating content in existing Word documents. Developers can use these new capabilities to programmatically modify document content without recreating the entire file from scratch.

New Node.JS-based file watcher daemon added to trigger ANT tasks such as annotation extraction

A lightweight Node.JS-based file watcher daemon has been introduced to replace the unreliable ANT Target runner for triggering tasks like ExtractClassAnnotationsVsCode. The tool monitors configured folders for file changes and automatically fires ANT targets based on a JSON configuration file supporting multiple watch folders, file patterns, target lists, and configurable delay. Additional documentation is available at https://consultingwerk.atlassian.net/wiki/spaces/SCL/pages/3522134018/FSWatcher+Node.js+daemon+for+triggering+ANT+tasks. The tool can be used independently of any IDE, making it compatible with AI developer tools and terminal-based workflows.

OpenXML document merging support added to SmartComponent Library utilities

A new document merging capability has been introduced within the Consultingwerk.Utilities.Word namespace, allowing multiple OpenXML Word documents to be combined into a single output document. This was developed as a proof-of-concept for OpenXML-based document processing. Developers can use the new merge methods through the WordUtility class hierarchy.

Legacy GUI Migration Forms now support opening .w file in AppBuilder

The Legacy GUI Frame and Browse migration Forms now provide an additional button in the Ribbon that supports opening the currently opened file in the AppBuilder.

Fixed ExcelWorksheetImporter when the Spreadsheet contains erroneous data

All Excel Cells have an underlying DataType with a specified value, "n - number", "d -date", "s -string", etc,. When a Spreadsheet Row Cell has an erroneous value, then the DataType contains the type "e". When such a DataType is encountered then the process now informs the user of the Row & Cell of the erroneous Data Cell.

Fixed the Ambiguous match found issue with ExcelWorksheetImporter

The issue "Ambiguous match found" has now been resolved. The issue emanated from the usage of OpenXML IEnumerable within the OpenEdge 12.2 version. For further details, see https://community.progress.com/s/article/Getting-error-System-Reflection-AmbiguousMatchException-Ambiguous-match-found-working-with-NET-Generics.

Menu now supports hiding the Searchbar

A new property SearchFieldVisible has been added to Consultingwerk.Windows.Framework.Controls.MenuTreeViewControl. It exposes the Visible property of the search text editor at the bottom of the menu, allowing customer developers to hide or show the Searchbar programmatically via GET and SET. To hide the search bar, set SearchFieldVisible = FALSE on the MenuTreeViewControl instance.

Static Queries implemented in all SmartFramework Business Entities

All SmartFramework Business Entities have been regenerated with static data access queries, significantly improving read performance. Static queries are generated for the primary GUID index and the alternative Code/Name index of each Business Entity's primary table. The generated include files (e.g. ObjectMasterDataAccess_fetchdatastaticqueries.i) contain the static query definitions. DatasetModel classes now expose convenience constructors and filter methods (NewFilter, New<FieldName>Filter) for typed access. No changes are required by customer developers — the improvement is transparent.

Custom Fetch methods introduced across SmartFramework service packages

SmartFramework service packages have been extended with custom Fetch method implementations, providing more flexible data retrieval patterns for Business Entity consumers. Developers can override or extend these Fetch methods in derived Business Entities to implement package-specific retrieval logic.

Business Entity Designer no longer runs MERGE-CHANGES on original table eSmartObjectMaster

A bug in the Business Entity Designer was fixed where a MERGE-CHANGES operation was incorrectly run on the original eSmartObjectMaster table when its ORIGIN-HANDLE did not match the table used in GET-CHANGES. This caused an error (11923) when importing data fields for a new Business Entity. No action is required by customer developers.

Model Class Generator Plugin now validates search code indexes before code generation

The search code index validation in the Model Class Generator Plugin has been moved from the GenerateModelClasses method to the design validation phase. A new cancellable ValidateDesign event has been introduced in the BusinessEntityGenerator class and interface, fired from the OnValidateDesign method. The AbstractModelClassGeneratorPlugin class subscribes to this event in its handshake method and invokes the ValidateSearchCodeIndexes logic from there. As a result, validation errors are reported earlier during design validation rather than during code generation, improving the developer experience. No action is required by customer developers unless they have custom plugins that override the generation methods.

Server variant of the OEDT OedtCommentStylePlugin implemented

The OedtCommentStylePlugin has been refactored into a three-part structure following the established pattern for Business Entity Designer plugins: the shared abstract base class Consultingwerk.BusinessEntityDesigner.Common.Plugins.AbstractOedtCommentStylePlugin, the GUI plugin Consultingwerk.BusinessEntityDesigner.Plugins.OedtCommentStylePlugin, and the new server-side (MCP) plugin Consultingwerk.BusinessEntityDesigner.Server.Plugins.OedtCommentStyleServerPlugin. To use the server-side variant, register OedtCommentStyleServerPlugin in the ServerPlugins section of the .BusinessEntityDesignerSettings.xml configuration file.

ANT Target runner file watcher is now deployable via NPX without local installation

The Node.JS-based file watcher for triggering ANT tasks (such as annotation generators) can now be deployed and executed via NPX directly from the command line, without requiring a local installation. The package has been published to npmjs under the Consultingwerk organization account, allowing teams to run the tool with a single npx command. Documentation is available in SharePoint.

StatusManager for Server-side Business Entity Designer (MCP) implemented

A StatusManager has been implemented for the server-side Business Entity Designer (MCP). It routes Business Entity Designer status messages to the AppServer logfile, providing developers with visibility into the progress of MCP-driven generation operations. This is particularly useful when running batch generation tasks via AI agents where no GUI output is available. No action is required by customer developers.

Business Entity Generator log can now be exported to file from the GUI tool

The Business Entity Generator GUI tool now includes an export button that allows the generator log to be saved to a file. This makes it easier to review and share generation results, particularly when processing multiple Business Entities in batch. No action is required by customer developers.

Business Entity Designer MCP Server now supports regeneration of Business Entities

The Business Entity Designer MCP Server now supports regenerating an existing Business Entity via the MCP API. The regeneration can be triggered by passing the path to the .cls file, the .bedgm file, or the fully qualified class name of the Business Entity. This enables AI agents to fully automate Business Entity generation workflows without requiring manual interaction in the designer GUI.

Three new fields added to SmartUser

Three new reference fields have been added to the SmartUser table in SmartDB: UserReferenceChar (CHARACTER), UserReferenceDecimal (DECIMAL), and UserReferenceInteger (INTEGER). These fields follow the same pattern as the existing external reference fields in SmartLoginCompany and allow customer developers to store additional application-specific reference data per user. Customer developers should apply the SmartDB schema update included in this release to add the new fields to existing databases.

Bug in setup.xml for build 88770 fixed

A path separator bug in setup.xml was fixed that caused Linux builds for build 88770 to fail when locating the deprecated files directory. No action is required by customer developers.

Scripts added for per-branch SmartDB management in feature-branch workflows

New scripts have been introduced to support managing SmartDB databases on a per-feature-branch basis. Developers working with feature branches can now use the provided scripts to isolate their SmartDB changes, reducing interference between concurrent development branches.

Business Entity Designer Plugin now generates Mermaid Diagrams of Business Entities

A new Business Entity Designer plugin has been implemented that automatically generates an ERD diagram in Mermaid format when a Business Entity is generated. The diagram is written as a .md file alongside the Business Entity class file. The feature is implemented across three classes: the shared abstract base class Consultingwerk.BusinessEntityDesigner.Common.Plugins.AbstractMermaidDiagramPlugin, the GUI plugin Consultingwerk.BusinessEntityDesigner.Plugins.Plugins.MermaidDiagramPlugin, and the server-side (MCP) plugin Consultingwerk.BusinessEntityDesigner.Server.Plugins.Plugins.MermaidDiagramServerPlugin. To activate the feature, register the appropriate plugins in the .BusinessEntityDesignerSettings.xml configuration file.

Business Entity Designer MCP Server now supports adding additional tables to Business Entities

The Business Entity Designer MCP Server now supports an API to add an additional table to an existing Business Entity design. The new API accepts parameters for the parent table name, an optional relation name, and the relation field pairs. This extends the MCP Server's code generation capabilities, enabling AI agents to create multi-table Business Entities without manual intervention in the designer GUI.

SmartToolbarServerSideEventHandler now passes InputPrompts to handler methods

The SmartToolbarServerSideEventHandler (Consultingwerk.SmartComponents.Implementation.SmartToolbarServerSideEventHandler) now correctly passes InputPrompts to SSEH handler methods, in addition to Questions. It also checks for unanswered InputPrompts before executing the handler, consistent with the existing behaviour for Questions. Customer developers implementing server-side event handlers that use InputPrompts will automatically benefit from this change without code modifications.

GetDatabaseTableDetails MCP function now provides relation table role names

The GetDatabaseTableDetails MCP function has been extended to include relation details such as parent table role description, child table role description, parent cardinality, and child cardinality. This additional information enables AI agents and MCP clients to better understand the relational structure of the database schema. No action is required by customer developers.

Incorrect index definition for SmartCustomizationType in SmartDB corrected

An incorrect index definition for the SmartCustomizationType table in SmartDB was fixed. The CustomizationTypeCode index previously referenced the CustomizationTypeGuid field instead of the correct CustomizationTypeCode field. The fix applies to both SmartComponents4NET and SmartDB/dump. No action is required by customer developers; however, customers using this table should apply the database schema update included in this release.

Business Entity Generator now produces correctly indented AttachDataSource method arguments

The Business Entity Generator has been improved to use proper indentation (via FILL instead of hard-coded space strings) when generating AttachDataSource method arguments, both in initial generation and in regeneration within @AttachDataSourcesStart/@AttachDataSourcesEnd blocks. Developers regenerating existing Business Entities will see the corrected indentation automatically applied.

Typo in field name in ConfigurationValue table corrected

A typo in the SmartDB ConfigurationValue table was corrected: the field ConfiugrationValueData has been renamed to ConfigurationValueDate. Customer developers who reference this field name directly in their code should update their references accordingly.

Scrolling functionality added to the Table Properties section in Business Entity Designer

The Table Properties section in the Business Entity Designer now supports scrolling, matching the existing behaviour of the Index/Entity Properties section. This improves usability when working with Business Entities that have many table properties. No action is required by customer developers.

Git Branch info is now displayed in Business Entity Designer and Customer Explorer

The Business Entity Designer and Customer Explorer now display the current Git branch name in the UI, derived from git branch --show-current and matched against the branch information stored in SmartDB. This helps developers immediately see which branch they are working on without leaving the tool. No configuration changes are required.

Repository Diff Tool now sorts folders to the top of the treeview

The Repository Diff Tool now sorts folders to the top of the treeview instead of interleaving them alphabetically with files. No action is required by customer developers.

Cast issue in AuthorizationReportBusinessTask:GetSecurityRealmItems fixed

A cast issue in Consultingwerk.SmartFramework.Authorization.AuthorizationReportBusinessTask:GetSecurityRealmItems was fixed. The cast target was changed from BusinessEntity to IBusinessEntity for improved compatibility. No action is required by customer developers.

SmartFramework MCP Server Auth Key now based on user home directory file

The SmartFramework MCP Server auth key is no longer derived from the database unique key, which caused issues when using the init-branch script with fresh databases. Instead, the key is now read from a file located at ~/.smartframeworkmcp in the user's home directory (supported on both Windows and Linux). The file is pre-filled with a GUID on first use but can be customized freely by the developer. No code changes are required; developers should ensure the file exists or allow it to be created automatically on first startup.

Improved error message when creating a MetaDataSource with an invalid Entity Table name via MCP

When using the MCP server to create a Data-Source with an incorrect Entity Table name, the error message has been improved to clearly indicate the cause of the failure, replacing the cryptic 'Lead attributes in a chained-attribute expression must be type HANDLE' message. No changes required in customer code.

Fixed: Sorting by serialized field names in RestEntitiesWebHandler now correctly resolves to temp-table field names

A bug was fixed where RestEntitiesWebHandler:FetchDataRequestFromRestRequest() failed to translate serialized field names to actual temp-table field names in the sort parameter, causing OpenEdge error 7328. No changes required in customer code.

Business Entity Designer now supports marking fields as excluded from AttachDataSource, static queries, and table models

A new field FieldAttachDataSourceExcluded has been added to the Business Entity (eField), allowing individual fields to be explicitly excluded from AttachDataSource calls, static query field lists, and table model mapping information. The Business Entity Designer canvas now displays excluded fields with an (E) marker, and the generators for all three use cases have been updated accordingly. Developers can set this flag in the Business Entity Designer to prevent specific fields from appearing in generated AttachDataSource calls.

Forms created by the New Form Wizard are no longer incorrectly marked as templates

A bug in the template engine was fixed where forms generated from a template were inheriting the Template flag from their source, causing newly generated forms to be incorrectly treated as templates themselves. Existing forms that were incorrectly marked as templates may need to have the Template flag cleared manually.

Fixed: KeepAlive and reconnect logic in OERA connection handling now works correctly

A bug affecting the KeepAlive and reconnect logic in OERA connections has been resolved, ensuring stable connections when network interruptions occur. No changes are required in customer code.

Repository Integrity Report refactored to use Business Entity and Business Task architecture

The Repository Integrity Report has been refactored from a REST endpoint approach to a Business Entity and Business Task implementation, aligning it with the standard SmartComponent Library service architecture. Developers interacting with this feature should update any client-side integrations to use the new Business Entity and Business Task interfaces.

Fixed: MetaViewer Generator now correctly applies top/left alignment for text-box labels

A defect in the MetaViewer Generator caused top and left alignment settings to be ignored for text-box labels. This has been corrected so that label positioning is applied correctly during MetaViewer generation. No changes are required in customer code.

MCP server executable now supports --httpTimeout startup parameter

A new --httpTimeout startup parameter has been added to the MCP server executable, allowing developers to configure the HTTP timeout in seconds for session-free and session-managed server models. The parameter maps directly to PROGRESS.Session.HttpTimeout. Pass the desired timeout value as an integer when launching the MCP server .exe to override the default timeout.