Skip to main content

ServiceNow SAMPLE REST MESSAGE POST - Service Catalog Cart API - How to Order a Catalog Item

 ServiceNow SAMPLE REST MESSAGE POST - Service Catalog Cart API - How to Order a Catalog Item on a Remote Instance

see Service Catalog API > jump to 'order_now' section

OPTION 1: Without a REST Message



var request = new sn_ws.RESTMessageV2();
var sn_instance = 'https://dev223167.service-now.com';
//var cat_item_sysid= '7198552237b1300054b6a3549dbe5dea'; //--e.g. Adobe Acrobat - item with no variables

var cat_item_sysid= '50113326979e4d1021983d1e6253af5e'; //--e.g. Apple USB-C charge cable - item with 2 variables
var catalogapi_url='/api/sn_sc/servicecatalog/items/' + cat_item_sysid + '/order_now';
request.setEndpoint(sn_instance + catalogapi_url);
request.setHttpMethod('POST');

//--OPTION 1:
//var user = 'ruen.test';
//var password = '';
//request.setBasicAuth(user,password);

//--OPTION 2:
var authentication_type='basic';
var profile_name='6f7f927f47a346104410edf1d16d4376';//--sys_id of sys_auth_profile_basic record
request.setAuthenticationProfile(authentication_type, profile_name);

request.setRequestHeader("Accept","application/json");
//data
var requested_for = '62826bf03710200044e0bfc8bcbe5df1'; //--'Abel Tuter', replace with sysid of user
var business_justification='THIS IS A TEST--2024';
var JSON_cat_item=
"{";
JSON_cat_item+= "sysparm_quantity: 1";
JSON_cat_item+=",";
JSON_cat_item+= "variables: {";
JSON_cat_item+= "requested_for: '" + requested_for + "',";//--MUST contain the ' ' or throws an error
JSON_cat_item+= "justification: '" + business_justification +"'";
JSON_cat_item+= "}";
JSON_cat_item+= "}"

request.setRequestBody(JSON_cat_item);


var response = request.execute();
gs.log('RESP='+response.getBody());

var json_string=JSON.parse(response.getBody());
var sReqNum=json_string.result.number;
gs.print('REQUEST NUMBER=' + sReqNum);


OPTION 2: Using a REST Message


- enter the endpoint in this format:

https://dev126222.service-now.com/api/sn_sc/servicecatalog/items/${sys_id}/order_now

use variable substitution to populate the sys id. Note the sys id corresponds to the catalog item.


- add the HTTP Headers:





- add the HTTP Content:

example: 

{
"sysparm_quantity":"1",
"sysparm_requested_for":"ruen.catitem.user",
"variables":{
"test_variable":"this is a test 1",
"test_variable_2":"this is a test 2"
}
}

or here's how you could use variable substitution in the content:

{
"sysparm_quantity":"1",
"sysparm_requested_for":"ruen.catitem.user",
"variables":{
"test_variable":"${variable_1}",
"test_variable_2":"${variable_2}"
}
}




Preview Script Usage

try {
var r = new sn_ws.RESTMessageV2('RemoteServiceNowInstance', 'post_new_request');
//var authentication_type = 'basic';
//var profile_name = '6016d39dc3ef3510311f1c5ce00131f1';
//--override authentication profile
//--authentication type ='basic'/ 'oauth2'
//r.setAuthenticationProfile(authentication_type, profile_name);

r.setStringParameterNoEscape('sys_id', '36376791c3637510311f1c5ce001319c');
r.setStringParameterNoEscape('sysparm_quantity', '1');
r.setStringParameterNoEscape('variable_2', 'test 2');
r.setStringParameterNoEscape('variable_1', 'test 1');
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();

gs.print('response code='+httpStatus);

//--get the number of the new REQ:
var resp=JSON.parse(responseBody);
gs.print(resp.result.number); //--e.g. REQ
}
catch(ex) {
var message = ex.message;
}



Comments

Popular posts from this blog

ServiceNow check for null or nil or empty (or not)

Haven't tested these all recently within global/local scopes, so feel free to have a play! option 1 use an encoded query embedded in the GlideRecord , e.g.  var grProf = new GlideRecord ( 'x_cls_clear_skye_i_profile' ); grProf . addQuery ( 'status=1^ owner=NULL ' ); grProf . query (); even better use the glideRecord  addNotNullQuery or addNullQuery option 2 JSUtil.nil / notNil (this might be the most powerful. See this link ) example: if ( current . operation () == 'insert' && JSUtil . notNil ( current . parent ) && ! current . work_effort . nil ())  option 3 there might be times when you need to get inside the GlideRecord and perform the check there, for example if the code goes down 2 optional routes depending on null / not null can use gs.nil : var grAppr = new GlideRecord ( 'sysapproval_approver' ); var grUser = new GlideRecord ( 'sys_user' ); if ( grUser . get ( 'sys_id' , current . approver )){...

Code a pause/wait - gs.sleep or gs.wait alternative, pause script for specified seconds (timer)

Code a pause/wait - gs.sleep / gs.wait alternative, pause script for specified seconds (timer)  e.g. 10 seconds: do_sleep ( 10000 ); function do_sleep ( milliseconds ) { var start = new Date (). getTime (); for ( var i = 0 ; i < 1e7 ; i ++) { if (( new Date (). getTime () - start ) > milliseconds ){ gs . print ( 'waking up!' ); break ; } } }