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 Hook the button click event on the document to ensure the event is always bound   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