- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-23-2023 06:10 AM
Hello All,
Let me preface by stating I am not a developer but an admin and have a requirement to create a fix script that will run on demand to update managers when one leaves the organization with another user within the sys_user table. We have multiple companies within our instance so it would need to query Company, Manager, and replace with another active sys_user. This would be updated as a per-case instance.
basically something like this:
Query sys_user table for "Company" and "John Doe" as manager, and replace "John Doe" with "Jane Doe" for all users that have "John Doe" as the manager additionally within the script, I would need to find pending approvals with the old manager and change to the new manager.
Any help on this would be highly appreciated.
Best,
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-23-2023 07:23 AM - edited 03-23-2023 07:23 AM
And here's my version, that adds Company, and approvals state in "Not yet requested" and "Requested"
// Replace Manager
// 1. re-assign users to new manager
// 2. re-assign "Aprovals" to new manager
var oldManager = 'c092a629db66ae00580ed211ce9619a0'; // sys_id of sys_user record
var newManager = 'ee826bf03710200044e0bfc8bcbe5de6'; // sys_id of new manager sys_user record
var managerCompany = '31bea3d53790200044e0bfc8bcbe5dec'; // sys_id of the company record
var dryRun = true;
// Re-assign user manager
var userRecord = new GlideRecord('sys_user');
var userQuery = 'manager='+oldManager + '^company=' + managerCompany;
userRecord.addEncodedQuery(userQuery);
userRecord.query();
gs.info("ReplaceManagerScript: Found " + userRecord.getRowCount() + " user records to be re-assigned.");
while (userRecord.next()) {
userRecord.manager = newManager;
gs.info("ReplaceManagerScript: updating manager for user: " + userRecord.user_name);
if (!dryRun)
userRecord.update();
}
// Re-assign approvals
var appRecord = new GlideRecord('sysapproval_approver');
// Only update those that will need approval
var appQuery = 'stateINnot requested,requested^approver=' + oldManager;
appRecord.addEncodedQuery(appQuery);
appRecord.query();
gs.info("ReplaceManagerScript: Found " + appRecord.getRowCount() + " approval records to be re-assigned.");
while (appRecord.next()) {
appRecord.approver = newManager;
gs.info("ReplaceManagerScript: updating approval for " + appRecord.document_id);
if (!dryRun)
appRecord.update();
}
Set dryRun to false after testing. And of course, set the sys_id values for the new and old manager, and company.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-27-2023 11:43 AM
Thank you, everyone, I really appreciate your input and answers.