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.

Not able to publish Automated Scripted Factor

Rahul62
Tera Contributor

When trying yo publish the Automated Scripted Factor , then getting the Error :" Script validation failed with the error: Not a number. "

This is my code below :

/*************************************************************************************/
 
 /* 1. Use the predefined variables from the Variables field.
 /* 2. You can define your own script variables within the script itself. For example, var x = 1;  
 /* 3. Factor response must be set to variable result.score;  
 /*************************************************************************************/ 
 
 function getFactorResponseValue(factorSysId, assessmentId, assessmentType) {
 var gr_resp = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
 gr_resp.addQuery("assessment_instance_id", assessmentId);
 gr_resp.addQuery("factor", factorSysId);
 gr_resp.addQuery("assessment_type", assessmentType);
 gr_resp.query();
 if (gr_resp.next()) {
 return gr_resp.factor_response;
 }
}
 
   try {
  
        /***Start of Custom Code. Please write your scoring formula below. */
       gs.info("TEst final rahul"+typeof responseId+" id "+responseId);
		var ram_factors = global.JSON.parse(gs.getProperty('sn_risk_advanced.ram.factors'));
		var gr_asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
 if (gr_asmt.get(responseId)) {
 var instanceId = gr_asmt.assessment_instance_id.toString();

 var factorValue = parseInt(getFactorResponseValue(ram_factors.financial_impact, instanceId, '1'));
 
 if(factorValue>=1) 
    result.score = factorValue;
	else
	result.score = 0;
 }
       /***End of Custom Code. Do not modify anything below. */  
   
        if (isNaN(result.score)) {
            throw 'Not a number.';
        } else if (result.score == Infinity) {
            throw 'Divide by zero error.';
        }
    } catch (ex) {
        result.error = ex;
    }

 

Please help me where I am getting wrong.

1 ACCEPTED SOLUTION

Naveen Kumar4
ServiceNow Employee
ServiceNow Employee

Hi Rahul,

 

Try this 

 

/*************************************************************************************/

/* 1. Use the predefined variables from the Variables field.
/* 2. You can define your own script variables within the script itself. For example, var x = 1;  
/* 3. Factor response must be set to variable result.score;  
/*************************************************************************************/

function getFactorResponseValue(factorSysId, assessmentId, assessmentType) {
    var gr_resp = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
    gr_resp.addQuery("assessment_instance_id", assessmentId);
    gr_resp.addQuery("factor", factorSysId);
    gr_resp.addQuery("assessment_type", assessmentType);
    gr_resp.query();
    if (gr_resp.next()) {
        return gr_resp.factor_response;
    }
}

try {

    /***Start of Custom Code. Please write your scoring formula below. */
    gs.info("TEst final rahul" + typeof responseId + " id " + responseId);
    var ram_factors = global.JSON.parse(gs.getProperty('sn_risk_advanced.ram.factors'));
    var gr_asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
    if (gr_asmt.get(responseId)) {
        var instanceId = gr_asmt.assessment_instance_id.toString();

        var factorValue = parseInt(getFactorResponseValue(ram_factors.financial_impact, instanceId, '1'));

        if (factorValue >= 1)
            result.score = factorValue;
        else
            result.score = 0;

        if (isNaN(result.score)) {
            throw 'Not a number.';
        } else if (result.score == Infinity) {
            throw 'Divide by zero error.';
        }
    }
    /***End of Custom Code. Do not modify anything below. */


} catch (ex) {
    result.error = ex;
}

 

Above works. but it is up to you how to handle proper exception handling.

 

Thanks,

Naveen

 

View solution in original post

3 REPLIES 3

Naveen Kumar4
ServiceNow Employee
ServiceNow Employee

Hi Rahul,

 

Try this 

 

/*************************************************************************************/

/* 1. Use the predefined variables from the Variables field.
/* 2. You can define your own script variables within the script itself. For example, var x = 1;  
/* 3. Factor response must be set to variable result.score;  
/*************************************************************************************/

function getFactorResponseValue(factorSysId, assessmentId, assessmentType) {
    var gr_resp = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
    gr_resp.addQuery("assessment_instance_id", assessmentId);
    gr_resp.addQuery("factor", factorSysId);
    gr_resp.addQuery("assessment_type", assessmentType);
    gr_resp.query();
    if (gr_resp.next()) {
        return gr_resp.factor_response;
    }
}

try {

    /***Start of Custom Code. Please write your scoring formula below. */
    gs.info("TEst final rahul" + typeof responseId + " id " + responseId);
    var ram_factors = global.JSON.parse(gs.getProperty('sn_risk_advanced.ram.factors'));
    var gr_asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance_response");
    if (gr_asmt.get(responseId)) {
        var instanceId = gr_asmt.assessment_instance_id.toString();

        var factorValue = parseInt(getFactorResponseValue(ram_factors.financial_impact, instanceId, '1'));

        if (factorValue >= 1)
            result.score = factorValue;
        else
            result.score = 0;

        if (isNaN(result.score)) {
            throw 'Not a number.';
        } else if (result.score == Infinity) {
            throw 'Divide by zero error.';
        }
    }
    /***End of Custom Code. Do not modify anything below. */


} catch (ex) {
    result.error = ex;
}

 

Above works. but it is up to you how to handle proper exception handling.

 

Thanks,

Naveen

 

Rahul62
Tera Contributor

Than you @Naveen Kumar4  . It helps , but I didn't understand what change did you make . Could you please explain me ?

Naveen Kumar4
ServiceNow Employee
ServiceNow Employee

Moved below code inside if

 

if (isNaN(result.score)) {
            throw 'Not a number.';
        } else if (result.score == Infinity) {
            throw 'Divide by zero error.';
        }