Release Notes 2026-07-06

Release Notes 2026-07-06

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 #89310@2026-07-06

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

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

Repository Attributes can now use SmartLookup or SmartCombo definitions for value selection

Repository Attributes now support new Lookup and Combo lookup types, so the Attribute Value cells in the property grid can render a SmartBusinessEntityLookup (configured from a .lookup file) or a SmartComboEditor (configured from a new .combo file). Only the displayed value is bound to the property value, not the hidden lookup key value. The feature is supported in both the Windows and the web variant.

Workflow engine implemented

A workflow engine has been implemented based on the workflow maintenance from SCL-127 and the documented Workflow Engine requirements. It allows workflows to be defined and executed within the SmartComponent Library, providing the foundation for status-driven business processes.

Added rendering support for treeview container forms

A new rendering class, DynamicTreeViewFormRenderingService, renders treeview-based forms as an extension to the DynamicForm for both the Windows (.NET) and the responsive web UIs. The rendered DynamicTreeViewForm uses a SplitContainer with a treeview on the left side to launch folder windows, in a Dynamics-style layout. Developers can use this to build tree-driven navigation forms from the repository.

Workflow execution log added to track workflow status transitions

Status transitions of a SmartWorkflowInstance are now mandatorily logged (who, when, what) through the new WorkflowExecutionLogBusinessEntity. The logging is provided as a service behind an interface, with a default implementation based on the SmartDB. Customers can plug in their own implementation of the interface to store the workflow execution log elsewhere.

Improved performance and added status feedback when importing tables and relations into SmartDB

Importing database tables and relations into the SmartDB is now significantly faster, especially when working with an attached DF file and a remote database server. During the import, status information is now displayed in the user interface so developers can follow the progress.

Improved: Unique key violation errors now parse field names and values into a structured dictionary

The parsing of ABL runtime error 132 ("already exists with ...") has been improved so that the RecordAlreadyExistsException now exposes a dictionary mapping the violating field names to their values. The logic in RecordAlreadyExistsException.FromSysError, ErrorHelper and Error132Info handles both database tables and temp-tables across OpenEdge versions, including the version-dependent cases where field labels are omitted from the runtime message. FromSysError now also receives the buffer handle so that field names can be reconstructed from the buffer's unique indexes when they are not present in the message. No changes required in customer code.

Swagger to ABL generator added for generating ABL classes and REST clients from Swagger files

A new Swagger to ABL generator has been added that creates ABL classes from the types defined in a Swagger file, supporting generation of all types or a single type with its dependencies, interfaces for oneOf references, and callbacks for customizing package and class names. The generator also produces REST clients for selected paths and methods, inheriting from the RestClient class, with support for Credentials, API key and cookie based authentication and exception handling for 4xx and 5xx responses. Developers can drive the generation through the accompanying GUI worker class.

Swagger documentation now supports @RestMethod responses whose return type is an interface

The Swagger generator can now document @RestMethod methods whose return type is a plain interface (for example IOrderDetail) instead of failing with an UnsupportedReturnTypeException. SwaggerRestEntitiesGenerator:GetInvokeResponseSchema now builds the response schema by reflecting over the interface's public properties via GetResponseEntityClassSchema and SwaggerHelper:GetTypeReflectionSchema, registering it once under components/schemas and referencing it via $ref, with array (extent) wrapping honoured. The UnsupportedReturnTypeException is still raised for return types that can neither be instantiated nor reflected.

Swagger documentation can now be generated for RestMethodResponse return values

The RestMethod annotation now lets developers optionally describe the response bodies returned through the RestMethodResponse class, including JsonSerializable and XmlSerializable entities. New attributes (such as responseEntityClassName) allow the response schema and content-type to be declared so they appear in the generated Swagger/OpenAPI documentation.

New Translation by Keys window visualizes translations as a hierarchical tree

A new "Translation by Keys" window (TranslationByKeyForm) presents translations as a tree built from the period-delimited translation key, shown next to the existing Translation Maintenance viewer in a splitter. The tree is supplied by a new ISmartTreeNodeProvider implementation registered as a service in Consultingwerk/SmartFramework/services.xml, with levels for scope, the period-delimited key segments and language (with the correct flag). It is available in parallel to Translation Maintenance from the System Menu.

New Quicksearch component added for form- and window-level quick searches

