Transform script to update records
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-18-2022 05:49 AM
Hi,
There are list of users imported in the u_custom_user table using excel file.
Fields are:
user_id
name
op_manager_id
hr_manager_id
hr_manager-reference to itself i.e u_custom_user table
op_manager-reference to itself i.e u_custom_user table
except manager all other details are coming from the excel sheet now I want once import is completed post import script should run to set the managers using their manager_id which is a string and it can be compared to user_id from the same table.
Also we'll check if the manager_ids are not empty and then we'll iterate through the records by comapring manager_id to user_id [As manager is also a user] in same table and get the manager values set
If the id is empty we won't run maybe?
Can anyone help with script and when onAfter or onComplete?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-18-2022 10:29 AM
Hi @Akki1
You need to use onAfter Transform Script as you have to run it for every record:
Please find the code below:
if(target.hr_manager_id!='')
{
vew hrMngr = new GlideRecord('u_custom_user');
hrMngr.addQuery('user_id',target.hr_manager_id);
hrMngr.query();
if(hrMngr.next())
{
target.hr_manager = hrMngr.sys_id;
}
if(target.op_manager_id!='')
{
vew opMngr = new GlideRecord('u_custom_user');
opMngr.addQuery('user_id',target.op_manager_id);
opMngr.query();
if(opMngr.next())
{
target.op_manager = opMngr.sys_id;
}
target.update();
Thanks
Anubhav Ritolia
ServiceNow Rising Star 2023
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-18-2022 11:08 AM
Thanks @AnubhavRitolia
But
what if the manager record is inserted after user record.
What I meant to say is suppose in row 1 it is user and then in row 2 it is manager so this fails right because after inserting row1 it will search for manager but it will be not there
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-18-2022 10:56 PM
Hi @Akki1
Ok It got it. In that case you can use onComplete Transform Script as below:
var cUser = new GlideRecord('u_customer_user');
cUser.addEncodedQuery("sys_updated_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()^hr_manager_idISNOTEMPTY^ORop_manager_idISNOTEMPTY");
cUser.query();
while(cUser.next())
{
if(cUser.hr_manager_id!='')
{
var hrUser = GlideRecord('u_customer_user');
hrUser.addQuery('user_id',cUser.hr_manager_id);
hrUser.query();
if (hrUser.next())
{
cUser.hr_manager = hrUser.sys_id;
}
}
if(cUser.op_manager_id!='')
{
var opUser = GlideRecord('u_customer_user');
opUser.addQuery('user_id',cUser.op_manager_id);
opUser.query();
if (opUser.next())
{
cUser.op_manager = opUser.sys_id;
}
}
cUser.update();
}
NOTE: As this is custom Table, fields must also be custom so field names may vary based on what is Field name on your instance. I have user what you mentioned. Do check Field name spellings based on your instance.
Thanks
Anubhav Ritolia
ServiceNow Rising Star 2023

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-18-2022 11:14 AM
Why not map the manager_id field to the manager field->user id?
That way you wont need a script or query to do the mapping.
The first sync wont map manager, if running forr the first time. But the next one will do and will be more efficient.
Please mark this response as correct or helpful if it assisted you with your question.