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