A new Quicksearch component (a text field with a magnifying-glass button) has been added at form and window level. Users can enter a search string and press Enter or click the magnifying glass to issue the 'QuickSearch' named query with the 'q' parameter. The component can act as a filter source for a SmartBusinessEntityAdapter or MetaDataSource and supports repository rendering for both web and Desktop.

Shorter, less deeply nested ABL type names are now generated from Swagger documents

The Swagger-to-ABL code generation has been refactored so that the SwaggerToAblConverterForm, SwaggerClientGenerator and SwaggerSchemaObjectGenerator produce shorter type names and a flatter package structure, avoiding the file-name length limits that previously caused build failures. Duplicate class generation for identical JSON schema elements is now avoided. JSON serialization remains compatible with existing endpoints such as OEManager and CyberSource, as verified by round-trip unit tests.

SmartDbManager now uses a modernized header banner matching the Consultingwerk theme

The SmartDbManager header has been restyled with a modern banner that follows the standard Consultingwerk theme, for a more consistent look across tools. This is a purely visual improvement; no changes are required in customer code.

FormLruController support added for dynamic, repository-based forms

The FormLruController (introduced in SCL-323) can now be used by dynamic, repository-based forms (DynamicForm / FormLogic) and not only by hand-coded forms. It is driven by two new repository properties: LruDisplayFieldList, which defines the comma-delimited list of fields used to build the LRU display text, and LruStoreAfterUpdateRecord, which controls whether a new LRU entry is stored after a record is updated. Developers configure the feature directly through these repository properties.

New IBusinessEntityTesterCustomizer implementation for standalone Business Entity Tester usage

A new implementation of the IBusinessEntityTesterCustomizer interface has been added that does not depend on the Business Entity Designer's DatasetController, allowing the Business Entity Tester to be run in standalone mode. The UltraBusinessEntityTesterForm and BusinessEntityBrowserForm now provide a settings form to register a custom services file, and read the Business Entity, dataset and data access names directly from the .bedgm file when no controller is available. Developers can configure the service through the File menu options and the businessentitytesterservices.xml registration.

Repository MCP server actions now return a Web Repository URL to the affected object

The SmartFramework MCP Server procedures now include a repositoryDesignerUrl attribute in their response JSON, providing a clickable link to the affected repository object in the Web Repository so coding agents such as Claude can open it directly in the Designer. The URL is built from the new McpServerRepositoryDesignerUrl configuration property (resolved through IConfigurationProvider) appended with the object name, and is only included when that property has a value. get-data-sources.p now returns an array of JsonObjects, each carrying a dataSourceName and a repositoryDesignerUrl attribute.

EventDispatcherService can now consume the before-image of screen values for BUFFER-COMPARE

The backend EventDispatcherService has been extended to read the before-image of the screen values delivered by the front end in the 'prods:before' section of the 'screenvalues' payload. For each buffer, the before-image values are now populated into the buffer's before-buffer, so that event handlers can perform BUFFER-COMPARE between the before- and after-values to detect actual field-level changes. This complements the front end work tracked in SCLNG-1325.

Added an ASCII menu launcher for workspace scripts (Scripts\scl-menu.cmd)

A new interactive ASCII menu launcher (Scripts\scl-menu.cmd) lets developers pick and start common workspace scripts using a highlighted selection bar with arrow-key navigation, instead of remembering and typing individual script names. The actual menu UI may be rendered by a PowerShell script located in the Scripts\PS1 folder.

Object type of a repository master can now be changed from the SmartObjectMasterForm

A new 'Change Object Type' ribbon button in the SmartObjectMasterForm lets developers change the object type of a repository master directly. The button is enabled only on the first tree view page when nothing is being edited. When clicked, it collects the required parameters through an input prompt and calls ISmartRepositoryService:ChangeObjectType to perform the change.

Repository Viewer Design View: added Enable and Disable buttons for selected controls

The Repository Viewer Design View (ViewerDesignerControl) now provides Enable and Disable toolbar buttons that set the enabled state of all currently selected controls on the design canvas. The buttons are only active when at least one control is selected. Developers can use them to quickly toggle the enabled property of multiple controls at once.

Improved stretch mode of repository template forms by adjusting split container height

The split container height in repository template forms was reduced from 900 to 200 to provide a better stretch mode experience. In addition, the form's TITLE attribute is now set to match the template name instead of a generic value such as Product Maintenance.

