Glide ajax method

instance
Tera Contributor

 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 

2 ACCEPTED SOLUTIONS

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

View solution in original post

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:

LutufAliShah1_0-1676552370592.png

View solution in original post

8 REPLIES 8

instance
Tera Contributor

 script include 

@instance  Refer this GlideAjax documentaion

 

https://docs.servicenow.com/bundle/rome-application-development/page/script/ajax/topic/p_AJAX.html

Please mark the answer as correct or helpful based on impact
ServiceNow Community Rising Star, Class of 2023

Saurabh Gupta
Kilo Patron
Kilo Patron

Hi,
This can be done but you need all the fields for each row returned from encoded query?

 

 

 


Thanks and Regards,

Saurabh Gupta

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