Multiple responses from Script Include to one Client Script

Sinae
Tera Contributor

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,

1 ACCEPTED SOLUTION

DUGGI
Giga Guru

@Sinae 

There are a few issues with the code provided:

  1. In the client script, the responseAjax function should be defined outside the onChange function.
  2. In the client script, the varSkill and varGroup variables should be concatenated with a comma, not a plus sign, to separate the values.
  3. 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;
    },

});

 

View solution in original post

1 REPLY 1

DUGGI
Giga Guru

@Sinae 

There are a few issues with the code provided:

  1. In the client script, the responseAjax function should be defined outside the onChange function.
  2. In the client script, the varSkill and varGroup variables should be concatenated with a comma, not a plus sign, to separate the values.
  3. 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;
    },

});