- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 01:32 AM
Hi,
Assigned to field is list collector data type. when active value changes into false into sys_user table, the value should deactivate into assigned_to field also(cmdb_Ci table). I have tried the below script but it removed all assigned_to field value. pls let me know the changes in the script. Thanks.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 01:57 AM
A list field contains the comma separated sys_id's of the users and you are setting the entire field to 'empty', so that's just doing exactly what you explain it does.
Try something like this:
(function executeRule(current, previous /*null when async*/) {
var userSysId = current.sys_id.toString();
var cmdbCiGr = new GlideRecord('cmdb_ci');
cmdbCiGr.addQuery('assigned_to', 'CONTAINS', userSysId);
cmdbCiGr.query();
while (cmdbCiGr.next()) {
var assignedTo = cmdbCiGr.getValue('assigned_to');
var assignedToArray = assignedTo.split(',');
// Remove the inactive user's sys_id from the assigned_to list
var index = assignedToArray.indexOf(userSysId);
if (index > -1) {
assignedToArray.splice(index, 1);
cmdbCiGr.setValue('assigned_to', assignedToArray.join(','));
cmdbCiGr.update();
}
}
})(current, previous);
Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 01:48 AM
Hi @BanuMahalakshmi ,
In cmdb_ci, 'assigned_to' field is a reference field not a list type.
Is the glide list a custom field?
Mark this as Helpful / Accept the Solution if this helps.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 01:50 AM
Hello @BanuMahalakshmi ,
I have tried your requirements in my PDI, here are some changes, these are working fine for me
(function executeRule(current, previous /*null when async*/) {
var gr = new GlideRecord('cmdb_ci');
gr.addEncodedQuery('assigned_to='+current.getUniqueValue());
gr.query();
while(gr.next()){
gr.assigned_to = '';
gr.setWorkflow(false); // if you want to stop other background work flows then you have to write this, otherwise no need
gr.update();
}
})(current, previous);
Thank you
G Ramana Murthy
ServiceNow Developer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 03:44 AM
The field is of list type as is in the question. This will do exactly the same as the BR already in the question.
Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2024 01:54 AM - edited 07-24-2024 02:06 AM
Hi @BanuMahalakshmi ,
The script is correct. However, if you run the business rule as a Before. Keeping same script.
Then you will achieve your requirement.
(function executeRule(current, previous /*null when async*/ ) {
// Add your code here
var assignee = new GlideRecord('cmdb_ci');
assignee.addQuery("assigned_to", '=', current.sys_id.toString());
assignee.query();
while (assignee.next()) {
assignee.assigned_to = "";
assignee.update();
}
})(current, previous);
If my response helped, Please mark the answer helpful/correct based on impact!
Thanks,