Need help in JSON parsing

abjaffrey
Giga Guru

Hey Folks,

 

I'm just learning and practising development, I'm unable to complete the Script include & client script, need your help.

Can someone help with what went wrong

 

Script Include : 

 

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

    getINC:function(){
        var incArray = [];
        var gr = new GlideRecord('incident');
        gr.addQuery('caller_id',this.getParameter(sysparm_user_id));
        gr.query();

        while(gr.next()){
            var incDetails = {};
            incDetails.number=gr.number.toString();
            incDetails.priority=gr.priority.getDisplayValue();
            incDetails.short_desc=gr.short_description.toString();
            incArray.push(incDetails);
        }
    return JSON.stringify(incArray);
    },

    type: 'getIncDetails'
});
 
Client Script: 
 
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   var finalArray = [];
   var ga = new GlideAjax('getIncDetails');
   ga.addParam = ('sysparm_name','getINC');
   ga.addParam = ('sysparm_user_id',newValue);
   ga.getXMLAnswer(IncDetail);

   function IncDetail(response){
    var obj = JSON.parse(response);

    for(var i =0;i<obj.length;i++){
        finalArray.push('Incident Number : '+ obj[i].number +'\n'+'Priority : ' + obj[i].priority +'\n'+ 'Short Description : ' + obj[i].short_desc +'\n\n');
    }
    // g_form.setValue('description',finalArray);
   g_form.setValue('description',finalArray);
   }

   //Type appropriate comment here, and begin script below
   
}
1 ACCEPTED SOLUTION

ga.addParam = ('sysparm_name','getINC');
ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
Change these two lines as below in client script
ga.addParam('sysparm_name','getINC');
ga.addParam('sysparm_user_id',g_form.getValue('caller_id'));

View solution in original post

12 REPLIES 12

HrishabhKumar
Kilo Sage

Hi @abjaffrey ,

Can you try to print your response in info message and see what it is returning.

Try g_form.addInfoMessage("object is : " + obj + " and length is: " + obj.length);

Please confirm what is being printed in the message.

Hi @HrishabhKumar 

 

Thanks for the response, I've changed the client script as suggested but still no changes, after changing caller id the info msg dint show.

 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   var finalArray = [];
   var ga = new GlideAjax('getIncDetails');
   ga.addParam = ('sysparm_name','getINC');
   ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
   ga.getXMLAnswer(IncDetail);

   function IncDetail(response){
    var obj = JSON.parse(response);
    g_form.addInfoMessage("object is : " + obj + " and length is: " + obj.length);

    for(var i =0;i<obj.length;i++){
        finalArray.push('Incident Number : '+ obj[i].number +'\n'+'Priority : ' + obj[i].priority +'\n'+ 'Short Description : ' + obj[i].short_desc +'\n\n');
    }
    // g_form.setValue('description',finalArray);
   g_form.setValue('description',finalArray);
   }

   //Type appropriate comment here, and begin script below
   
}

Gustav Aldenbra
Kilo Sage

Hi @abjaffrey 

Can you try this client script. I have change getXMLAnswer to getXML. 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   var finalArray = [];
   var ga = new GlideAjax('getIncDetails');
   ga.addParam = ('sysparm_name','getINC');
   ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
   ga.getXML(IncDetail);

   function IncDetail(response){
    var answer = response.responseXML.documentElement.getAttribute("answer");
    var obj = JSON.parse(answer);

    for(var i =0;i<obj.length;i++){
        finalArray.push('Incident Number : '+ obj[i].number +'\n'+'Priority : ' + obj[i].priority +'\n'+ 'Short Description : ' + obj[i].short_desc +'\n\n');
    }
    // g_form.setValue('description',finalArray);
   g_form.setValue('description',finalArray);
   }
}


In the script include Can you log the array before the return statment using gs.info('incArray: ' + incArray) to see if the script include returns any data or even runs at all.

I've changed the codes as below but still no solution.

 

SI:

 

 

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

    getINC:function(){
        var incArray = [];
        var gr = new GlideRecord('incident');
        var userID = this.getParameter('sysparm_user_id');
        gr.addQuery('caller_id',userID);
        gr.query();

        while(gr.next()){
            var incDetails = {};
            incDetails.number=gr.number.toString();
            incDetails.priority=gr.priority.getDisplayValue();
            incDetails.short_desc=gr.short_description.toString();
            incArray.push(incDetails);
        }
    gs.info('incArray: ' + incArray);  
    return JSON.stringify(incArray);
    },

    type: 'getIncDetails'
});
 
CS:
 
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   var finalArray = [];
   var ga = new GlideAjax('getIncDetails');
   ga.addParam = ('sysparm_name','getINC');
   ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
   ga.getXML(IncDetail);

   function IncDetail(response){
    var answer = response.responseXML.documentElement.getAttribute("answer");
    var obj = JSON.parse(answer);

    for(var i =0;i<obj.length;i++){
        finalArray.push('Incident Number : '+ obj[i].number +'\n'+'Priority : ' + obj[i].priority +'\n'+ 'Short Description : ' + obj[i].short_desc +'\n\n');
    }
    // g_form.setValue('description',finalArray);
   g_form.setValue('description',finalArray);
   }
}


// function onChange(control, oldValue, newValue, isLoading, isTemplate) {
//    if (isLoading || newValue === '') {
//       return;
//    }
//    var finalArray = [];
//    var ga = new GlideAjax('getIncDetails');
//    ga.addParam = ('sysparm_name','getINC');
//    ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
//    ga.getXMLAnswer(IncDetail);

//    function IncDetail(response){
//  var obj = JSON.parse(response);
//  g_form.addInfoMessage("object is : " + obj + " and length is: " + obj.length);

//  for(var i =0;i<obj.length;i++){
//      finalArray.push('Incident Number : '+ obj[i].number +'\n'+'Priority : ' + obj[i].priority +'\n'+ 'Short Description : ' + obj[i].short_desc +'\n\n');
//  }
//  // g_form.setValue('description',finalArray);
//    g_form.setValue('description',finalArray);
//    }

//    //Type appropriate comment here, and begin script below
   
// }

ga.addParam = ('sysparm_name','getINC');
ga.addParam = ('sysparm_user_id',g_form.getValue('caller_id'));
Change these two lines as below in client script
ga.addParam('sysparm_name','getINC');
ga.addParam('sysparm_user_id',g_form.getValue('caller_id'));