Need help in debugging

abjaffrey
Giga Guru

Hi all,

 

Need your help in what could be wrong in the below code.

the expected result is when assignment group gets changed the assigned_to field value should be updated with a random person from the group however im not getting the result.

 

Appreciate your help.

 

SI:

 

Please consider only assignMembers function

 

var getGroupMember = Class.create();
getGroupMember.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    grpMember : function(){
        var count = '';
        var groupName = this.getParameter('sysparm_assignment_group');
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('group',groupName);
        gr.query();

        if(gr.next()){
            count = gr.getRowCount();
        }
        else{
            count = 'There are no Group Member';
        }
        return count;
    },

    assignMembers : function(){
        var grMembers = [];
        var groupID = this.getParameter('sysparm_group_name');
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('group',groupID);
        gr.query();

        while(gr.next()){
            var member = {};
            member.sys_id = gr.user.toString();
            member.name = gr.user.getDisplayValue();
            grMembers.push(member);
        }
        return JSON.stringify(grMembers);

    },

    showGroup : function(getCategory){
        if(getCategory == 'network'){
            return 'sys_idIN' + gs.getProperty('getNetwork') + '.' + gs.getProperty('getNetworkCab');
        }
        else if(getCategory == 'hardware'){
            return 'sys_idIN' + gs.getProperty('getHardware');
        }
    },

    type: 'getGroupMember'
});
 
CS:
 
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var ga = new GlideAjax('getGroupMember');
    ga.addParam('sysparm', 'assignMembers');
    ga.addParam('sysparm_group_name', g_form.getValue('assignment_group'));

    ga.getXML(groupMember);

    function groupMember(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var member = JSON.parse(answer);
        if (member.length > 0) {
            var randomNum = Math.floor(Math.random() * member.length);
            g_form.addInfoMessage('The random value is ' +randomNum);
            g_form.setValue('assigned_to', member[randomNum].name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}
1 ACCEPTED SOLUTION

Thanks, as you can see, there is an error. Cannot read properties of null (reading length). Also before that error you can see null was  logged, so member is null. Looking at your GlideAjax call again, you need to use sysparm_name when specifying the method to call, not just sysparm:

 ga.addParam('sysparm_name', 'assignMembers'); // update this to be 'sysparm_name' instead of just 'sysparm'

View solution in original post

16 REPLIES 16

Can you confirm if your code is going into the first if-statement block? Were you seeing the info messages at all or not? 
Can you also confirm that if you check your browser console, do you see any errors?

@Nick Parsons 

 

The code is not going through the if block, ive added an infomsg outside the if and its working.

Also there were no errors.

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    g_form.addInfoMessage('Hello');
    var ga = new GlideAjax('getGroupMember');
    ga.addParam('sysparm', 'assignMembers');
    ga.addParam('sysparm_group_name', g_form.getValue('assignment_group'));

    ga.getXML(groupMember);

    function groupMember(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var member = JSON.parse(answer);
        if (member.length > 0) {
            var randomNum = Math.floor(Math.random() * member.length);
            g_form.addInfoMessage('The random value is ' +randomNum);
            // g_form.setValue('assigned_to', member[randomNum].name);
            var randomMember = member[randomNum];
            g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}

i've added an infomsg just outside the if but the value of member is not displaying.

 

    function groupMember(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var member = JSON.parse(answer);
        g_form.addInfoMessage(member);
        if (member.length > 0) {
            var randomNum = Math.floor(Math.random() * member.length);
            g_form.addInfoMessage('The random value is ' +randomNum);
            // g_form.setValue('assigned_to', member[randomNum].name);
            var randomMember = member[randomNum];
            g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}

Can you instead do console.log(member) and see what your browser console shows? Consoles have the ability to log objects/arrays, whereas addInfoMesssage struggles with doing that (since it needs to print your array/object as a string).

Screenshot 2024-05-30 104119.png