- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-05-2024 11:21 PM - edited 03-05-2024 11:25 PM
I have a catalog item integrated with a scripted REST API, following guidance from a community post @Ankur Bawiskar . The test integration functions as expected, and REQ and RITM tickets are created successfully. However, the issue arises as reference fields are not being populated when requests are created.
(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 grUser = new GlideRecord('sys_user');
grUser.get('requested_for',requestedFor);
var item = cart.addItem('c916f905db70c6105330be32f39619dd', 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));
response.setBody(res);
}
catch(ex){
//var rest = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(JSON.stringify(res));
//result.result = "Failed with error: " + err.toString();
//response.setStatus(500);
//gs.eventQueue()
}
})(request, response);
Json data format comes as in below, both users are existing in the plafom.
{
'sysparm_id': 'c916f905db70c6105330be32f39619dd',
'sysparm_quantity': '1',
'variables': {
'requested_for' : 'Abel Tuter',
'requested_by' : 'Fred Luddy,
'end_date' : '25/03/2024',
'start_date' : '18/03/2024'
}
}
Can someone please tell me as why that requested_for reference does not auto fill when request create throughh rest API?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-06-2024 12:25 PM - edited 03-06-2024 12:33 PM
I am adding my fulll code here in if case anyone wants to take advantage. Also, I endup mapping REQ requested for dictionary same as requested_for variable value.
(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);
// Query the sys_user table to get the requested for user details
var grUser = new GlideRecord('sys_user');
//grUser.addQuery('user_name', requestedFor); // Assuming requestedFor is the username
grUser.addQuery('name', requestedFor); // Assuming requestedFor is the username
grUser.query();
if (grUser.next()) {
var requestedForSysId = grUser.sys_id.toString(); // Get the sys_id of the user
}
var item = cart.addItem('c916f905db70c6105330be32f39619dd', 1);
// Set the variables on the request item form
cart.setVariable(item, "requested_for", requestedForSysId); // Set the sys_id of the user
cart.setVariable(item, "requested_by", requestedBy);
cart.setVariable(item, "start_date", startDate);
cart.setVariable(item, "end_date", endDate);
var rc = cart.placeOrder();
var reqNumber = rc.number;
// Update the "Requested For" field on the REQ record
var reqRecord = new GlideRecord('sc_request');
if (reqRecord.get('number', reqNumber)) {
reqRecord.setValue('requested_for', requestedForSysId); // Set the sys_id of the user
reqRecord.update();
}
// Fetch the RITM number for response
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('request', reqNumber);
ritm.query();
if (ritm.next()) {
var ritmNumber = ritm.number;
}
var res = {};
res["status"] = "Success";
res["requestNumber"] = reqNumber;
res["requestItemNumber"] = ritmNumber;
response.setBody(res);
} catch (ex) {
var res = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(res);
response.setStatus(500);
}
})(request, response);
Jason format should be
{
"sysparm_id": "c916f905db70c6105330be32f39619dd",
"sysparm_quantity": "1",
"requested_for": "Fred Luddy ",
"requested_by": "Abel Tuter,
"start_date": "2024-03-06",
"end_date": "2024-03-10"
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-05-2024 11:44 PM
Hi @attanhes
The issue arises as reference fields are not being populated when requests are created.
Since these variables are in Reference type. The requestedFor and requestedBy in your script should be the user's sys_id instead of name.
cart.setVariable(item,"requested_for", requestedFor); //the user's sys_id
cart.setVariable(item,"requested_by", requestedBy); //the user's sys_id
Cheers,
Tai Vu

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-05-2024 11:54 PM
HI @attanhes the below requested_by and requested_for must be the sysid of the user, else you need to glide user table and match the name and return the sysid of the user and then map on the variables
{
'sysparm_id': 'c916f905db70c6105330be32f39619dd',
'sysparm_quantity': '1',
'variables': {
'requested_for' : 'Abel Tuter', // requires sysid
'requested_by' : 'Fred Luddy,//requires sysid
'end_date' : '25/03/2024',
'start_date' : '18/03/2024'
}
}
Harish
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-06-2024 02:12 AM
Thankfully ChatGPT corrected my code. I misconfigured the Glide reference.
// Query the sys_user table to get the requested for user details
var grUser = new GlideRecord('sys_user');
grUser.addQuery('user_name', requestedFor); // Assuming requestedFor is the username
grUser.query();
if (grUser.next()) {
var requestedForSysId = grUser.sys_id.toString(); // Get the sys_id of the user
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-06-2024 02:14 AM
Hi @attanhes that's what I meant in my reply you need to query user table , match the name and return the sysid and then do the mapping to the variables
Harish