New form wizard can now update attributes of the new master and selected instances

The new form wizard (NewFromTemplateWizardForm) now includes an additional page that lets developers update certain attributes of the new master and selected instances before the object is generated. Examples include the title attribute of the master and the form and foreign fields of the data source instance. The new page is inserted after the placeholder-replacement pages and before the final naming page.

Fixed: Default Components buttons now work on a newly created form

The Default Toolbar, Splitter and Tab Folder buttons in the Default Components ribbon group on the Instances tab of the SmartObjectMasterForm did not work on a newly created form and only functioned after reopening an existing form. They now work immediately on newly created forms. No changes required in customer code.

Repository Viewer Designer: double-clicking a boolean property name now toggles its value

In the Repository Viewer Designer property sheet, double-clicking the name of a logical/boolean property now flips its value between true and false. This makes editing boolean properties faster, without having to open the value editor.

Fixed: checkbox labels now convert to the repository and checkbox alignment corrected in migrated .NET MetaViewer

During Legacy GUI Frame migration, checkbox labels were not written to the repository and the migrated checkboxes were misaligned in the .NET MetaViewer. Both issues have been fixed so checkbox labels are now converted correctly and the checkbox layout is stable. No changes required in customer code.

Improved Business Entity Designer startup by removing the panel flicker

During startup of the Business Entity Designer, a white panel briefly appeared in the top-left corner and overlapped the main Ribbon before being positioned on its UltraDockManager panel, causing a visually jarring flicker. The startup sequence has been improved so the panel is positioned correctly from the start and the flicker no longer occurs. No changes required in customer code.

Added unit test verifying all Business Entities referenced in the repository exist

A new unit test verifies that every Business Entity referenced through the EntityName attribute of MetaDataSource, MetaBusinessEntityLookup and MetaBusinessEntityComboBox elements actually exists on disk and can be accessed via ServiceInterface:FetchDataset. This helps catch broken repository references early during development.

Fixed: 'Where used' tab in SmartObjectMasterForm now shows the correct record count

The 'Where used' tab in the SmartObjectMasterForm previously displayed an incorrect record count (always 1) on the tab label until a manual refresh. The tab label now reflects the correct number of records immediately. No changes required in customer code.

Fixed: Repository Diff tool no longer aborts when two .smartrepo files share the same ObjectMasterGuid

The Repository Diff tool previously aborted the entire diff load when two .smartrepo files on disk carried the same ObjectMasterGuid. This has been fixed so the diff can still be reviewed in this situation. No changes required in customer code.

Repository Diff tool now deletes multiple selected files with a single confirmation

The Delete File function in the Repository Diff tool now supports deleting multiple selected .smartrepo files in one action. A single confirmation prompt lists all files to be deleted before any deletion happens, instead of prompting separately for each file. Developers can take advantage of this through the existing multi-selection in the diff tree.

Multiple database fields can now be dragged and dropped at once in the Business Entity Designer

The Database Fields view of the BusinessEntityDesignerForm now supports selecting and dragging multiple database fields onto a TempTableShape on the design canvas. The "Keep source field information for the new field?" prompt is shown only once for the whole selection and is phrased in plural or singular depending on how many fields are dragged. The question about adding source tables is asked per field, but only when the field's table is not yet a source table of the target temp-table.

OPTIONS requests are now supported for RESTful entities

The RestEntitiesWebHandler now handles HTTP OPTIONS requests, reporting which methods (GET, POST, PUT, PATCH, DELETE) are supported by an endpoint. Generation of the OPTIONS response is implemented in the new RestEntitiesOptionsProvider service (IRestEntitiesOptionsProvider interface) and works for both @RestMethod and @RestAddress endpoints. The reported methods reflect both the endpoint definitions and the user's privileges as evaluated by the SmartRequestAuthorizationProvider.

Recently used Business Entities and Business Tasks can now be reopened from an LRU list in the Business Entity Browser

The BusinessEntityBrowserForm now offers a last-recently-used (LRU) list, managed via the FormLruController. Double-clicking a Business Entity or Business Task in the package overview treeview adds it to the list, and selecting an item from the LRU navigates to it in the package overview and opens the Business Entity Tester control for that class.

Fixed: Grid design tab in the Object Master Designer no longer enters update mode without changes

