Query is returning the same sys_id of the records

Nagendra Babu32
Tera Contributor

Hello all,

 

When i was running the below query it was returning the one sys_id mulitple times.

 

var cr = new GlideRecord('cmdb_ci_computer');
cr.addQuery('install_status', 1);

cr.setLimit(5);
cr.query();
var arraylist = [];
while(cr.next())
{
arraylist.push(cr.sys_id);
//cr.setValue('install_status',7);
//cr.update();
}
arraylist.join();

 

 

Output:

 

5cf599bf1b3ebd1cc8e521f1604bcb08,5cf599bf1b3ebd1cc8e521f1604bcb08,5cf599bf1b3ebd1cc8e521f1604bcb08,5cf599bf1b3ebd1cc8e521f1604bcb08,5cf599bf1b3ebd1cc8e521f1604bcb08.

 

 

Can you please some one say what I was missing?

 

Thanks in Advance

3 REPLIES 3

debendudas
Mega Sage

Update the script as below and check if it works:

var cr = new GlideRecord('cmdb_ci_computer');
cr.addQuery('install_status', 1);
cr.setLimit(5);
cr.query();
var arraylist = [];
while(cr.next())
{
arraylist.push(cr.getUniqueValue());
//cr.setValue('install_status',7);
//cr.update();
}

gs.log(arraylist.toString()); // for logs
//arraylist.join();

If this solution helps you then, mark it as accepted solution ‌‌✔️ and give thumbs up 👍

Juhi Poddar
Kilo Patron

Hello @Nagendra Babu32 

 

 

It seems like you're encountering an issue where all values in the array are being updated because sys_id is likely a reference to an object, rather than a primitive value like a string. When you push an object reference to an array and then modify it, all elements holding that reference also change.

 

By converting sys_id to a string before pushing it, you ensure that a copy of the value (instead of the reference) is stored. Modify the line arraylist.push(cr.sys_id) ->

arraylist.push(cr.sys_id + "");

This converts sys_id to a string, which avoids the reference issue and prevents all the array elements from being updated simultaneously.

 

"If you found my answer helpful, please give it a like and mark it as the accepted solution. It helps others find the solution more easily and supports the community!"

 

Thank You

Juhi Poddar

Thank You!
Juhi Poddar

Jim Coyne
Kilo Patron

@debendudas' update would work, but there is no explanation as to why it would (which is very important).  @Juhi Poddar lays it out nicely, but I would suggest a slight change by using the built-in getValue() method which automatically returns a string:

 

arraylist.push(cr.getValue("sys_id"));

 

The getUniqueValue() method suggested by @debendudas works because it also returns a string, but always the sys_id of the record.  You do not have to specify the column you are interested in.

 

This article shows what is happening the way you had it setup: TNT: The Importance of Using "getValue()" when Getting Data from a GlideRecord