How to retrieve values from array of objects from script include in client script

Milan13
Giga Expert

Hello,

I am trying to retrieve values from array which contains "object instances" in client script with no success as the client script alertsvalues of 'undefined' .

Any idea how to fix this?

Much appreciated,

Milan

Script include snippet:

checkDogName: function () {

var dogs = [];
var dogName = this.getParameter('sysparm_dog_name');
var dogsGR = new GlideRecord('x_364487_fetch_table');
gs.eventQueue('x_364487_fetch.dummy.event', dogsGR, dogName, "!!!MILAN - fetchUtils clients script");
dogsGR.addQuery('name', dogName);
dogsGR.query();

while(dogsGR.next()) {

var oneDogObject = {};
oneDogObject.number = dogsGR.number.toString();
oneDogObject.name= dogsGR.name.toString();

dogs.push(oneDogObject);

}

return dogs.toString();
},

Client script:

jQuery('#checkDogName').click(function() {
var ga = new GlideAjax('fetchUtils');
ga.addParam('sysparm_name', 'checkDogName');
ga.addParam('sysparm_dog_name', jQuery('#dogName').val());
ga.getXML(fetchBallback2);

});

function fetchBallback2(response) {

var answer = response.responseXML.documentElement.getAttribute('answer').split(',');

for(var i = 0; i < answer.length; i++) {
alert('Dog Number: ' + answer[i].number + ' Dog name: ' + answer[i].name);
}
}

 

 

1 ACCEPTED SOLUTION

AbhishekGardade
Giga Sage

Hello Milan,

You need to create and return a JSON formatted object and parse that in client script.

you can refer this blog:

JSON PARSING: USE CASE AND SOLUTIONS

Please mark as Correct Answer/Helpful, if applicable.
Thanks!
Abhishek Gardade

 

Thank you,
Abhishek Gardade

View solution in original post

4 REPLIES 4

Apeksha Joshi
Kilo Guru

Hi there ,

you can refer the script below it is to auto populat user data through SI and client script :

Script include 

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

getDetails: function()
{
var arr = [];

var usr_id=this.getParameter('sysparm_user_id'); //Value Fetched from client script

var gr=new GlideRecord('sys_user');
   gr.addQuery('sys_id',usr_id);
gr.query();

while(gr.next())
{
arr.push(gr.location.name);
arr.push(gr.email);
}


   //gs.addInfoMessage(arr);
return arr.toString();


},

});
 
 
Client script :
 
function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
var user=g_form.getValue('Select_User');

var ga= new GlideAjax('user_data_populate');
ga.addParam("sysparm_name","getDetails");
ga.addParam("sysparm_user_id",user); // VAlue passed to script include
ga.getXML(detailsUser);

function detailsUser(response) 
{
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
var value = answer.split(",");
alert(value[0]);
alert(value[1]);
g_form.setValue('location',value[0]);
g_form.setValue('email_id',value[1]);

}

}
 

If my reply helps you at all, I’d really appreciate it if you click the Helpful button and if my reply is the answer you were looking for, it would be awesome if you could click both the Helpful and Accepted Solution buttons! 

 

Regards,

Apeksha

AbhishekGardade
Giga Sage

Hello Milan,

You need to create and return a JSON formatted object and parse that in client script.

you can refer this blog:

JSON PARSING: USE CASE AND SOLUTIONS

Please mark as Correct Answer/Helpful, if applicable.
Thanks!
Abhishek Gardade

 

Thank you,
Abhishek Gardade

Ankur Bawiskar
Tera Patron
Tera Patron

Hi Milan,

update code as below and run once and it should work; encode before sending and parse in client script

instead of return dogs.toString(); do this

return json.encode(dogs);  

In client script use this

var answer = response.responseXML.documentElement.getAttribute('answer').split(',');

