
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 02:05 PM
I have a script include that is querying a user and returning all of the assignment groups that the user is in. I am only getting one group being returned when there are supposed to be several. Any thoughts? Here is my script include:
function getUsersGroups(){
var answer = '';
var user = current.variables.install_network_device;
var grmembers = new GlideRecord('sys_user_grmember');
grmembers.addQuery('user', user);
grmembers.query();
while (grmembers.next()){
if (answer.length > 0){
answer += (',' + grmembers.group.sys_id);
} else {
answer = grmembers.group.sys_id;
}
}
return 'sys_idIN' + answer;
}
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 02:32 PM
Hi,
Please try the below code.
function getUsersGroups() {
var answer = [];
var user = current.variables.install_network_device;
var grmembers = new GlideRecord('sys_user_grmember');
grmembers.addQuery('user', user);
grmembers.query();
while (grmembers.next()) {
answer.push(grmembers.group.toString());
}
return 'sys_idIN' + answer;
}
Regards,
Swarnadeep Nandy

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 02:32 PM
Hi,
Please try the below code.
function getUsersGroups() {
var answer = [];
var user = current.variables.install_network_device;
var grmembers = new GlideRecord('sys_user_grmember');
grmembers.addQuery('user', user);
grmembers.query();
while (grmembers.next()) {
answer.push(grmembers.group.toString());
}
return 'sys_idIN' + answer;
}
Regards,
Swarnadeep Nandy

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-26-2019 08:05 AM
Thank you so much!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 05:41 PM
I'd suggest leveraging OOTB getMyGroups function as follows:
function getUsersGroups(userSysID ){
var user = GlideUser.getUserByID(userSysID);
var javaGroupsArray = user.getMyGroups();
// getMyGroups returns a java array, we want an array we can use in our JavaScript
var jsGroupsArray = javaGroupsArray.toArray();
// Now we can join the array elements to make a string we can use
var qry= 'sys_idIN' + jsGroupsArray .join(",");
return qry;
}
Usage
getUsersGroups(current.variables.install_network_device);
ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 07:41 PM
Hi ,
try below code:
script include:
var FPServiceCatalogHelperScript = Class.create();
FPServiceCatalogHelperScript.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getGroupMembers: function() {
var answer = [];
var usr = this.getParameter('sysparm_user_name'); // sys_id
var gr1 = new GlideRecord('sys_user_grmember');
gr1.addQuery('user', usr);
gr1.query();
while(gr1.next()){
answer.push(gr1.getDisplayValue('group'));
}
return JSON.stringify(answer);
},
type: 'FPServiceCatalogHelperScript'
});
client script:
function onChange(control, oldValue, newValue, isLoading) {
if (newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
var grp = new GlideAjax('FPServiceCatalogHelperScript');
grp.addParam('sysparm_name', 'getGroupMembers');
grp.addParam('sysparm_user_name', newValue);
grp.getXMLAnswer(FPServiceCatalogHelperScript);
}
function FPServiceCatalogHelperScript(response) {
var objList = JSON.parse(response);
if (objList != 'false') {
for (var i=0;i<objList.length;i++){
var obj=objList[i];
g_form.setValue('u_group', objList);
}
}
Thanks,
Vishal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2019 10:48 PM
Hello Smtsch,
function getUsersGroups(){
var answer = '';
var user = current.variables.install_network_device;
var grmembers = new GlideRecord('sys_user_grmember');
grmembers.addQuery('user', user);
grmembers.query();
while (grmembers.next()){
if (answer.length > 0){
answer += (',' + grmembers.group.sys_id.toString());
} else {
answer = grmembers.group.sys_id.toString();
}
}
return 'sys_idIN' + answer;
}
IMPORTANT NOTE:Whenever you're looping and pushing data directly from a query, you need tostring() it.
array.push(gr.sys_id.toString); OR array.push(gr.getValue('sys_id').toString);
And see if that helps. Whatever is causing this problem I've seen it hundreds of times. If you're looping and you're using an object, if you don't string it you may end up with a list of the same thing (or worse- if you're doing an update on this field, you'll find yourself updating the same record numerous times). I always make sure to toString() or format the object so ServiceNow treats the data separately.
Please mark as Correct Answer/Helpful, if applicable.
Thanks!
Abhishek Gardade
Abhishek Gardade