The desktop Object Master Designer no longer incorrectly puts a grid's design into update mode when the design tab is opened a second time, and the Open button on the ribbon now remains enabled. No changes required in customer code.

SmartConfigurationValue retrieval and maintenance now exposed via REST endpoints

ConfigurationValueBusinessEntity now exposes SmartConfigurationValue settings over plain HTTP. It implements ISupportsRestMethods so the existing GetConfigurationValueByGuidOrName GET method is published in the Swagger/OpenAPI catalog, and it carries @RestAddress record and collection annotations keyed by ConfigurationValueName for get-by-name, list, create, update and delete. A new StoreConfigurationValue PUT method provides create-or-update (upsert) semantics by name, using the new SetConfigurationValueParameter class that carries one typed property per value column so values of any supported datatype (character, integer, int64, decimal, date, datetime, datetime-tz, logical) round-trip without string parsing. ValidateData now enforces the SystemOwned rules: such rows cannot be deleted, and their name and SystemOwned flag cannot be changed, while their value columns remain updatable so internal framework writes keep working. Developers can call these endpoints with no JSDO catalog on the client.

Fixed: Discarding grid changes in the design tab no longer leaves the master tab in update mode

Making changes to a grid in the design tab, switching to another tab and discarding the changes previously left the master tab in update mode even though no changes remained. The master tab now correctly returns to its non-modified state after the changes are discarded. No changes required in customer code.

Fixed: SmartWorkflowActivityViewerControl no longer errors when a workflow has no activities

Navigating to a workflow that had no activities previously raised error 7331 because RefreshResultStatusCombo in SmartWorkflowActivityViewerControl read the WorkflowGuid even when no current activity row was available. The method now guards the field read with the adapter's Available property and produces an empty value list instead of repositioning to a non-existent rowid. No changes required in customer code.

Fixed: FormClosing confirmation (SFR:1) now appears in the foreground when closing a background form via the taskbar

When closing a non-foreground form via its taskbar icon, the FormClosing "are you sure" confirmation (framework message SFR:1) previously appeared hidden behind other windows. The shared FormClosing / message-prompt handling now brings the confirmation to the foreground without making it TopMost, so the user sees the question but can still bring other windows in front of it. No changes required in customer code.

Fixed: Security Assignment Verification grid now lists records in the correct order

The grid on the Security Assignment Verification form now orders records correctly: the User row first, then the user's direct group assignments, then the parent groups. No changes required in customer code.

Recently-used (LRU) list added to the Security Assignment Verification form

The SmartAuthorizationAssignmentVerificationForm now keeps a most-recently-used list of verified combinations using the existing FormLruController (Consultingwerk.Windows.Controls.FormLruController). Each successful "Verify Security Assignment" stores the Security Realm, User and Security Item, showing Realm Code, User Name and Security Item description; entries persist across closing and reopening the form via the ISettingsService. Selecting an entry restores the three inputs and re-runs the verification automatically.

GUI client startup accelerated by bundling menu, authorization and repository AppServer round-trips

New parallel server-side bundling endpoints assemble the main menu structure, the authorization/security context and the repository object-type hierarchy on the server, replacing the roughly 55 fine-grained AppServer round-trips the GUI client previously issued during startup. The highest-impact change bundles the menu build (including menu items, functions and translated labels) into a single call instead of about ten per-node GetMenuStructure calls. Existing endpoints remain unchanged for existing callers, and rendered menu and authorization behaviour is identical for a given user.

AppServer startup optimized: repository object-type hierarchy retrieved in a single round-trip

The client previously walked the repository class hierarchy node-by-node, issuing roughly 24 AppServer round-trips per startup against ObjectTypeBusinessEntity (FetchDataByStaticQuery, GetChildClasses and FetchData). A new server endpoint now assembles the full object-type / class-type hierarchy in one call by fanning out on the server, and the client startup path warms its cache from the bundled result. The existing endpoints remain unchanged for existing callers and the resolved class hierarchy is identical for a given user.

AppServer startup optimized: authorization and session bootstrap bundled into a single round-trip

A new server-side get-startup-authorization-context endpoint bundles the authorization and session bootstrap data (restricted tokens, field authorization, and the security realm, object, token, field and toolbar item sets) into a single AppServer round-trip that fans out on the server. The existing SecurityService and Business Entity endpoints remain unchanged, and the corresponding client caches are warmed so subsequent per-invoke lookups are served locally. Authorization semantics are preserved exactly.

