Passing parameters to a script include from a client script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-05-2021 10:57 AM
Hello, I have a requirement to populate members of a group using a list collector for a cat item I am working on for our first use of integration hub. I have found some code to do it and it works well on the reference qualifier but from within the backend catalog, the list collector does not automatically refresh when the group is changed and from the portal it does not display the full collector. I would like to use the backend view since on a few itil users will need this form. Currently, I have to manually click run filter for it to update the list of members. I was looking into if instead it could be called from a client script however with how the author originally made it I'm not sure if I can. I have already set it to client callable.
//Current failing client script
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var ga = new GlideAjax('ShowGroupMembers');
ga.addParam("sysparm_name", "showGroupMembersBasedOnAddOrRemoveVariable");
ga.addParam("existing_add_remove_members", valueAddOrRemove);
ga.addParam("existing_group_name", groupName);
ga.getXML(getResponse);
}
function getResponse(response) {
alert(response);
}
//Working reference qualifier on the list collector variable
javascript: new ShowGroupMembers().showGroupMembersBasedOnAddOrRemoveVariable(current.variables.existing_add_remove_members, current.variables.existing_group_name)
//Script Include
var ShowGroupMembers = Class.create();
ShowGroupMembers.prototype = {
initialize: function() {
},
showGroupMembersBasedOnAddOrRemoveVariable: function(valueAddOrRemove, groupName) {
var refQualQuery = "active=true";
if(valueAddOrRemove == 'Add Members'){
return refQualQuery + "^sys_idNOT IN " + this._grGroupMembers(groupName);
}
else if(valueAddOrRemove == 'Remove Members'){
return refQualQuery + "^sys_idIN " + this._grGroupMembersa(groupName);
}
},
_grGroupMembers: function(groupName){
var grGrpMembers = new GlideRecord('sys_user_grmember');
grGrpMembers.addQuery('group', groupName);
grGrpMembers.query();
var listOfUsers = [];
while(grGrpMembers.next()){
//listOfUsers.push(grGrpMembers.user;
listOfUsers.push(grGrpMembers.user.toString());
}
return listOfUsers;
},
type: 'ShowGroupMembers'
};
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-05-2021 11:04 AM
Hi
Your client script and script include should be like this
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var valueAddOrRemove = g_form.getValue("add_remove_field");
var groupName = g_form.getValue("group_name");
var ga = new GlideAjax('ShowGroupMembers');
ga.addParam("sysparm_name", "showGroupMembersBasedOnAddOrRemoveVariable");
ga.addParam("existing_add_remove_members", valueAddOrRemove);
ga.addParam("existing_group_name", groupName);
ga.getXML(getResponse);
}
function getResponse(response) {
alert(response);
}
Script include
showGroupMembersBasedOnAddOrRemoveVariable: function(valueAddOrRemove, groupName) {
var groupName = this.getParameter('existing_group_name');
var valueAddRemoveName = this.getParameter('existing_add_remove_members');
var refQualQuery = "active=true";
if(valueAddOrRemove == 'Add Members'){
return refQualQuery + "^sys_idNOT IN " + this._grGroupMembers(groupName);
}
else if(valueAddOrRemove == 'Remove Members'){
return refQualQuery + "^sys_idIN " + this._grGroupMembersa(groupName);
}
},
Regards,
Sai Kumar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-05-2021 11:08 AM
Hi,
It seems that the script include is not client callable. For this to work you might have to create a new script include which is client callable. You have to mark the client callable checkbox to make the script include extend from AbstractAjaxProcessor script.
And also the addParams method mentioned in the client script is not configured properly
Please check the below link to configure client callable script include and also how to pass variables from client script to it.
https://docs.servicenow.com/bundle/paris-application-development/page/script/ajax/topic/p_AJAX.html
Thanks,
Jagadeesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-05-2021 11:20 AM
AbstractAjaxProcessor is missing from your script include.
var ShowGroupMembers = Class.create();
ShowGroupMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
add following code in your client script , to get the value of fields present on the form
var valueAddOrRemove = g_form.getValue("field name"); //update the field names
var groupName = g_form.getValue("field name");//update the field names
var ga = new GlideAjax('ShowGroupMembers');
ga.addParam("sysparm_name", "showGroupMembersBasedOnAddOrRemoveVariable"); ga.addParam("existing_add_remove_members", valueAddOrRemove);
ga.addParam("existing_group_name", groupName);
ga.getXML(getResponse);
add following code in script include, to fetch the value of the parameters passed by client script
var groupName = this.getParameter('existing_group_name');
var valueAddRemoveName = this.getParameter('existing_add_remove_members');
var refQualQuery = "active=true";
if(valueAddOrRemove == 'Add Members'){
return refQualQuery + "^sys_idNOT IN " + this._grGroupMembers(groupName);
}
else if(valueAddOrRemove == 'Remove Members'){
return refQualQuery + "^sys_idIN " + this._grGroupMembersa(groupName);
}