Handle errors from script Include to business rule
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-02-2022 04:08 AM - edited 12-02-2022 04:11 AM
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');
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-02-2022 06:17 AM
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