Version 9.1.217 (23 March 2026)
People Management
Fix adding Employment History opens blank modal (#146276)
Problem
- Adding Employment History opens a blank modal
Solution
Resolved Dashboard work anniversary date (#143995)
Problem
- On the dashboard, the work anniversary is using a custom calculation and not the same method as the people dashboard uses
Solution
- Updated method being used, as well as including the start date in the company as requested to be used, should it have a value
Resolve the issue where you cannot add an appointment for a user when the appointment history is viewed from the summary page (#146062)
Problem
- When trying to add an appointment, the '+ Appointment' button does nothing; you have to click on another submenu item within the appointment section and then back to appointment history before the button works.
Solution
- Changed the click event to bind on a class and not the Id of the button, the button does not seem to be immediately available when the partial is being rendered and the event cannot be bound. Also removed an incorrect id on the Transfer person button that caused duplicate element IDs to exist in the markup.
Add materialise people group users tooling and extend the limited API to allow partial refresh (#146057)
Problem
- The people group materialisation queue is flooded with queue requests, causing the materialisation process to take excessively long. The distribution to other services also causes extreme delay.
Solution
- Add SQL and orchestration tooling to materialise/sync people group users across environments and wire through API flags.
- Add stored procedures and types:
- JobProfiler.GetRulesetPeopleGroupsForMaterialisation
- JobProfiler.PeopleGroupIdList (TVP)
- JobProfiler.SyncMaterialisedPeopleGroupUsers to select, prepare and merge materialised people group users.
- Add RecalculateMaterialisedPeopleGroupUsers.ps1 and task XML to orchestrate fetching people-group users via the JobProfiler API, batch processing, and calling the sync proc (supports preview mode, batching and logging).
- Update gRPC proto (people_groups.v1.proto) to include always_recalculate and bust_cache request fields and pass them through in PeopleGroupsServiceV1.
- These changes enable controlled synchronisation of materialised people-group users, with options to force recalculation and bust cache, plus a PowerShell orchestrator to run the process and preview changes before committing.
- PowerShell script: Fetch the people groups to process for all rulesets or a specific ruleset.
- Choose all active people groups or only the people groups that have an unprocessed log in the materialised data log queue.
- Using the limited people group users API, refresh the calculated people group user.
- Bust the Redis cache.
- Process the people groups in batches of 150 to keep the CPU and memory used limited.
- Materialise each ruleset's users at the end using a merge statement
Report Builder
Added authorisation checks when running reports to ensure that the user has report permission (#146156)
Problem
- Although the report permissions are enforced on the front end and only display the available reports that the user has access to, should the user have the URL or report ID for any other report, they can still run and view the report.
Solution
- Cache user report access and perform validation when running a report to ensure that the user has the required access.
System Access
System Menu target audience not being able to select any values (#146218)
Problem
- When linking people groups in the System Menu, existing (previously saved) items were not displaying as checked checkboxes after reload. Instead, they appeared as either
Solution
- Always render the checkboxes, as the existing linked target audiences can not be interacted with.
Performance Management
KPI and KPA tooltips causing styling issues (#146000)
Problem
- KPIs and KPAs tooltips are currently causing incorrect styling for Review Setup Templates
Solution
- Removed jQuery tooltips, added, as they conflict with MDB tooltips, also added a title tag to the KPIs to ensure the tooltips are displayed.
Ensure Bulk Recalculation Errors are properly logged, and the batch status is correctly updated (144245)
Problem
- When bulk recalculations fail due to an unhandled exception, the batch status remains unprocessed, and the items don't indicate the failure.
Solution
- Ensure bulk recalculation failures are properly logged and status updated. Also had to change how the datatables are destroyed/cleared, which has changed with the latest versions.
Template tooltips display as text and cause incorrect page styling (KPAs) (#146000)
Problem
- When editing a review setup template and providing a KPA with a very long name, the tooltips display without hovering over the text, causing incorrect page styling.
Solution
- Added the on-hover tag to the HTML element to ensure it only shows when the user hovers over the ellipses.
Template tooltips display as text and cause incorrect page styling (#146000)
Problem
- When editing a review setup template and providing a KPI with a very long name, the tooltips display without hovering over the text, causing incorrect page styling.
Solution
- Added the on-hover tag to the HTML element to ensure it only shows when the user hovers over the ellipses.
Data Warehouse
Adjusted PowerShell scripts for ContentManagement (#143697)
Problem
- The PowerShell scripts did not run successfully on the file server due to authentication errors
Solution
- Adjusted PowerShell scripts to use SQL Auth so that they can be run within SQL Job instead
Renamed the DataSource name from "User Access" to "Invalid User Access" (#136620)
Problem
- The data source name User Access for audit is not efficient
Solution
- Renamed the DataSource name from "User Access" to "Invalid User Access" within the Data Dictionary
Added RulesetID within lmReportCards (#144417)
Problem
- Field RulesetID is required within lmReportCards
Solution
- Added field RulesetID within lmReportCards
Created DWH Package backup folder (#143175)
Problem
- Currently, there is no DWH backup of the package for the case of rollback
Solution
- Created DWH Package Backup folder
- Added the current DWH package to the newly created folder
Added fields ProfileName and LineManagerProfileName (#144930)
Problem
- Fields ProfileName and LineManagerProfileName are required within accUsers and jpReportingLines
Solution
- Added field ProfileName within accUsers
- Added field LineManagerProfileName within jpReportingLines
Added fields YearName, GradeName and CycleName within lmReportCards (#144417)
Problem
- Fields YearName, GradeName and CycleName are required within lmReportCards
Solution
- Added fields YearName, GradeName and CycleName within lmReportCards
Job Management
API Endpoint returning inactive employees (#146082)
Problem
- API Endpoint returns terminated employees.
Solution
- Modify logic to ensure only employees with active appointments are being returned.
ListOrgUser endpoint returns Children Org users (#145915)
Problem
- The ListOrgUser Endpoint returns the children of the searched org as well.
Solution
- This is not the intended behaviour of this endpoint, corrected the logic so it only lists the org which was searched for and not levels below this org.
Learning Management
Resolve TinyMCE warning displayed and editor disabled on absent notification email modal (#146211)
Problem
- When attempting to send absent notifications, a warning is displayed, and the tinymce editor opens.
Solution
- Explicitly state the GPL licence key usage on the React editor component.
Imports
Correct the retrieval of all users' roles when doing a bulk user role import (146187)
Problem
- The api returns no roles when the user list is empty. For the bulk import, the list of usernames is always empty, and so no roles are imported. Blanks in the list are also incorrectly considered as users
Solution
- Exclude empty or whitespace usernames before building ruleset-prefixed usernames for ListUserRolesAsync, preventing invalid/empty entries from being queried. Also, build the response from rolesByUsername.Keys (instead of the original request list) and ensure users without roles get an empty role list, keeping the returned user-role mapping consistent with the queried results.
Communication Portal
Resolved Notification message still referencing old table (#146107)
Problem
- Changed mad to rename tables and structure, but the notification query was not updated to reference the new tables
Solution
- Updated the reference tables to correctly call the new tables
Notifications
Update example data for anniversary notification, resolve problem with tinymce editor injecting current address before placeholder, Show "No placeholder" message when placeholder table is empty (#145927)
Problem
- TinyMCE editor injects the correct relative path into the Source of image, example data for images are not correct, and when the list of anniversaries is empty, the placeholder is still shown in email instead of replacing it with No Birthday list.
Solution
- Update example data for anniversary notification, resolve problem with tinymce editor injecting current address before placeholder, Show "No placeholder" message when placeholder table is empty
Translations
Updated translations (#145685)
Problem
- Tenant Setup | Hover over any of the Product icons on the list page. The message at the bottom of the pop-up should be changed.
Solution
- Updated the message to the desired text: "Licences not displayed inherit from the CORE Licences". Used AI to translate the updated message to all available languages.
Event Scheduling
Add translations for error:learningManagement.eventScheduleIncorrectWhoCanBookType (#145966)
Problem
- No translation existed for error:learningManagement.eventScheduleIncorrectWhoCanBookType
Solution
- Add translations for error:learningManagement.eventScheduleIncorrectWhoCanBookType Also, add .cursor-pointer style globally and explicitly