var returnData = JSON.parse(answer);  
for(var i = 0; i < returnData.length; i++) {
alert('Dog Number: ' + returnData[i].number + ' Dog name: ' + returnData[i].name);

Mark Correct if this solves your issue and also mark Helpful if you find my response worthy based on the impact.
Thanks
Ankur

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

This worked finally, see below code...

 

HTML (in UI Page)
---------------------------
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<h1>Add a new dog</h1>

<form class="form-horizontal">
<div class="form-group">
<label for="dogName" class="col-sm-2 control-label">Name of dog:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="dogName" />
</div>
</div>

<div>
<div class="form-group">
<label for="dogAge" class="col-sm-2 control-label">Age of dog:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="dogAge" />
</div>
</div>
</div>

<div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input id="dogShots" type="checkbox" />
Shots
</label>
</div>
</div>
</div>
</div>

<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input id="dogNeutered" type="checkbox" />
Neutered
</label>
</div>
</div>
</div>

</form>

<br/>
<button id="addDog" class="btn btn-default">Add Dog</button>
<div id="msg">

</div>

<button id="checkDogName" class="btn btn-default">Check dog name</button>
<div id="msg2">
</div>

</j:jelly>


Client Script (in UI Page)
-------------------------------
jQuery('#addDog').click(function() {
var ga = new GlideAjax('fetchUtils');
ga.addParam('sysparm_name', 'createDog');
ga.addParam('sysparm_dog_name', jQuery('#dogName').val());
ga.addParam('sysparm_dog_age', jQuery('#dogAge').val());
ga.addParam('sysparm_dog_neutered', jQuery('#dogNeutered').is(':checked'));
ga.addParam('sysparm_dog_shots', jQuery('#dogShots').is(':checked'));
ga.getXML(fetchBallback);
});

function fetchBallback(response) {
var answer = response.responseXML.documentElement.getAttribute('answer').split('|');
jQuery('#msg').append('<p>' + answer[0] + ' has successfully been created. Dog ID: ' + answer[1] + '</p><br/><a href="'+ answer[2] + '">View new dog</a>');
}


//second Glide Ajax...
jQuery('#checkDogName').click(function() {
var ga = new GlideAjax('fetchUtils');
ga.addParam('sysparm_name', 'checkDogName');
ga.addParam('sysparm_dog_name', jQuery('#dogName').val());
ga.getXML(fetchBallback2);

});

function fetchBallback2(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
var dogs = JSON.parse(answer);

for(var i = 0; i < dogs.length; i++) {
alert(dogs[i].number + " - " + dogs[i].name);
}


}

 

Script include for the UI Page
--------------------------------
var fetchUtils = Class.create();
fetchUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

createDog: function () {
var dogName = this.getParameter('sysparm_dog_name');
var dogAge = this.getParameter('sysparm_dog_age');
var dogShots = this.getParameter('sysparm_dog_shots');
var dogNeutered = this.getParameter('sysparm_dog_neutered');

//insert dog
var newDog = new GlideRecord('x_364487_fetch_table');
newDog.newRecord();
newDog.name = dogName;
newDog.age = dogAge;
if(dogShots) {
newDog.shots = true;
}
if(dogNeutered) {
newDog.neutered = true;
}

var dogNumber = newDog.number.getDisplayValue();
//fills sysID with sys_id of newly created record
var sysID = newDog.insert();
var dogLink = newDog.getLink();

return dogName + '|' + dogNumber + '|' + dogLink;

},

createEmailNotification: function () {
var adopterEmail = this.getParameter('sysparm_adopter_email');
var adoptionCentre = this.getParameter('sysparm_adoption_centre');
var adoptionCentreEmail = '';
var ac = new GlideRecord('x_364487_fetch_adoption_center');
ac.get(adoptionCentre);
adoptionCentreEmail = ac.email.getDisplayValue();
gs.eventQueue('x_364487_fetch.adoption_email', ac, adoptionCentreEmail, adopterEmail);
return;
},


checkDogName: function () {

var dogs = [];
var dogName = this.getParameter('sysparm_dog_name');
var dogsGR = new GlideRecord('x_364487_fetch_table');
gs.eventQueue('x_364487_fetch.dummy.event', dogsGR, dogName, "!!!MILAN - fetchUtils clients script");
dogsGR.addQuery('name', dogName);
dogsGR.query();

while(dogsGR.next()) {
var dogRow = {};
dogRow.number = dogsGR.number.toString();
dogRow.name = dogsGR.name.toString();
dogs.push(dogRow);
}
return JSON.stringify(dogs);
},



type: 'fetchUtils'
});