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

Abhishek Pidwa
Kilo Guru

Hi Rick, 

 

Using inside the while loop will not solve your purpose. What you wanna do is instead replace the while loop with this IF loop :

 

if(gr.next()) {
   count= gr.getAggregate('COUNT');
gs.print(count);
}


You will get 2 this time.

Please mark this as helpful/correct if this solves your problem.

Thanks for the reply Abhishek. I tried but no use.

try now.

 

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);
var instanceCount =0;
gr.query();
while(gr.next()){
	instanceCount = gr.getAggregate('COUNT');
	gs.print(instanceCount);
	
}

this should work.

 

if its not working other way is

 

var instanceCount =0;
var gr= new GlideRecord('cmdb_ci_db_mssql_instance');
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++
	
}
gs.print(instanceCount);

 

 

Thanks for the reply Harshavardhan. I tried both ways but I am missing something in my previous steps. Here the complete script. Thanks again.

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()){
	var instances = rel2.child;
	var instCount = rel2.getRowCount();//this is giving me the correct count in this case 3 count
	var inst = new GlideRecord('cmdb_ci_db_mssql_instance');
	inst.addQuery('sys_id', 'IN', instances);
	inst.addQuery('install_status', '7');
	inst.query();
	while(inst.next()){
		var instanceCount = inst.getRowCount();//always gives me 1 as count 
		if(instCount == instanceCount){
			
		//do something in this loop
		}
		
	}
}