Changelog 4.1

info

For a brief overview of the changes, see our Release notes.
For information on upgrading from previous versions, see the Atoti Limits Migration Notes.

4.1.0

2025-05-28

Added

Issue Key Details
LIM-1335 Data permissions in Atoti Limits are now applied to the KPIs and calculated members created by the module in the business cube.
LIM-1378 Added a cache service to store structures/limits that exist on the business server to speed up evaluations.
LIM-1403 Atoti Limits now sends notifications to the UI when the initial data load completes, limit evaluations complete, and to users with the approval role when a FourEyes limit is created.
LIM-1444 The newly developed Audit Service has been added and updated the version of workflow-core.
LIM-1488 Moved the IAuthenticatedLimitsUserService to limits-common and created a new implementation in limits-activeviam to assist with tasks requiring unrestricted access to Atoti Limits data.
LIM-1489 Updated dependencies for the Common Spring Services (audit-service and notification-service) to import the services from common-spring-services-bom.
LIM-1494 Added an FAQ page in the Roles and Permissions documentation.
LIM-1511 Updating Limit KPIs will now trigger a refresh of the application server’s data model in the UI.
LIM-1514 Atoti Limits has been upgraded to Atoti Server 6.1.3. The 6.0.X and 6.0.X-sb3 modules have been upgraded to use Atoti Server 6.0.18 and 6.0.18-sb3 respectively.
LIM-1517 sourceLimitId is now validated when temporary limits are created. This field should reference the limitId of the parent limit.
LIM-1531 Added a property limits.cube.scope-hierarchies-enabled that can be used to disable scope hierarchies to improve loading performance for large cardinalities of limit scopes.
LIM-1538 Added the Audit screen to the Atoti Limits UI.
LIM-1565 A new service, JfrService, has been added to enable recording Java Flight Recordings (JFRs) on the fly.
LIM-1573 Added properties for controlling which user roles will receive the server started and evaluation completed notifications.
LIM-1596 Files can now be saved as attachments at each step of the default workflows.
LIM-1600 Incident differences are now visible in the audit history.
LIM-1601 Limit incidents can be reviewed directly from an incident’s linked dashboard.
LIM-1604 Files saved as attachments in the workflow are now restricted to certain file types which are defined by the ‘limits.workflow.allowed-file-upload-extensions’ property
LIM-1756 Updated the version of common-spring-services-bom to 1.0.1 and workflow-core to 2.5.0.

Changed

Issue Key Details
LIM-1241 Errors that occur during the validation of limits and incidents are now reported in a more consistent format.
LIM-1434 Temporary limits are now grouped under their source limit.
LIM-1456 Atoti Limits now uses the IConfigurationService instead of REST requests to execute MDX statements when creating Atoti Limits calculated measures to improve performance.
LIM-1469 Server-side limit structure errors are shown alongside the offending field in the UI.
LIM-1490 The Inter Server event service that sends events from Atoti Limits to the connected server has been extracted into it’s own module.
LIM-1501 Migrated workflow-related constants to dedicated class, WorkflowConstants.
LIM-1525 Improved performance of limit evaluations by skipping unnecessary retrieval of limit workflow information.
LIM-1552 Only required folders are now fetched from the connected server when resolving calculated measures.
LIM-1560 Use one global CalculatedMeasuresResolver to speed up queries on limits on calculated measures.
LIM-1592 The APIs for validation errors and error handlers have been updated to improve error handling. See the 4.1 migration notes for the list of changes to migrate your custom errors and/or error handlers.
LIM-1603 Improved the default validation error messages provided by Atoti Limits to have a more consistent format and better readability.
LIM-1635 The logic to filter objects based on user data permissions has been changed to use the Spring @PostFilter and @PostAuthorize annotations in ILimitsRetrievalService.
LIM-1659 The ILimitsRestClientProvider, ILimitsRestTemplateProvider and ILimitsRestClientBuilderProvider have all been updated to return builders and now they have been renamed to ILimitsRestClientBuilder, ILimitsRestTemplateBuilder and ILimitsRestClientBuilder respectively.

Removed

