Replace getrowCount() by GlideAggregate in business rule

jinkal1
Tera Contributor

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,

 

3 REPLIES 3

Ankur Bawiskar
Tera Patron
Tera Patron

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Prasad Pagar
Mega Sage

Hi,

Did you tried printing 'test'? What value you are getting there?

Thank you
Prasad

DScroggins
Kilo Sage

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