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
Giga Sage
Giga 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