Issue Key Details
LIM-1070 Removed evaluationDate field from Incident that was redundant to the evaluationTimestamp field.
LIM-1407 limits-activeviam no longer has a dependency on limits-integration-common. Classes previously imported from limits-integration-common are now imported from limits-common.
LIM-1493 Removed default value for property limits.autoconfiguration.content-service.limits-created-measures-owners. This property should be auto-configured, and if it is not then it should be explicitly set in the application configuration.
LIM-1591 Removed the deprecated RemoteCubeRestService as calculated measures are now fetched directly from the application server.
LIM-1581 The limits-activeviam source code has been removed from the released artifacts in an effort to ease client migrations. The javadoc sources are still available for download.
LIM-1629 Removed deprecated code for Basic authentication in favor of using JWT authentication as the default for machine-to-machine communication.
LIM-1634 Removed the LimitsPermissionOverrideUtil class and replaced its usage with queries that set LimitsQueryPayload::checkuserPermissions to false.
LIM-1636 Removed the runWithAuthorization and decodeBase64EncodedAuthentication methods from IAuthenticatedLimitsUserService that are no longer used since the removal of the Basic authentication logic.

Fixed

Issue Key Details
LIM-1468 Fixed an issue where trying to create a limit structure with the same key fields as an existing limit structure would be treated as an update.
LIM-1483 Fixed an issue where KPIs were not refreshed after restarting Atoti Limits in persistent mode.
LIM-1486 Attempting to edit a temporary limit on the Limits Viewer screen no longer produces duplicate temporary limits.
LIM-1492 Fixed an issue where Atoti Limits calculated measures were being created on connected server KPIs that did not belong to Atoti Limits.
LIM-1498 Fixed an issue where the connected application would not start if Atoti Limits Auto-configuration was disabled via limits.autoconfiguration.enabled=false.
LIM-1509 Fixed an issue where the differences in historical versions of incidents were not being returned in the status screen
LIM-1512 Fixed an issue where KPIs were not being created unless restricted users were defined.
LIM-1522 Fixed an issue where generated IDs for limits created via the UI could collide with IDs for limits created via file upload if the uploaded limits respected the ordering of the generated IDs.
LIM-1533 Fixed tooltip message inside of the Limits Viewer screen, which suggested that the user is not authorized to delete limits.
LIM-1536 Fixed an issue where having multiple valid temporary limits on the same official limit could cause errors when evaluating.
LIM-1542 Fixed an issue where workflow actions were not set on retrieved limits if property limits.workflow.workflow-rules.can-approver-be-same-as-creator was set to false.
LIM-1550 Fixed an issue where users with the ROLE_CREATE_ANY_LIMIT permission role were blocked when attempting to create a limit via the UI or REST.
LIM-1551 Fixed an issue where filtering on a limit with scope (Total) or (For each) would display no data.
LIM-1578 Non-limit features now remain accessible even if the Atoti Limits server is unavailable.
LIM-1605 Fixed an issue where updating a limit structure with no differences from the existing limit structure would result in an exception.
LIM-1612 Fixed an issue where some actions were not disabled when a limit was deleted or expired.

Known issues

Issue Key Details
BAS-1330 Deleting the last limit value deletes the limit structure. As a workaround, don’t delete all limits on a limit structure unless you are sure that the structure won’t be used again. Alternatively, if you do need to reuse the structure, you can create a limit on it using the endpoint /modules/limits-module/limits/rest/v2/limitDefinition/limits/save. The key of the limit structure will still be visible in the admin-ui.
LIM-846 Complex Scopes: Currently, a limit with an aggregated scope and a limit with a non-aggregated scope cannot be created on the same limit structure. As a workaround, create the limits on two separate structures.
LIM-840 Complex Scopes: Currently, limits can’t be defined with an aggregated scope location and another scope location. As a workaround, create two separate limits on two separate structures.
LIM-813 Managers can incorrectly upload Limit Structures through the REST endpoint.
LIM-594 Having email notifications enabled for breaches causes decreased limit evaluation performance. See Configuring the breach email on how to disable breach emails.
LIM-357 The Six Eyes workflow is currently not implemented.
LIM-346 Limits on calculated measures only work through File Upload, not through the UI.
LIM-320 Calculated measures need to be included in Pivot Table Query in order to view a Limit’s KPI in the Pivot Table. See Measures for more on how to create a query for Limits on calculated measures.