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.

How to get the record count in the while loop?

Rick54
Tera Expert

Hello,

I am trying to get the count of all record that matches the query condition. When I use the below script, the count is always being '1' even though there are 1+ records that matches the condition. I am I missing anything? Please suggest.

var count = 0;
var gr= new GlideAggregate('cmdb_ci_db_mssql_instance');
gr.addAggregate('COUNT');
gr.addQuery('sys_id', 'IN', instances);//This variable holds 1 or more record sys ids
gr.addQuery('install_status',7);
gr.query();
while(gr.next()){
	instanceCount = gr.getAggregate('COUNT');
	gs.print(instanceCount);
	
}

This time I have 2 records that matched the condition
Output:
*** Script: 0
*** Script: 1
*** Script: 1
*** Script: 0

Expected Ouput: 2

My expectation is that these records are queried one after one that's the reason I am getting individual record's count. Is there any way to count all looped records and combine and output as 2? Thanks

1 ACCEPTED SOLUTION

Harsh Vardhan
Giga Patron

here we go

 

var count=0;
var rcount;
var gr = new GlideRecord('cmdb_rel_ci');
gr.addQuery('child.sys_id','d53a14fddbd8330080e0a08a48961902');
gr.query();
if(gr.next())
{
gs.print(gr.parent.getDisplayValue());
var gr2 = new GlideRecord('cmdb_rel_ci');
gr2.addQuery('parent.sys_id',gr.parent);

gr2.query();
rcount=gr2.getRowCount();
while(gr2.next())
{
if(gr2.child.install_status== 7){
count++;
//gs.print(gr2.child.install_status);
}
}

}

if(rcount == count)
{

gs.print('hey harsh please update the database');

}
else
{
gs.print('no need to update the database');
}



View solution in original post

35 REPLIES 35

are you doing it on PDI instance ? then i can have look into that.

 

anyway give another try

 

var instances =[];
var instCount;


var rel2 = new GlideRecord('cmdb_rel_ci');
rel2.addEncodedQuery("type=55c95bf6c0a8010e0118ec7056ebc54d^child.sys_class_name=cmdb_ci_db_mssql_instance^parent.sys_class_name=cmdb_ci_database^parent.sys_id="+db+"");//db variable holds one database record 
rel2.query();
while(rel2.next()){
	instances.push(rel2.child);

	instCount = rel2.getRowCount();//this is giving me the correct count in this case 3 count


}
gs.log('length is :'+instances.length);
for(var i = 0;i<instances.length;i++){
	var inst = new GlideRecord('cmdb_ci_db_mssql_instance');
	inst.addQuery('sys_id',instances[i]);
	inst.addQuery('install_status', '7');
	inst.query();
	while(inst.next()){
		gs.log('Count is:'+inst.getRowCount());//always gives me 1 as count 

		
	}
}

I am not doing it in the PDI instance. First log print 4 and last log did not print anything also if I remove the below query it gives me the right count.

inst.addQuery('sys_id',instances[i]);

 

can you do the manually filter on this "cmdb_ci_db_mssql_instance" with the sys id you received from the instances[i] and then validate the count are you getting one or two in the table (cmdb_ci_db_mssql_instance) list.

Harshavardhan,

Below is the output that I am getting when I print instances[i].

*** Script: 49fb6ef8db80b3003eb73b98f496193a
*** Script: 49fb6ef8db80b3003eb73b98f496193a
*** Script: 49fb6ef8db80b3003eb73b98f496193a
*** Script: 49fb6ef8db80b3003eb73b98f496193a

you are getting same sysid

something wrong here , is it possible for have quick webex call ?