- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 05:21 AM
I have this Business Rule that keeps returning the follower error and I can't figure out what's wrong:
"Uncaught error: SyntaxError: Unexpected token: u"
Here's the code:
(function executeRule(current, previous /*null when async*/) {
// Add your code here
try {
var r = new sn_ws.RESTMessageV2('x_275105_iplookup.IPInfo', 'GetIPInfo');
r.setStringParameterNoEscape('specific_field', 'geo');
r.setStringParameterNoEscape('ip_address', 'current.address');
// Convert the json formatted string to a JavaScript Object
var responseObj = JSON.parse(responseBody);
//Set the value of the City field on the IPAddressInfo record
current.city = responseObj.city;
gs.info("City = " + current.city);
current.update();
//override authentication profile
//authentication type ='basic'/ 'oauth2'
//r.setAuthentication(authentication type, profile name);
//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');
//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
}
catch(err) {
gs.info("Uncaught error: " + err);
}
})(current, previous);
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 05:31 AM
second point , why are you using current.update() here
Updated Code:
(function executeRule(current, previous /*null when async*/) {
// Add your code here
try {
var r = new sn_ws.RESTMessageV2('x_275105_iplookup.IPInfo', 'GetIPInfo');
r.setStringParameterNoEscape('specific_field', 'geo');
r.setStringParameterNoEscape('ip_address',current.address);
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
var responseObj = JSON.parse(responseBody);
gs.info('status code is'+httpStatus )
current.city = responseObj.city;
gs.info("City = " + current.city);
current.setWorkflow(false);
current.update();
}
catch(err) {
gs.info("Uncaught error: " + err);
}
})(current, previous);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 05:52 AM
did you put the log ? if yes are you getting address value in log ?
can you please share the screenshot of your rest message method ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 05:50 AM
GGG: The BR is on the x_275105_iplookup_ipaddressinfo table and it runs async when insert or update occurs.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 06:06 AM
Hi there,
Maybe another one:
var responseObj = JSON.parse(responseBody);
This uses responseBody, though responseBody is not set at that point yet. It's set far after in the script.
var responseBody = response.getBody();
Kind regards,
Mark
Kind regards,
Mark Roethof
Independent ServiceNow Consultant
10x ServiceNow MVP
---
~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2019 06:35 AM