- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-30-2019 04:21 PM
Hi all,
I'm working on a one-way REST integration between 2 instances. This script is running in a business rule on the source instance, and is supposed to create a new record on the target instance. It was working prior to some updates and now is not working...anyone see what I'm missing?
This is triggered by a record producer on the source instance.
For now I'm just trying to create the record on the target incident table and populate the 'description' field.
Here's the script with a couple log entries"
(function executeRule(current, previous /*null when async*/) {
function jsonEncode(str){
str = new JSON().encode(str);
return str.substring(1, str.length - 1);
}
if(current.contact_type == 'self-service') {//set correctly in the record producer script
try {
var r = new sn_ws.RESTMessageV2('One Way OB', 'POST');
r.setStringParameterNoEscape('description', jsonEncode(current.description + ''));
gs.info('desc is '+current.description); //log correctly shows the value in the description field on the form
var response = r.execute();
gs.info('response is '+response); //log shows "response is [object RESTResponseV2]"
var responseBody = response.getBody();
gs.info('responseBody is '+responseBody); //log shows "responseBody is {"error":{"message":"Exception while reading request","detail":"Cannot decode: java.io.StringReader@5d5403"},"status":"failure"}" error has something to do with this?
var httpStatus = response.getStatusCode();
var jsonObject = JSON.parse(responseBody);
}
catch(ex) {
var message = ex.getMessage();
}
}
})(current, previous);
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-05-2019 12:56 PM
we got it working, here's our script:
(function executeRule(current, previous /*null when async*/) {
function jsonEncode(str)
{
str = new JSON().encode(str);
return str.substring(1, str.length - 1);
}
try {
var r = new sn_ws.RESTMessageV2('One Way OB', 'Post');
r.setStringParameterNoEscape('caller_id', current.caller_id.name);
r.setStringParameterNoEscape('requested_by_caller', current.u_requested_by_caller.name);
r.setStringParameterNoEscape('impact', current.impact);
r.setStringParameterNoEscape('urgency', current.urgency);
r.setStringParameterNoEscape('short_description', current.short_description);
r.setStringParameterNoEscape('description', jsonEncode(current.description + ''));
r.setStringParameterNoEscape('is_service_request', current.u_is_service_request);
r.setStringParameterNoEscape('practice', current.u_what_technology_is_this_related_to.u_name);
r.setStringParameterNoEscape('work_engagement', current.u_what_work_engagement_is_this_related_to.u_name);
r.setStringParameterNoEscape('required_completion_time', current.required_completion_date_time);
r.setStringParameterNoEscape('required_start_time', current.required_start_date_time);
//gs.log("working");
var response = r.execute();
var responseBody = response.getBody();
//gs.log("Body is :" +responseBody);
var httpStatus = response.getStatusCode();
//gs.log("httpsstatus code:" + httpStatus);
var jsonObject = JSON.parse(responseBody);
}
catch(ex) {
var message = ex.getMessage();
}
})(current, previous);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-30-2019 07:08 PM
If rest message is working, then its fine.
Then this is the issue with how you are generating the request body and end point.
try executing the same from background script to evaluate if the rest message is fine or not.
can you provide the end point you are trying to hit ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-30-2019 09:48 PM
//log shows "responseBody is {"error":{"message":"Exception while reading request","detail":"Cannot decode: java.io.StringReader@5d5403"},"status":"failure"}" error has something to do with this?
you need to be sure that all variables that you sent through the body is stringified.
You can try to go to your REST message and set up a test variable substitution and see if that works
If that works then you know that its the script in your end.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-05-2019 12:56 PM
we got it working, here's our script:
(function executeRule(current, previous /*null when async*/) {
function jsonEncode(str)
{
str = new JSON().encode(str);
return str.substring(1, str.length - 1);
}
try {
var r = new sn_ws.RESTMessageV2('One Way OB', 'Post');
r.setStringParameterNoEscape('caller_id', current.caller_id.name);
r.setStringParameterNoEscape('requested_by_caller', current.u_requested_by_caller.name);
r.setStringParameterNoEscape('impact', current.impact);
r.setStringParameterNoEscape('urgency', current.urgency);
r.setStringParameterNoEscape('short_description', current.short_description);
r.setStringParameterNoEscape('description', jsonEncode(current.description + ''));
r.setStringParameterNoEscape('is_service_request', current.u_is_service_request);
r.setStringParameterNoEscape('practice', current.u_what_technology_is_this_related_to.u_name);
r.setStringParameterNoEscape('work_engagement', current.u_what_work_engagement_is_this_related_to.u_name);
r.setStringParameterNoEscape('required_completion_time', current.required_completion_date_time);
r.setStringParameterNoEscape('required_start_time', current.required_start_date_time);
//gs.log("working");
var response = r.execute();
var responseBody = response.getBody();
//gs.log("Body is :" +responseBody);
var httpStatus = response.getStatusCode();
//gs.log("httpsstatus code:" + httpStatus);
var jsonObject = JSON.parse(responseBody);
}
catch(ex) {
var message = ex.getMessage();
}
})(current, previous);