Set Assigned To Field Depeand on Assignment Group In Catalog variables
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
I created two variable name as "Assignments Group" as a reference field and refer it to Group table , and "Assigned To" and refer it to the user table , if there is a single user in the assignment group then the user should set auto in the assigned to field
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
Hi @piyushbedre
Try this:
- Create a Before & Insert,Update Business Rule
- Name: Auto-populate Assigned To.
- Table: Select the table where your variables reside (e.g., incident or sc_task).
- When to run: Set When to before and check both Insert and Update.
- Filter Conditions: Set the condition to Assignment group changes AND Assignment group is not empty.
2. Advanced Script: Use the following script in the Advanced tab
(function executeRule(current, previous /*null when async*/) {
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('group', current.assignment_group);
grMember.query();
if (grMember.getRowCount() == 1) {
if (grMember.next()) {
current.assigned_to = grMember.user;
}
} else {
current.assigned_to = '';
}
})(current, previous);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
Hey @piyushbedre,
Here's the complete solution using Script Include + Catalog Client Script.
Script Include: GroupMemberUtils
var GroupMemberUtils = Class.create();
GroupMemberUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getGroupMembers: function() {
var groupId = this.getParameter('sysparm_group_id');
var members = [];
if (!groupId) {
return JSON.stringify(members);
}
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', groupId);
gr.query();
while (gr.next()) {
var user = gr.user;
members.push({
sys_id: user.toString(),
name: user.getDisplayValue()
});
}
return JSON.stringify(members);
},
type: 'GroupMemberUtils'
});function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || !newValue) {
return;
}
// Clear existing assigned to when group changes
g_form.setValue('assigned_to', '');
g_form.hideFieldMsg('assigned_to', true);
// Show loading message
g_form.showFieldMsg('assigned_to', 'Checking group members...', 'info');
// Get group members using GlideAjax
var ga = new GlideAjax('GroupMemberUtils');
ga.addParam('sysparm_name', 'getGroupMembers');
ga.addParam('sysparm_group_id', newValue);
ga.getXMLAnswer(function(response) {
try {
var members = JSON.parse(response);
if (members.length == 1) {
// Only one member - auto-populate
g_form.setValue('assigned_to', members[0].sys_id);
g_form.showFieldMsg('assigned_to', 'Auto-assigned to ' + members[0].name, 'info');
} else if (members.length > 1) {
g_form.showFieldMsg('assigned_to', 'Select user from ' + members.length + ' group members', 'info');
} else {
g_form.showFieldMsg('assigned_to', 'Group has no members', 'warning');
}
} catch(e) {
g_form.showFieldMsg('assigned_to', 'Error loading group members', 'error');
}
});
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
you will require onChange catalog client script and advanced reference qualifier for this
Script Include: it should be client callable
var checkRecords = Class.create();
checkRecords.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkRecordPresent: function() {
var id = this.getParameter('sysparm_groupID');
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', id); // use valid field name here
gr.query();
if (gr.getRowCount() == 1 && gr.next())
return gr.getValue('user');
else
return 'no member';
},
type: 'checkRecords'
});
Catalog client script: on change of group
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('checkRecords');
ga.addParam('sysparm_name', "checkRecordPresent");
ga.addParam('sysparm_groupID', newValue); //
ga.getXMLAnswer(function(answer) {
if (answer != 'no member') {
g_form.setValue('userVariableName', answer); // give here the user variable name
}
});
//Type appropriate comment here, and begin script below
}
Advanced ref qualifier on User variable since you will have to ask user to select member when more than 1 member
javascript: var users; var userArr = [];
var gr = new GlideRecord("sys_user_grmember");
gr.addQuery("group", current.variables.groupVariableName);
gr.query();
while (gr.next()) {
userArr.push(gr.getValue('user'));
}
users = 'sys_idIN' + userArr.toString();
users;
💡 If my response helped, please mark it as correct ✅ and close the thread 🔒— this helps future readers find the solution faster! 🙏
Ankur
✨ Certified Technical Architect || ✨ 10x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday - last edited yesterday