- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2023 11:47 AM - edited 04-21-2023 11:50 AM
Hello,
I am trying to get multiple responses from Script Include to one Client Script via GlideAjax.
But something is wrong with my code.....:(
Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var varSkill = [];
var varGroup = [];
var gaFilter = new GlideAjax('xxx.CatalogUtil');
gaFilter.addParam('sysparm_name', 'getFilterBySkillsGroups');
gaFilter.addParam('sysparm_xxx_skill_ids', g_form.getValue('skills'));
gaFilter.addParam('sysparm_xxx_group_ids', g_form.getValue('groups'));
gaFilter.addParam('sysparm_variable', g_form.getValue('location'));
gaFilter.getXML(responseAjax);
function responseAjax(response) {
var answer = response.responseXML.documentElement.getAttribute('response');
if (answer) {
var getAgentGroupIds = answer[0].getAttribute('xxxGroupIds').toString();
varSkill = getxxxGroupIds;
var getAgentSkillIds = answer[0].getAttribute('xxxSkillIds').toString();
varGroup = getxxxSkillIds;
g_form.setValue('filter', varSkill + varGroup);
} else {
g_form.setValue('filter', '');
}
}
Script Include
var CatalogUtil = Class.create();
CatalogUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getFilterBySkillsGroups: function() {
var listSkills =[];
var listGroups =[];
var xxxSkillIds = this.getParameter('sysparm_xxx_skill_ids');
var xxxGroupIds = this.getParameter('sysparm_xxx_group_ids');
var grHasSkills = new GlideRecord('sys_user_has_skill');
grHasSkills.addQuery('user.company', 'STARTSWITH', this.getParameter('sysparm_variable'));
grHasSkills.addQuery('skill', 'IN', xxxSkillIds);
grHasSkills.query();
while (grHasSkills.next()) {
listSkills.push(grHasSkills.user.sys_id);
}
var grInGroup = new GlideRecord('x_xxx_groups');
grInGroup.addQuery('u_xxx_group.sys_id', 'IN', xxxGroupIds);
grInGroup.query();
while (grInGroup.next()) {
listGroups.push(grInGroup.u_xxx_agent.sys_id);
}
var response = this.newItem('response');
response.setAttribute('xxxGroupIds', listGroups.toString());
response.setAttribute('xxxSkillIds', listSkills.toString());
return answer;
},
});
What is wrong with it?
Thanks a lot,
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2023 12:29 PM
There are a few issues with the code provided:
- In the client script, the responseAjax function should be defined outside the onChange function.
- In the client script, the varSkill and varGroup variables should be concatenated with a comma, not a plus sign, to separate the values.
- In the script include, the return answer; statement should be return response; instead.
Here's the updated code:
Client Script
javascriptCopy code function onChange(control, oldValue, newValue, isLoading) { if (isLoading || newValue == '') { return; } var varSkill = []; var varGroup = []; var gaFilter = new GlideAjax('xxx.CatalogUtil'); gaFilter.addParam('sysparm_name', 'getFilterBySkillsGroups'); gaFilter.addParam('sysparm_xxx_skill_ids', g_form.getValue('skills')); gaFilter.addParam('sysparm_xxx_group_ids', g_form.getValue('groups')); gaFilter.addParam('sysparm_variable', g_form.getValue('location')); gaFilter.getXML(responseAjax); } function responseAjax(response) { var answer = response.responseXML.documentElement.getAttribute('response'); if (answer) { var getAgentGroupIds = answer[0].getAttribute('xxxGroupIds').toString(); varSkill = getAgentGroupIds; var getAgentSkillIds = answer[0].getAttribute('xxxSkillIds').toString(); varGroup = getAgentSkillIds; g_form.setValue('filter', varSkill + ',' + varGroup); } else { g_form.setValue('filter', ''); } }
Script Include
javascriptCopy code var CatalogUtil = Class.create(); CatalogUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, { getFilterBySkillsGroups: function() { var listSkills =[]; var listGroups =[]; var xxxSkillIds = this.getParameter('sysparm_xxx_skill_ids'); var xxxGroupIds = this.getParameter('sysparm_xxx_group_ids'); var grHasSkills = new GlideRecord('sys_user_has_skill'); grHasSkills.addQuery('user.company', 'STARTSWITH', this.getParameter('sysparm_variable')); grHasSkills.addQuery('skill', 'IN', xxxSkillIds); grHasSkills.query(); while (grHasSkills.next()) { listSkills.push(grHasSkills.user.sys_id); } var grInGroup = new GlideRecord('x_xxx_groups'); grInGroup.addQuery('u_xxx_group.sys_id', 'IN', xxxGroupIds); grInGroup.query(); while (grInGroup.next()) { listGroups.push(grInGroup.u_xxx_agent.sys_id); } var response = this.newItem('response'); response.setAttribute('xxxGroupIds', listGroups.toString()); response.setAttribute('xxxSkillIds', listSkills.toString()); return response; }, });
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-21-2023 12:29 PM
There are a few issues with the code provided:
- In the client script, the responseAjax function should be defined outside the onChange function.
- In the client script, the varSkill and varGroup variables should be concatenated with a comma, not a plus sign, to separate the values.
- In the script include, the return answer; statement should be return response; instead.
Here's the updated code:
Client Script
javascriptCopy code function onChange(control, oldValue, newValue, isLoading) { if (isLoading || newValue == '') { return; } var varSkill = []; var varGroup = []; var gaFilter = new GlideAjax('xxx.CatalogUtil'); gaFilter.addParam('sysparm_name', 'getFilterBySkillsGroups'); gaFilter.addParam('sysparm_xxx_skill_ids', g_form.getValue('skills')); gaFilter.addParam('sysparm_xxx_group_ids', g_form.getValue('groups')); gaFilter.addParam('sysparm_variable', g_form.getValue('location')); gaFilter.getXML(responseAjax); } function responseAjax(response) { var answer = response.responseXML.documentElement.getAttribute('response'); if (answer) { var getAgentGroupIds = answer[0].getAttribute('xxxGroupIds').toString(); varSkill = getAgentGroupIds; var getAgentSkillIds = answer[0].getAttribute('xxxSkillIds').toString(); varGroup = getAgentSkillIds; g_form.setValue('filter', varSkill + ',' + varGroup); } else { g_form.setValue('filter', ''); } }
Script Include
javascriptCopy code var CatalogUtil = Class.create(); CatalogUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, { getFilterBySkillsGroups: function() { var listSkills =[]; var listGroups =[]; var xxxSkillIds = this.getParameter('sysparm_xxx_skill_ids'); var xxxGroupIds = this.getParameter('sysparm_xxx_group_ids'); var grHasSkills = new GlideRecord('sys_user_has_skill'); grHasSkills.addQuery('user.company', 'STARTSWITH', this.getParameter('sysparm_variable')); grHasSkills.addQuery('skill', 'IN', xxxSkillIds); grHasSkills.query(); while (grHasSkills.next()) { listSkills.push(grHasSkills.user.sys_id); } var grInGroup = new GlideRecord('x_xxx_groups'); grInGroup.addQuery('u_xxx_group.sys_id', 'IN', xxxGroupIds); grInGroup.query(); while (grInGroup.next()) { listGroups.push(grInGroup.u_xxx_agent.sys_id); } var response = this.newItem('response'); response.setAttribute('xxxGroupIds', listGroups.toString()); response.setAttribute('xxxSkillIds', listSkills.toString()); return response; }, });