This tutorial assumes you have created an application and the application is approved:
Creating the application
Create the OAuth Profile and OAuth Scope.
Navigate to the “Outbound HTTP Request” module and create a REST message with the requested HTTP Methods.
Verify authentication with “Get Oauth Token” link. Enter your credentials when prompted.
In the method enter the content-type as application/json and click Test
This will return the JSON you need to parse into your import table.
The Import set table needs to be created with the requested fields to map. A transform map will place the data into the final Service Now table. https://docs.servicenow.com/bundle/newyork-platform-administration/page/administer/import-sets/reference/import-sets-landing-page.html
Script Include that will place data into an Import set table is provided. You can call this script include from a scheduled job.
//Follow Service Now's guides on Import set tables and Trandform maps. This is a script include that can be used to place the JSON data into an import set table.
GetAssetAPI.prototype = {
initialize: function() {
},
getAssetList: function() {
try {
//get new access token
//GlideOAuthClientRequest
var clientRequest = new sn_auth.GlideOAuthClientRequest();
clientRequest.setGrantType('refresh_token');
clientRequest.setRefreshToken(token);
//GlideOAuthClient
var client = new sn_auth.GlideOAuthClient();
//GlideOAuthClientResponse
var tokenResponse = client.requestTokenByRequest('CMDB Test', clientRequest);
//GlideOAuthToken
var token = tokenResponse.getToken();
if (token) {
var count = 1000; //This is the number of assets you can get in a single query
var startIndex = 1; //This is the page number to query
var cont = true; //This is the boolean to say if you need to query more records
//Keep querying while there are more assets to get
while (cont) {
var response = getTPAssets(startIndex,count, token);
if(response.getStatusCode() === 200) {
//Get the body of the response where the assets reside
var respData = JSON.parse(response.getBody());
var resourceCount = respData.resources.length;
//Check to see if we got any results
if(resourceCount > 0) {
//Prepare to create a new u_asset_rest import set record
var rec = new GlideRecord('u_asset_rest');
//Loop through the resources to create a new u_asset_rest record for each
for (var i = 0; i < resourceCount; i++) {
rec.initialize();
rec.u_devicename = respData.resources[i].deviceName;
rec.u_devicetype = respData.resources[i].deviceType;
rec.u_devicemfg = respData.resources[i].deviceMfg;
rec.u_devicesn = respData.resources[i].deviceSn;
rec.u_deviceos = respData.resources[i].deviceOs;
rec.u_memory = respData.resources[i].memory;
rec.u_graphics = respData.resources[i].graphics;
rec.u_processor = respData.resources[i].processor;
rec.u_deviceosoriginal = respData.resources[i].deviceOsOriginal;
rec.u_warstatus = respData.resources[i].warStatus;
rec.u_locationcc = respData.resources[i].locationcc;
rec.u_companyname = respData.resources[i].companyName;
rec.u_osrelease = respData.resources[i].osRelease;
rec.u_osversion = respData.resources[i].osVersion;
rec.u_osstatus = respData.resources[i].osStatus;
rec.u_discovery_source = 'TechPulse';
rec.model_id = '';
rec.asset = '';
rec.insert();
}
//If the number of results returned was less than the max query, query the next page
resourceCount != count ? cont = false : startIndex++;
} else {
//If no results, stop querying
cont = false;
}
} else {
cont = false;
}
}
}
} catch (e) {
gs.error("Error occurred during script execution for Assets Reason: "+ e.getMessage());
}
/*
* REST query the TechPulse Asset API
*/
function getTPAssets(startIndex,count, token){
var r = new sn_ws.RESTMessageV2('Asset Test', 'Asset HW INV POST');
r.setQueryParameter('grant_type', 'refresh_token');
r.setQueryParameter('refresh_token', token);
r.setQueryParameter('startIndex', startIndex);
r.setQueryParameter('count', count);
var response = r.execute();
return response;
}
}
};
This is an example of the data feed into the cmdb_ci_computer table.