Skip to main content

Version 9.1.199 (15 December 2025)

Ruleset Management

Set base URL when a schema is created during ruleset creation (#137697)

Problem

  • When a new ruleset is created, or a schema setup request is made, the module setting SETTING_EXTERNALSERVICES_SAAS_APPLICATION_URL is not updated. This caused the assignment document annotation to stop working.

 

Solution
  • When the ruleset is created/schema setup requested, send the MVCUrl in appsettings to V8.
  • Use the value to update the application URL
  • Confirm that the learning and content management API URLs are also synced to V8 and populated in the appropriate settings.

Add scheduling to the imports on V9 (#136927)
Problem
  • Unable to control how many times the payroll connector should run per day on a specific ruleset.
  • Unable to change the schedule of the V8 bulk sync
  • Unable to disable the V8 bulk sync

 

Solution

  • On ruleset management| Integrations | General add simple scheduling 
    • Make the occurrence always in hour intervals, and set the starting time in increments of 5 minutes. Add an optional ending to the field
    • Add a flag to disable the schedule. When disabled, that type of import will not run on the ruleset
  • Allow multiple occurrences to be configured for each schedule item, e.g
    • Occurs every hour between 6h00 and 10h00
    • Occurs every 6 hours between 11h00 and 24h00
  • Add two separate schedules under Integration | General  : 
    • Run Payroll connector
    • Run Bulk Additional Service Imports
  • Add schedules next to each of the bulk pulls
  • Ensure the schedules are disabled when the Tenant subscription expires, or the ruleset is disabled


Audit

Move Support backups to central archive V9 (#136527)

Problem

  • When supporting an alteration to data, the support dev creates a backup of the data either for just the single rulesets or all rulesets within the live DB. This clutters the DB and increase the size unnecessarily.
 
Solution
  • Add a new DB V9_Master_Archive.
  • In this DB, data will be stored as was done in the V8 archive DB. With the DB schema being the name of the DB where the backup comes from and the table name, the concatenation for the DB schema and Table name, e.g [V9_Master_Core].[Account_Users_Description]
  • Make a copy of the sp_backup table in V8 and add the ruleset ID to the SP
  • When the ruleset ID is defined, then only backup the data for that ruleset, add the ruleset ID to the archive table name by default, along with a description
  • Add this SP as a migration in each service


People Management

Streamline V9 to V8 sync (#126727)
Problem
  • The V9 to V8 sync failing causes users not to be able to log in to the learning portal
Solution
  • Create a new user import, same as job structure import C_03427_99999_sysImportJobStructure) for only employee information

As a People Management Admin viewing the Appointment History, I want to change the Reason for Ending (#139964)

Problem

  • Managers previously had no way to edit or correct the termination reason (e.g., Resignation, Termination for Cause) or the last day of service for an employee's appointment after it was terminated, leading to permanent inaccuracies in employee records.

 

Solution

  • Updated and added existing and new logic so that managers can now edit the termination details (reason and last service day) for terminated appointments directly when editing the appointment's details.

As a People Management Administrator, I want to have two new Reporting Lines for the Parent/Guardian (#134213)

Business Rules 

  • Two new Reporting Line Type needs to be created  
  • Primary Parent/Guardian 
  • Secondary Parent/Guardian 
  • When logging into the system, the person will only see the people reporting to them in this Reporting Line Type 
  • Reporting lines to be added to V8 and the sync 

As a People Management Administrator, I want the same functionality as for the Line Manager reporting line type to apply to the Parent/Guardian reporting line type (#134214)

Business Rules 

  • A standard People Group Role should be created for a parent/guardian on R1 
  • Parent/Guardian People Group Role 
  • This is then propagated to all other Rulesets  
  • When the Parent/Guardian Reporting Line has been selected/filled, the People Group for this reporting line type should be created 
  • The person who is the Parent/Guardian should then be given the Reporting Line Type with the Role in User Permissions | People Admin | Permissions based on Reporting Lines 
  • Remove the ABC Filter and Filtering Search 
  • Roles to be added to V8 and the sync  
  • At the end, this should work like the Line Manager reporting line type. 

[People Management][Edit Appointment] Reason for Termination dropdown not saving values (#141429)

Problem

  • The Reason for Termination dropdown does not save the value that is entered

Solution

  • Resolved the issue to save 

People group refresh, rework and refactor (#139340)

Problem

  • Another people group change is triggered while people groups are busy refreshing, causing overlap.
  • The overlapping request, in some cases, does not lead to a refresh of the people group; it is not remembered.
  • Only on subsequent non-overlapping requests will the changes show on the people group.
  • When a large people group is refreshed or its items amended, which triggers the refresh, the cache is busted in the beginning, and this leads to a situation where no employees are returned on reports / the front end while the people group materialises, and the cache is restored.
  • Additionally, because of the PG refresh for an amount of time, the materialised table is empty, and any references to it return no records.
     

Solution

  • Implement a queue system to refresh people groups when data is changed.
  • Grab the latest request and mark the rest in the queue as completed.
  • Either refresh the ruleset or a specific people group.
  • Change the logical order of the operations to first do the PG calculation to get the list of users, and only once that is retrieved, bust and restore the PGU cache in sequence to reduce the amount of time that the cached people group is unavailable.
  • This will mean that when the Refresh Integration Event is triggered, currently the cache is busted beforehand, now change it to not do that, but only raise the refresh event and there only bust the relevant PG cache.
  • BustAllRulesetPeopleGroupKeysAsync
  • BustRulesetCacheAsync
  • BustDatabasePeopleGroupCacheAsync
  • RefreshPeopleGroupUsersEventConsumer
  • Modify the Refresh PG Materialisation process to do a delta of the newly added/removed users in the people group and not completely clear the PG table. 

 

Reload personal details registration info per ruleset, Termination reason (#136630)

Problem

  • Registration info not populated per ruleset, and termination reason not set when transferring the user 

 

Solution

  • Reload personal details, registration info per ruleset, Termination reason

 


Imports

Integrations page is blank (#140927)

Problem

  • AdditionalServiceImportHostedService broke due to a table it requires from a migration, which has not yet been executed, but the time when it executes.

 

Solution

  • Ensure AdditionalServiceImportHostedService only executes once the migrations have run


Translations

Translations - Investigate how translations can be implemented on the app (#127238)

Problem

  • When using the app or other services in V9, import, identity the translations created on V9 cannot be accessed

 

Solution

  • Add a gRPC server endpoint in WebMVC with 2 APIs that can be accessed externally
  • By key accepts the culture, and key requested. The interpolation values can also be applied to render the full key. When not supplied, it is replaced by a blank, as in the system
  • By namespace accepts the culture and namespace and returns all the translations from the JSON file, with its system overridden when available
  • In both cases, when the culture is supplied, it attempts to provide the file in that language when available
  • When not supplied, the user's culture of the user for which the token was generated is used; should they not have one, the default culture is returned
  • UserId is also available, should translations need to be drawn per user for a standard auth key
  • Add custom authorisation on the header auth token to ensure a secure connection in the context of MVC
  • Add an anonymous GRPC endpoint that can be accessed by other services to draw specific translations


Org Structure

As a People Management Administrator, I want to transfer a user, including their training records, from schema 1 to schema 2 (#136630)

Business Rules

  • Transfer a user from one Ruleset to another Ruleset
  • Permissions to be set on People Management Administration


Data Warehouse

Duplicate issue within lmTermResults (#112511)

Problem

  • Duplicates occurred within TermResults due to inserted records within StudentSubjects that do not have the new Grade and Year values

 

Solution

  • Resolved duplicate issue within lmTermResults by including the Grade and Year Name for the inserted records 

 

Added new tables for JobInherent data (#138087)

Problem

  • New Datasources are required for the JobInherent data

 

Solution

  • Created DataSource jpJobInherentRequirements
  • Created DataSource jpJobCompetencyInherentRequirements
  • Created DataSource jpJobCompetencyInherentRequirementsEvidences

 

Added new Event Scheduling Tables within LearningManagement_ETL.dtsx (#136864)

Problem

  • Event Scheduling data is required within the Data Warehouse

 

Solution

  • Added Datasource EventSchedules within LearningManagement
  • Added Datasource EventScheduleAttendees within LearningManagement
  • Added Datasource EventScheduleSessions within LearningManagement
  • Added Datasource EventSchedulingCosts within LearningManagement
  • Added Datasource EventScheduleAttendeeCosts within LearningManagement
  • Added Joins for new DataSources within UpdateDataDictionary
  • Added Indexes for new DataSources

 


Job Management

Post imported the wrong enum type in step (#139779)

Problem

  • When executing the post-import step, it has a reference ID to a pre-import type 

 

Solution

  • Correct change to the correct post import step

 

Resolved no data being shown message (#141428)

Problem

  • When there is no data in the table, the table is empty without a message 

 

Solution

  • Add a change to show the message indication on only one view

 

Hard delete users when job profile appointment fails (#139779)

Problem

  • When users are imported, and it fails to create an appointment, it causes complications as that user is only created half. But since there are a lot of reasons an appointment can fail, do not rely on the error type for appointment creation 

 

Solution

  • Retrieve all the users who were used to create an appointment to see if those users have an appointment. If not, send the user IDs to hard delete on the account and then also to other services with their people group user ID attached to re-materialise the data 

 


Ruleset Management

Implement User Registration Phase 1 (#134689)

Business Rules

  • Added a field to specify what the org location will be when a new user registers
  • Added a field to specify what the job title will be when a new user completes the registration process
  • A new option is available to enable a registration reason on the registration page
  • Added a setting to specify what field on the registration page should be used as the username
  • Added a setting so that a user’s ID number to be verified on the registration page
  • Added placeholders to email templates that mask sensitive information
  • Add an option so that users registering for a specific job have to acknowledge a disclaimer after registration
  • Added a setting that will allow me to set how long a user will have access before they are automatically terminated
  • All the new fields to be translatable

 


Learning Management

Implemented custom stamp to move over to next page (#141344)

Problem

  • When a custom stamp is selected, it is bound to that page, as per the Syncfusion control limitation, so once the mouse cursor moves over to the next page, the stamp stays on the page where it was initiated 

 

Solution

  • Implement a new workaround that calculates the target(page) index value, deselects and reselects the stamp to be rendered on the active page

 

Improving Mark Tracking and Highlighting: Distinguishing Inherited and Manual Changes (#141315)

Problem

  • It was difficult to tell apart the marks that were inherited and those that were changed manually. This occurred when highlighting, as marks that were only inherited were mistakenly highlighted along with the modified ones. - The way the system tracked changes didn’t consider inherited marks, leading to inconsistencies.

 

Solution

  • Added an `inherited` label to the marks. This helped clearly separate inherited marks from those that were changed manually. We also updated how we tracked changes so that it only affected the marks that weren’t inherited.
  • Improved the highlighting so that inherited marks wouldn’t get highlighted.

 

Fix the year master data being incorrectly converted when being retrieved, and subject data not being saved (#141224)

Problem

  • The Year master data is not being serialised correctly within learning management. The subject data is saving the incorrect values.

 

Solution

  • Retrieve the year master data from the cache without converting the date converter first, and then convert it to a model that converts the date time. Fix the subject data not using the modal values to save.

 


Performance Management

Implemented location path in contract view (#141696)

Problem

  • Add the Org Path to the header of the View/Print report.

 

Solution

  • Add a change to view the location of the org path of the user within the contract preview

 

Implement change to view contract from moderation and see comments (#141696)

Problem

  • A new change was implemented to view a contract from moderation, but it fails to authorise as the moderator can not be a performance manager 

 

Solution

  • Add a change to the additional value to the auth based on from modernisation view

 

New Functionality: Allow Multiple PM Agreements per Year (#134446)

Business Rules

  • A new button to add additional agreements
  • A new tab for my additional agreement is available
  • A manager viewing the team's dashboard can see the team's additional agreement
  • Add translation resources
  • All the additional agreement fields need to be available in the Data Warehouse
  • Include all User Additional Agreements on Moderation
  • Update the Import Validation and/or Calibration
  • Include 360 Scores on both the Primary and Additional Performance Agreements
  • Only Primary Performance Agreements should be used on Career and Succession
  • Include all User Additional Agreements on Evaluations
  • Include Additional Agreements on Bulk Actions
    • The Bulk Actions need to be modified to also cater for the additional agreements.

      • The following changes need to be made:

        • Create from template -> As with the import, enforce that only Primary contracts can be created from here.

        • Delete agreements -> Add icon to indicate Primary / Additional contracts. Allow deletion of both.

        • Move agreements -> All Additional contracts for the user must be moved along with the primary contract to the new Review Setup

        • Recalculate Scores -> Should not require any calculation changes, add icons to indicate Primary / Additional contracts. Ensure both can be recalculated