
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-18-2019 01:38 PM
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
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2019 09:17 AM
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');
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-19-2019 10:37 AM
It gave me the correct count now. But don't know why it is failing when I use the variable.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-19-2019 11:59 PM
Hi Rick,
I think it's because what I mentioned above.
If you are using in a loop assignment like this:
while(rel2.next()){
var instances = rel2.child;
it will not give you the correct results because you are saving only "pointer" to the variable.
You should always use rather:
var instances = rel2.getValue('child');
or
var instances = rel2.child + '';
so you will not store pointer but the variable value (as a string)

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2019 06:00 AM
Peter, I tried your approach but it still gives me individual record counts.
var db = "981bba741b4437889ed265b82d4bcbba";
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 = rel2.child+"";
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
gs.print(instanceCount);
}
}
Output:
*** Script: 1
*** Script: 1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2019 06:10 AM
Hi
I think you need to move your getRowCount on top of the while loop
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();
var instanceCount = inst.getRowCount();//always gives me 1 as count
while(inst.next()){
if(instCount == instanceCount){
//do something in this loop
}
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2019 06:17 AM
Thanks for the reply Regina. I am ok with the rel2.getRowCount() because it gives me the right count but I am worried about inst.getRowCount() which always gives me individual record count. Please see my updated question.