- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-04-2014 07:21 AM
I am trying to use a REST message to return JSON data (using the script below). When I look at my logs I can see that the lat / long values are undefined.
I've tried putting my query with test data (https://maps.googleapis.com/maps/api/geocode/json?address=60%20Cleveland%20street,%20Belfast,%20Unit...) straight into a browser and I get the required results.
Can anyone shed some light as to why I get undefined returns?
var loc = new GlideRecord('cmn_location');
loc.addEncodedQuery("country=United Kingdom^parent=NULL");
// Issue the query to the database to get all records
loc.query();
var j = 1;
while (loc.next()) {
gs.log('Record Found ' + loc.name, 'DC Log');
if (updateLatLong(loc)) {
gs.log("Updated: " + loc.name, 'DC Log');
} else {
gs.log("Failed to update: " + loc.name, 'DC Log');
}
//only process 100 records
if (j < 100)
j++;
else
break;
}
function updateLatLong(loc) {
// Create an address from the available fields
var address = String(loc.name);
var city = String(address.split(" - ")[1]);
city = String(city.split(", ")[0]);
address = String(address.split(", ")[2]);
gs.log('Address = ' + address, 'DC Log');
if (address != undefined && city != undefined) {
address += (', ' + city + ', ' + loc.country);
gs.log("requesting address:" + address, 'DC Log');
//get the Rest Message service
var r = new RESTMessage('Google_Geolocate', 'get');
r.setStringParameter('address', String(address));
var response = r.execute();
// put in a a wait or it will return undefined
var k = 1;
while (response == null) {
response = r.getResponse(1000);
k++;
if (k > 30) {
gs.log('service time-out', 'DC Log');
break;
}
}
gs.log("response took ... " + k + " seconds");
//parse response
var parser = new JSONParser();
var parsed = parser.parse(response.getBody());
if (parsed != null && typeof(parsed) != undefined) {
if(String(parsed.results[0].geometry.location.lat != undefined)) {
loc.latitude = String(parsed.results[0].geometry.location.lat);
loc.longitude = String(parsed.results[0].geometry.location.lng);
gs.log("Lat/Long = " + String(loc.latitude) + ', ' + String(loc.longitude), 'DC Log');
gs.log('Parsed = ' + String(parsed.results[0].geometry.location.lat), 'DC Log');
var g_address = parsed.results[0].address_components;
for (var m = 0; m < g_address.length; m++) {
for (var n = 0; n < g_address[m].types.length; n++) {
if (g_address[m].types[n] == "country") {
loc.country = g_address[m].long_name;
}
}
}
}
} else {
gs.log("Problem with returned JSON", 'DC Log');
}
//update record on change
if (loc.latitude.changes() || loc.longitude.changes()) {
loc.update();
return true;
} else {
loc.lat_long_error = "true";
loc.update();
return false;
}
}
}
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-08-2014 01:10 AM
I've found the problem if any one is interested...
The script above is fine the problem lays with the google api key.
As I was using the out of the box key the limit on calls had been reached.
I am investigating other free options, as it'll be used once maybe twice.
Has anyone used Bing or another service for Geocoding in SNow?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-04-2014 07:26 AM
Try using JSUtil.logObject() instead of gs.log and see if that helps.
Thanks,
Joe
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-04-2014 07:31 AM
I've tried using the JSUtil.logObject() and I get 'null, undefined, or not an object'
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-04-2014 07:33 AM
I've seen on the wiki that there are REST API debugging tools with Eureka. However I am running Dublin so I'm not sure how to debug this.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-05-2014 01:07 AM
Can anyone suggest any reason why this object is only undefined when pulled into Service Now?
