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

Sorry, not sure what that is a screenshot of. If you can log to the console the value of member before your if-statement that will help. Then check your browser console for the log, not the System Logs table. I'm not sure what browser you're using, but typically you can right-click the page, inspect, and then check the Console tab after your code runs to see the log there

Attache the screenshot, Hope this is the correct one

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'

@Nick Parsons 

 

Thanks for the response, it worked but the result was not expected, attaching screenshot of the form after change which displays random count as 109 but there are only 7 members in grp.

Appreciate the help.

SI:

 

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

    // },

    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()) {
            grMembers.push(gr.getValue('user'));
        }
        return grMembers.toString();

    },

    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;
    }
    // g_form.addInfoMessage('Hello');
    var ga = new GlideAjax('getGroupMember');
    ga.addParam('sysparm_name', '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);
        g_form.addInfoMessage(answer.length);
        console.log(answer);
        if (answer.length > 0) {
            var randomNum = Math.floor(Math.random() * answer.length);
            g_form.addInfoMessage('The random value is ' +randomNum);
            // g_form.setValue('assigned_to', member[randomNum].name);
            var randomMember = answer[randomNum];
            g_form.setValue('assigned_to', randomMember.sys_id, randomMember.name);
        }
        else {
            g_form.setValue('assigned_to', '');
        }
    }
}
 

 

@abjaffrey 

if the group has multiple members then how it will set in assigned _to field

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader