- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-10-2021 08:42 AM
Hi All,
I need to submit a catalog item based on the input parameters coming from a web page.
What I did till now:
1. Rest API explore --> Name space: sn_sc --> API Name: Service Catalog API --> entered the sys_id of the catalog item and given raw JSON body as below:
{
'sysparm_id': 'c28204ba2fe320100697bac62799b66d',
'sysparm_quantity': '1',
'variables':{
'short_description': 'check for api response',
'description': 'check for api response'
}
}
My doubts are:
- Sharing this endpoint to web developer is enough to get this done?
- Do I need to create any validation scripts?
- How to configure the outbound response, I want to show the RITM number instead of Request Number in webpage after submitting the request?
Thanks
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-11-2021 01:12 AM
Hi,
you can share the details but the issue would be
1) consider your catalog item has variable which is of type reference to sys_user; so 3rd party won't know the user sys_id and it would lead to variable set to empty
So you better create scripted REST API and handle the request they send and then use Cart API to create RITM and REQ
I believe you want to create a scripted REST API which would be consumed by 3rd party team. they would send information/variable data as json request corresponding to the variables you share with them. This will be only for single catalog item I consider
Example: if your catalog item has 4 variables as requested_for, requested_by, start_date, end_date
you can inform them to send data as below; so the json request would look like
{
"requested_for":"Abel Tuter",
"requested_by":"Fred Luddy",
"start_date":"2020-04-23",
"end_date":"2020-04-35"
}
Now example script in scripted rest API to create RITM for your catalog item with the above variable data
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var reqbody = request.body.dataString;
try{
var parser = new global.JSON();
var parsedData = parser.decode(reqbody);
var requestedFor = parsedData.requested_for;
var requestedBy = parsedData.requested_by;
var startDate = parsedData.start_date;
var endDate = parsedData.end_date;
var cartId = GlideGuid.generate(null);
var cart = new Cart(cartId);
// give here the sys_id of the catalog item under which those variables are present
// you can query sys_user and get the value and then set those reference variables
var item = cart.addItem('4054428fdb151f0097679ec6db9619c0', 1);
//fill in the variables on the request item form
cart.setVariable(item,"requested_for", requestedFor);
cart.setVariable(item,"requested_by", requestedBy);
cart.setVariable(item,"start_date", startDate);
cart.setVariable(item,"end_date", endDate);
var rc = cart.placeOrder();
// rc is the request number; you can query RITM table and get the RITM number
var reqNumber = rc.number;
var ritm = new GlideRecord('sc_req_item');
ritm.get('request.number', reqNumber);
var ritmNumber = ritm.number;
var res = {};
res["status"] = "Success";
res["requestNumber"] = reqNumber;
res["requestItemNumber"] = ritmNumber;
response.setBody(JSON.stringify(res));
}
catch(ex){
var res = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(JSON.stringify(res));
}
})(request, response);
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-10-2021 03:19 PM
This ServiceNow article -How to submit a catalog item using the Rest API has most answers you need.
If my reply is Helpful/Correct, please mark the answer as correct
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-10-2021 09:23 PM
Hi
Thanks for the response. But I have done the things that were mentioned in the article, I have generated End point and Request Payload format, but my question is about the things that needs to done after these steps.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-11-2021 12:39 AM
Hi
Could you please help on this?
Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-11-2021 01:12 AM
Hi,
you can share the details but the issue would be
1) consider your catalog item has variable which is of type reference to sys_user; so 3rd party won't know the user sys_id and it would lead to variable set to empty
So you better create scripted REST API and handle the request they send and then use Cart API to create RITM and REQ
I believe you want to create a scripted REST API which would be consumed by 3rd party team. they would send information/variable data as json request corresponding to the variables you share with them. This will be only for single catalog item I consider
Example: if your catalog item has 4 variables as requested_for, requested_by, start_date, end_date
you can inform them to send data as below; so the json request would look like
{
"requested_for":"Abel Tuter",
"requested_by":"Fred Luddy",
"start_date":"2020-04-23",
"end_date":"2020-04-35"
}
Now example script in scripted rest API to create RITM for your catalog item with the above variable data
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var reqbody = request.body.dataString;
try{
var parser = new global.JSON();
var parsedData = parser.decode(reqbody);
var requestedFor = parsedData.requested_for;
var requestedBy = parsedData.requested_by;
var startDate = parsedData.start_date;
var endDate = parsedData.end_date;
var cartId = GlideGuid.generate(null);
var cart = new Cart(cartId);
// give here the sys_id of the catalog item under which those variables are present
// you can query sys_user and get the value and then set those reference variables
var item = cart.addItem('4054428fdb151f0097679ec6db9619c0', 1);
//fill in the variables on the request item form
cart.setVariable(item,"requested_for", requestedFor);
cart.setVariable(item,"requested_by", requestedBy);
cart.setVariable(item,"start_date", startDate);
cart.setVariable(item,"end_date", endDate);
var rc = cart.placeOrder();
// rc is the request number; you can query RITM table and get the RITM number
var reqNumber = rc.number;
var ritm = new GlideRecord('sc_req_item');
ritm.get('request.number', reqNumber);
var ritmNumber = ritm.number;
var res = {};
res["status"] = "Success";
res["requestNumber"] = reqNumber;
res["requestItemNumber"] = ritmNumber;
response.setBody(JSON.stringify(res));
}
catch(ex){
var res = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(JSON.stringify(res));
}
})(request, response);
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader