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.

Handle errors from script Include to business rule

Fabrizio Joaqui
Mega Guru

I need to handle 500 error of  script include in business rule, i need your help to do it, i have these 2 functions in my include script and i want to call them in my business rule only when insertUser gets 500 error how can i do it?:

i tried to do it but I don't think this is the best solution.

 

these are my 2 functions in script include:

 

 

 

//script Include
newUserId: function(){
		var r = new sn_ws.RESTMessageV2('success_factors_api','GETUSERS');
		r.setRequestHeader("Authorization", "Bearer " + token);
        var response = r.execute();
        var responseBody = JSON.parse(response.getBody());
		gs.info(responseBody);
        var httpStatus = response.getStatusCode();
		var arr = responseBody.d.results;	 
			
		//take the first string number
		function getUser(arr){
		for(var i = 0; i < arr.length; i++)
			if(/^\d+$/.test(arr[i].userId))
				return arr[i];
		}

		var user = getUser(arr);
		var sum = parseInt(user.userId) + 1;
		function padLeadingZeros(num, size) {
			var s = num+"";
			while (s.length < size) s = "0" + s;
			return s;
		}	
		var newUserId = padLeadingZeros(sum, 8);
		gs.info(newUserId);
		return newUserId; 
	},
	insertUser: function(reqUser){
		var requestUser = reqUser;
		var rinsertUser = new sn_ws.RESTMessageV2('success_factors_api','POSTUSER');
		rinsertUser.setRequestHeader("Authorization", "Bearer " + this.getToken());
        rinsertUser.setStringParameterNoEscape('messageBody', reqUser);
        var responseUser = rinsertUser.execute();
        var responseBodyUser = responseUser.getBody();
        var httpStatusUser = responseUser.getStatusCode();
		if(httpStatusUser === 200){
			gs.info(responseBodyUser);
			gs.info(httpStatusUser);
		}else{
			return httpStatusUser;
		}
		
	},

 

 

 

 

 I want to call them here in my business rule when i send User only if give me the error 500:

 

 

 

//Business Rule
var newUserId =  intUtils.newUserId // call newUserId function from script include
var reqBodyUser = {};
		reqBodyUser.__metadata = {
		uri: 'User(\'' + newUserId.toString() +'\')'
		};
		reqBodyUser.username = newUserId.toString();
		reqBodyUser.firstName = gr.u_nome.getDisplayValue();
		reqBodyUser.lastName = gr.u_cognome.getDisplayValue();
		reqBodyUser.status = 'active';
	
		reqBodyUserData = JSON.stringify(reqBodyUser);
		gs.info(reqBodyUserData);
		var rUser = intUtils.insertUser(reqBodyUserData);  //inserUser
		var times = 0;	
         if(rUser == 500){   //check if status of inserUser is 500
			while(times < 10){
				times ++;
				newUserId;  //Call the function that sum the last Userid +1
				rUser; // Call the function if times < 10
			}
			if(times == 10){
				throw new Error('STATUS: '+ rUser+' Something wrong with UserId');
			}		
		}

 

 

 

 

5 REPLIES 5

Vasantharajan N
Tera Sage
Tera Sage

Please try with this change 

in script include

    newUserId: function() {
        var r = new sn_ws.RESTMessageV2('success_factors_api', 'GETUSERS');
        r.setRequestHeader("Authorization", "Bearer " + this.getToken());
        var response = r.execute();
        var responseBody = JSON.parse(response.getBody());
        gs.info(responseBody);
        var httpStatus = response.getStatusCode();
        var arr = responseBody.d.results;
        var user = this.getUser(arr);
        var sum = parseInt(user.userId) + 1;
        var newUserId = this.padLeadingZeros(sum, 8);
        gs.info(newUserId);
        return newUserId;
    },

    padLeadingZeros: function(num, size) {
        var s = num + "";
        while (s.length < size) s = "0" + s;
        return s;
    },

    //take the first string number
    getUser: function(arr) {
        for (var i = 0; i < arr.length; i++)
            if (/^\d+$/.test(arr[i].userId))
                return arr[i];
    },
    insertUser: function(reqUser) {
        var requestUser = reqUser;
        var rinsertUser = new sn_ws.RESTMessageV2('success_factors_api', 'POSTUSER');
        rinsertUser.setRequestHeader("Authorization", "Bearer " + this.getToken());
        rinsertUser.setStringParameterNoEscape('messageBody', reqUser);
        var responseUser = rinsertUser.execute();
        var responseBodyUser = responseUser.getBody();
        var httpStatusUser = responseUser.getStatusCode();
        if (httpStatusUser === 200) {
            gs.info(responseBodyUser);
            gs.info(httpStatusUser);
        } else {
            return httpStatusUser;
        }

    },

In Business Rule,

(function executeRule(current, previous /*null when async*/ ) {

    //Business Rule
    var times = 0;
    //check if status of inserUser is 500
    while (times < 10) {
        var result = sendToSuccessFactor();
        if (result == 500) {
            times++;
        } else {
            break;
        }
    }
    if (times == 10) {
        throw new Error('STATUS: ' + rUser + ' Something wrong with UserId');
    }

    function sendToSuccessFactor() {

        var newUserId = new intUtils().newUserId(); // call newUserId function from script include
        var reqBodyUser = {};
        reqBodyUser.__metadata = {
            uri: 'User(\'' + newUserId.toString() + '\')'
        };
        reqBodyUser.username = newUserId.toString();
        reqBodyUser.firstName = current.u_nome.getDisplayValue();
        reqBodyUser.lastName = current.u_cognome.getDisplayValue();
        reqBodyUser.status = 'active';

        reqBodyUserData = JSON.stringify(reqBodyUser);
        gs.info(reqBodyUserData);
        var rUser = new intUtils().insertUser(reqBodyUserData); //inserUser
        return rUser;
    }

})(current, previous);

Thanks & Regards,
Vasanth