- 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;
},
});
