- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-23-2020 08:29 AM
Hi,
I have a requirement to create RITM using scripted rest api. The values should be passed as json.
Any leads to do this would be highly appreciated.
TIA!
-Ruchi
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-24-2020 08:58 PM
Hi Ruchi,
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
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);
Mark ✅ Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.
Thanks
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
04-27-2020 04:54 AM
Hi Ruchi,
Can you include the content-type as application/json?
Can you share screenshot of how you are testing with postman?
Also share the script in your scripted rest api?
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
04-27-2020 05:13 AM
Hi Ankur,
Below is my script:
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var reqbody = request.body.dataString;
var parser = new JSONParser();
var parsedResponse = parser.parse(reqbody);
try {
var software = parsedResponse.acrobat;
var addRequirement = parsedResponse.Additional_software_requirements;
var cartId = GlideGuid.generate(null);
var cart = new Cart(cartId);
var item = cart.addItem('04b7e94b4f7b4200086eeed18110c7fd', 1);
cart.setVariable(item, "acrobat", software);
cart.setVariable(item, "Additional_software_requirements", addRequirement);
var rc = cart.placeOrder();
var reqNumber = rc.number;
gs.log('RITM number '+reqNumber);
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 result = {};
result["status"] = "Error";
result["message"] = ex.message;
response.setBody(JSON.stringify(result));
}
})(request, response);
PFA the screenshot from postman.
Also, Body is:
{
"acrobat":"true",
"Additional_software_requirements":"Test1"
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-27-2020 05:36 AM
line 46 mentioned in screenshot is: response.setBody(JSON.stringify(res));
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-27-2020 05:39 AM
Hi Ruchi,
so are you saying the Request and RITM is getting generated properly?
Did you try to print the Req Number?
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
04-27-2020 05:43 AM
Yes RITM and REQ are getting generated.
I was just checking the error . Since it's an information displayed in postman,,i have changed it to
return{
"Status": "Success",
"Message": reqNumber +" is created."
};