Fixed: Resetting DatasetModel:UseDedicatedBusinessEntity to the unknown value no longer throws on Service Adapter (AppServer) clients

On AppServer clients using the Service Adapter, resetting DatasetModel:UseDedicatedBusinessEntity to the unknown value (?) incorrectly raised 'Unable to use dedicated business entity when not using the Service Interface', because the guard tested 'arg <> false' and the unknown value satisfies that comparison. The setter in Consultingwerk.OERA.DatasetModelPerformer now guards on 'arg = true', so only an explicit force is rejected while the default (?) and false pass. No changes are required in customer code.

Fixed: Main menu now renders correctly in fat-client scenarios after the menu structure bundling change

A regression introduced with SCL-5367 caused the main menu not to render in fat-client scenarios (an in-process AppServer with a local SmartDB connection), because the bundled MenuBusinessEntity:GetMenuStructures wrote its result through class-level static buffers instead of the caller's BY-REFERENCE dataset. The bundled output is now written through the parameter dataset handle, so the merged menu rows reach the client's dataset. AppServer clients continue to render the menu with the single bundled round-trip and are behaviourally unchanged. No changes are required in customer code.

Added: Unique key violation messages now resolve foreign key GUID values to readable parent record descriptions

The RecordAlreadyExistsException now resolves foreign key values such as GUIDs from a violated unique index into human-readable parent record descriptions. Resolution uses the IRelationService.GetParentDescriptionForFieldValue method together with the Business Entity's SourceColumn method to map temp-table fields to their underlying database fields, with the Business Entity name supplied by the SmartBusinessEntityAdapter and SmartDatasetChildAdapter. When SmartDB is not connected, all lookups are bundled into a single AppServer call via ServiceAdapter.InvokeTask2, and the message template is obtained from the repository database through the MessageProvider service's GetMessageTemplate method. No changes required in customer code.

Fixed: Repository developer menu 'Clear Cache' eraser icon now loads correctly

The 32px eraser icon file used by the runtime repository developer menu was misnamed with an invalid non-ASCII character, which prevented the 'Clear Cache' image from loading and caused repository check-out/sync problems in some customer environments. The file has been renamed to eraser_32.png to match the reference in RuntimeRepositoryDeveloperMenuRenderer. No changes required in customer code.

Repository dump now produces consistent LOB file names between runs

The dump-repository target in DB/build.xml now uses a customized Data Dictionary dump routine (via a PCTRun invocation of the new wrapper procedures Consultingwerk/Studio/ProdictDumpHack/scl-dump-d.p and scl-dump-tables.p, with the ProdictDumpHack routines first on the PROPATH) instead of PCTDumpData. LOB file names are now derived from the record's GUID rather than a changing sequence counter, so repeated dumps no longer produce renamed .blb files and eliminate unnecessary noise between dumps. A SmartUnit test (Consultingwerk.StudioTest.ProdictDumpHackTest) verifies that dumping a LOB table twice yields identical file names. The customized dump remains load-compatible with the standard Data Dictionary load routine, and the dump-repository.cmd script needs no changes.

.

.

Scheduler Job Status Monitor now shows multi-line, selectable and copyable Status Text

The Status Text field in the Scheduler Job Status Monitor is now a multi-line editor, so long status messages are fully visible without truncation. The viewer (SmartSchedulerJobStatusViewerControl) now uses the SmartViewerControl feature ReadOnlyDisabled = true, which renders all text editors as read-only rather than disabled, allowing developers to select and copy field content to the clipboard while it remains non-editable. No changes required in customer code.

Setup now supports loading database schema and repository data as separate steps

The Setup/setup.xml build file has been refactored so the schema-update and repository-data pipelines are now dedicated, independently invokable ANT targets: UpdateDatabaseSchema (create reference database, build and post-process temp/delta.df, load the delta) and LoadRepositoryData (import the JSON manifest and the .smartrepo files). Both can be run standalone (e.g. ant -f setup.xml UpdateDatabaseSchema) with their own connection setup, validation and credential prompting. The overall setup target keeps its previous behaviour and ordering by calling the new targets via antcall. This enables CI/CD pipelines to load schema changes at the start and defer loading of repository data until after compilation, improving pipeline performance.