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

Nick Parsons
Mega Sage

You should be setting the sys_id, not the name on the assigned_to reference field. You can use the third argument of the setValue() method to specify the display value to be the name, but the second argument should be the sys_id:

 

var randomMember = member[randomNum];
g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);

 

Hi @Nick Parsons 

 

thanks for the response, updated the code as suggested but still no change in solution.

 

 

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);
            var randomMember = member[randomNum];
            g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}

In your updated code you've shared, you've commented out the line that created the randomNum variable. You still need that line for getting the random member from your array when creating the randomMember variable. 

Hi

 

I uncommented that line, still no update.

 

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);
            var randomMember = member[randomNum];
            g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}