Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Scripted rest api

Rj27
Mega Guru

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

1 ACCEPTED SOLUTION

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

15 REPLIES 15

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

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

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"
}

 

find_real_file.png

line 46 mentioned in screenshot is: response.setBody(JSON.stringify(res));

Hi Ruchi,

so are you saying the Request and RITM is getting generated properly?

Did you try to print the Req Number?

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

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."
};