- 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-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-06-2024 12:29 PM - edited 03-06-2024 12:30 PM
Correct code is attached