Replace getrowCount() by GlideAggregate in business rule
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-30-2021 05:22 AM
Hello,
Below is the script where I am trying to replace getrowCount() by GlideAggregate, but it's not working as expected.
The commented part is using getrowCount() and I want to change it to GlideAggregate.
Code -
(function executeRule(current, previous /*null when async*/) {
var triggerIdOfInstance = current.trigger_id.getDisplayValue();
var facilitiesRequestNumber = triggerIdOfInstance.split(": ")[1];
var surveyResponseArr = [];
var instanceComments = new GlideRecord('asmt_metric_result');
instanceComments.addQuery('instance',current.sys_id+'');
instanceComments.orderByDesc('metric.question');
instanceComments.query();
while(instanceComments.next()) {
surveyResponseArr.push('\n' + instanceComments.metric.getDisplayValue() + ": " +instanceComments.string_value);
}
var FacilitiesDescription;
//var FacilitiesSYSID;
var requestedByLocation;
var facilitiesRequest = new GlideRecord('facilities_request');
facilitiesRequest.addQuery('number',facilitiesRequestNumber);
facilitiesRequest.query();
while(facilitiesRequest.next()){
FacilitiesDescription = facilitiesRequest.description;
//FacilitiesSYSID = facilitiesRequest.sys_id+'';
requestedByLocation = facilitiesRequest.opened_by.location.toString();
}
/*var surveyResult = new GlideRecord('asmt_metric_result');
surveyResult.addEncodedQuery('metric.metric_type.evaluation_method=survey^metric.metric_type=e799d9a3db8da340fdf6d36fdf961905^actual_value=0^instance='+ current.sys_id);
surveyResult.query();
if(surveyResult.getRowCount() != 0)
if(surveyResult.getRowCount() != 0){
var fcrt = new GlideRecord('facilities_request_task');
fcrt.initialize();
//fcrt.parent = FacilitiesSYSID;
fcrt.assignment_group = '735424101359eb40c0effa5ed144b050';
fcrt.u_affected_ci = '9ffdb2ef134d2b40c0effa5ed144b03f';
fcrt.location = requestedByLocation;
fcrt.short_description = 'Survey Response for - '+ current.trigger_id.getDisplayValue() + '- submitted by -' + current.user.getDisplayValue();
fcrt.description = FacilitiesDescription + '\n \n \n \n Survey Response \n' + surveyResponseArr;
fcrt.insert();
}
*/
var surveyResult = new GlideAggregate('asmt_metric_result');
surveyResult.addEncodedQuery('metric.metric_type.evaluation_method=survey^metric.metric_type=e799d9a3db8da340fdf6d36fdf961905^actual_value=0^instance='+ current.sys_id);
surveyResult.addAggregate('COUNT');
surveyResult.query();
var test = 0;
test = surveyResult.getAggregate('COUNT');
if(test != 0){
var fcrt = new GlideRecord('facilities_request_task');
fcrt.initialize();
//fcrt.parent = FacilitiesSYSID;
fcrt.assignment_group = '735424101359eb40c0effa5ed144b050';
fcrt.u_affected_ci = '9ffdb2ef134d2b40c0effa5ed144b03f';
fcrt.location = requestedByLocation;
fcrt.short_description = 'Survey Response for - '+ current.trigger_id.getDisplayValue() + '- submitted by -' + current.user.getDisplayValue();
fcrt.description = FacilitiesDescription + '\n \n \n \n Survey Response \n' + surveyResponseArr;
fcrt.insert();
}
})(current, previous);
Thanks in advance,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-30-2021 05:38 AM
Hi,
an example for using GlideAggregate
var count = new GlideAggregate('incident');
count.addQuery('active', true);
count.addAggregate('COUNT');
count.query();
var incidents = 0;
count.next();
gs.info('Number of incidents: ' + count.getAggregate('COUNT'));
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-30-2021 06:08 AM
Hi,
Did you tried printing 'test'? What value you are getting there?
Thank you
Prasad

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-30-2021 10:31 AM
Hello,
The reason your query isn't working currently is because after you query for your result set using query() method you then need to "step into" the returned records using the next() method. So updating the script you have provided would look like this (notice I have added surveyResult.next() 😞
(function executeRule(current, previous) {
var triggerIdOfInstance = current.trigger_id.getDisplayValue();
var facilitiesRequestNumber = triggerIdOfInstance.split(": ")[1];
var surveyResponseArr = [];
var instanceComments = new GlideRecord('asmt_metric_result');
instanceComments.addQuery('instance', current.sys_id + '');
instanceComments.orderByDesc('metric.question');
instanceComments.query();
while (instanceComments.next()) {
surveyResponseArr.push('\n' + instanceComments.metric.getDisplayValue() + ": " + instanceComments.string_value);
}
var FacilitiesDescription;
//var FacilitiesSYSID;
var requestedByLocation;
var facilitiesRequest = new GlideRecord('facilities_request');
facilitiesRequest.addQuery('number', facilitiesRequestNumber);
facilitiesRequest.query();
while (facilitiesRequest.next()) {
FacilitiesDescription = facilitiesRequest.description;
//FacilitiesSYSID = facilitiesRequest.sys_id+'';
requestedByLocation = facilitiesRequest.opened_by.location.toString();
}
var surveyResult = new GlideAggregate('asmt_metric_result');
surveyResult.addEncodedQuery('metric.metric_type.evaluation_method=survey^metric.metric_type=e799d9a3db8da340fdf6d36fdf961905^actual_value=0^instance=' + current.sys_id);
surveyResult.addAggregate('COUNT');
surveyResult.query();
surveyResult.next();
var test = 0;
test = surveyResult.getAggregate('COUNT');
if (test != 0) {
var fcrt = new GlideRecord('facilities_request_task');
fcrt.initialize();
//fcrt.parent = FacilitiesSYSID;
fcrt.assignment_group = '735424101359eb40c0effa5ed144b050';
fcrt.u_affected_ci = '9ffdb2ef134d2b40c0effa5ed144b03f';
fcrt.location = requestedByLocation;
fcrt.short_description = 'Survey Response for - ' + current.trigger_id.getDisplayValue() + '- submitted by -' + current.user.getDisplayValue();
fcrt.description = FacilitiesDescription + '\n \n \n \n Survey Response \n' + surveyResponseArr;
fcrt.insert();
}
})(current, previous);
Hope this helps!
--David