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.';
        }