Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Indexing in Glide Record

gowthams1024
Kilo Contributor

Hi All,

I was working on a script, and I am facing difficulties in looping through the result set. PFB code

var stageUsers = GlideRecord('sys_user');

stageUsers.addQuery('u_first_name','CONTAINS','test');

stageUsers.query();

var userArray = [];

while(stageUsers.next()) {

gs.log(stageUsers.u_first_name);

userArray.push(stageUsers.u_first_name);

}

Assuming 5 users match the criteria: TestUser1,TestUser2,TestUser3,TestUser4,TestUser5

gs.log is printing these 5 users. However, userArray is having 5 entries of TestUser1.

Any idea on how to index the results?

We can save the result to a variable, split it and assign it to an array. But I need to know if we have any method in JavaScript \ ServiceNow OOTB.

6 REPLIES 6

bernyalvarado
Mega Sage

Hi Gowtham,



Try userArray.push(stageUsers.u_first_name.toString()); instead.



Thanks,


Berny


Hi Berny,



.toString() did work here. However, I am again failing here and can you please help me?




function setSamAccountName(firstname,lastname) {


var tmpFname = firstname;


var tmpLname = lastname;


var fName = "";


var lName = "";


var id = 0;


var samAccountName = "";


fName = firstname.substring(0,3);


lName = lastname.substring(0,3);


samAccountName = fName+lName;


var tmpUser = "";


var tmpIterator="01";


var rowCount=0;


return samAccountName;


}




var stageUsers = GlideRecord('u_ad_bulk_users_staging');


stageUsers.addQuery('u_first_name','CONTAINS','test');


stageUsers.query();


var fNameTmp = '';


var userNames = [];


var lNameTmp = '';


var samAccName = '';


//var description = '';


//workflow.scratchpad.counter = 0;


gs.log(stageUsers.getRowCount());


while(stageUsers.next()) {



var x = stageUsers.u_first_name;


var y = stageUsers.u_last_name;


var z = setSamAccountName(x,y);       // Just formats the username like TesUse01


userNames.push(z);


}


gs.log(userNames);



Here, X and Y values are populating properly. but, then it comes to Z, it again fetches the repeated value. I tried appending .toString() too but no luck this time.


that's interesting.



Have you tried the following?



var x = stageUsers.u_first_name.toString();


var y = stageUsers.u_last_name.toString();


var z = setSamAccountName(x,y);       // Just formats the username like TesUse01


userNames.push(z.toString());



Thanks,


Berny


bernyalvarado
Mega Sage

the reason why you're looking into 5 entries of the test user1 is because within the push is copying the pointer/reference been used. At the end of iterating through the GlideRecord records you will have all the positions of the array with the same pointer/reference. Doing a .toString() will allow you to case to a string object and will copy the value instead of the reference. Any other approach to cast the value to a string will also work.



Thanks,


Berny