- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 12:21 AM
A reusable GlideAjax method to do a lookup of records from case table
The method should accept these inputs: table name and encoded query
And return the list o ftable name, sys_id and a list of field names found
And return a JSON object containing the field names and their corresponding values.
how to do this in client script and script inlcude
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 02:38 AM - edited 02-16-2023 02:46 AM
Hi @instance
Below is the client callable script include.
var clientTableQueryUtil = Class.create();
clientTableQueryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getRecords:function()
{
var tblName=this.getParameter('sys_parm_tb_name');
var qry=this.getParameter('sys_parm_qry');
var recSysIDs=[];
var rc=new GlideRecord(tblName);
rc.addEncodedQuery(qry);
rc.query();
while(rc.next())
{
recSysIDs.push(rc.getUniqueValue());
}
return recSysIDs;
},
type: 'clientTableQueryUtil'
});
Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('clientTableQueryUtil');
ga.addParam('sysparm_name','getRecords');
ga.addParam('sys_parm_tb_name',"incident");
ga.addParam('sys_parm_qry',"active=true");
ga.getXML(cb);
function cb(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
}
//Type appropriate comment here, and begin script below
}
Thanks and Regards,
Saurabh Gupta

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 05:14 AM - edited 02-16-2023 05:16 AM
Hi @instance , I hope this will resolve your issue.
To get members in a group you should query the Group Members[ sys_user_grmember] table
instead of “sys_user_group”.
I've created a catalog item that contains two fields one is referenced to "sys_user_group" and the other one is a multi-line variable (i-e: description), And I've created a script include that queries members of the group based on group ID (selected on catalog item variable), then I created an Onchange client script on group field that will get value from group field and pass to script include as a parameter.
Here is a code example:
- Script include:
var GetGroupMembers = Class.create();
GetGroupMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getGroupMembers: function() {
var groupID = this.getParameter('sysparm_group_id'); //Get group ID from Client Side
var gr = new GlideRecord("sys_user_grmember"); // Group Members Table
gr.addEncodedQuery('group=' + groupID); // Query with group id
gr.query();
var obj = {}; // Object to store group member's IDs
var i = 1;
while (gr.next()) {
var User = "Member "+ i + " ID: "; // object variables creation to store multiples user's IDs
obj[User] = gr.user.toString(); // Assigning ID to object variable
i++;
}
return JSON.stringify(obj); // returning object as string
},
type: 'GetGroupMembers'
});
- Client Script:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
var groupID = g_form.getValue('select_group'); // get value from group variable referenced to sys_user_group
var ga = new GlideAjax('GetGroupMembers');
ga.addParam('sysparm_name', 'getGroupMembers');
ga.addParam('sysparm_group_id', groupID);
ga.getXML(getMembers);
function getMembers(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('group_member_s_sysids', answer);
}
}
Output:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 12:27 AM - edited 02-20-2023 04:20 AM
script include
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 12:34 AM
@instance Refer this GlideAjax documentaion
https://docs.servicenow.com/bundle/rome-application-development/page/script/ajax/topic/p_AJAX.html
ServiceNow Community Rising Star, Class of 2023
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 02:02 AM
Hi,
This can be done but you need all the fields for each row returned from encoded query?
Thanks and Regards,
Saurabh Gupta
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-16-2023 02:38 AM - edited 02-16-2023 02:46 AM
Hi @instance
Below is the client callable script include.
var clientTableQueryUtil = Class.create();
clientTableQueryUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getRecords:function()
{
var tblName=this.getParameter('sys_parm_tb_name');
var qry=this.getParameter('sys_parm_qry');
var recSysIDs=[];
var rc=new GlideRecord(tblName);
rc.addEncodedQuery(qry);
rc.query();
while(rc.next())
{
recSysIDs.push(rc.getUniqueValue());
}
return recSysIDs;
},
type: 'clientTableQueryUtil'
});
Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga = new GlideAjax('clientTableQueryUtil');
ga.addParam('sysparm_name','getRecords');
ga.addParam('sys_parm_tb_name',"incident");
ga.addParam('sys_parm_qry',"active=true");
ga.getXML(cb);
function cb(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
}
//Type appropriate comment here, and begin script below
}
Thanks and Regards,
Saurabh Gupta