- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2024 07:48 PM - edited 03-04-2024 07:49 PM
I am testing the catalog REST API integration and struggling with setting up a reference field (Requested_for) on the catalog item. When request created through the integration requested_for is not getting populated. Other variable fetch into the request as expected.
{
'sysparm_id': 'ca9a27141bbcc2102a2eedb7b04bcb0f',
'sysparm_quantity': '1',
'variables': {
'v_person_leaving_fn' : 'Test_11',
'v_person_leaving_sn' : 'Test_456',
'v_line_manager' : 'Justin Speed',
'v_offboarding_employment_type' : 'operations',
'requested_for' : 'Damien Reed',
'v_date_leaving' : '25/03/2024'
}
}
Please tell me how to fix this issue.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 04:49 PM - edited 03-20-2024 04:51 PM
Thanks everyone. I have created Scripted Rest API for my requirements, and it works perfectly. Now I can fully control all the fields through script.
I am adding my code here in case if anyone want to take advantage.
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var reqbody = request.body.dataString;
try {
var parser = new global.JSON();
var parsedData = parser.decode(reqbody);
var FirstName = parsedData.v_person_leaving_fn;
var linemanager = parsedData.v_line_manager;
var SurName = parsedData.v_person_leaving_sn;
var Dateleaving = parsedData.v_date_leaving;
var EmpType = parsedData.v_offboarding_employment_type;
// Log the parsed data
gs.log("Parsed Data: " + JSON.stringify(parsedData));
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', linemanager); // Assuming linemanager is the username
grUser.addQuery('name', linemanager); // Assuming linemanager is the username
grUser.query();
if (grUser.next()) {
var linemanagerSysId = grUser.sys_id.toString(); // Get the sys_id of the user
}
var item = cart.addItem('ca9a27141bbcc2102a2eedb7b04bcb0f', 1);
// Set the variables on the request item form
cart.setVariable(item, "v_person_leaving_fn", FirstName);
cart.setVariable(item, "v_person_leaving_sn", SurName);
cart.setVariable(item, "v_line_manager", linemanagerSysId); // Set the sys_id of the user
cart.setVariable(item, "v_date_leaving", Dateleaving);
cart.setVariable(item, "v_offboarding_employment_type", EmpType);
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', linemanagerSysId); // Set the sys_id of the user
reqRecord.update();
}
// Log the request number
gs.log("Request Number: " + reqNumber);
// Fetch the RITM number for response
var ritm = new GlideRecord('sc_req_item');
ritm.get('request.number', reqNumber);
var ritmNumber = ritm.number;
gs.info("RITM Number: " + ritmNumber);
//gs.log("Test"); // Add any additional logging here if needed
var res = {};
res["status"] = "Success";
res["requestNumber"] = reqNumber;
res["requestItemNumber"] = ritmNumber;
response.setBody(res);
} catch (ex) {
// Log any errors
gs.error("Error: " + ex.message);
var res = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(JSON.stringify(res));
response.setStatus(500);
}
})(request, response);
Jason data format:
{
//"sysparm_id": "ca9a27141bbcc2102a2eedb7b04bcb0f",
"sysparm_quantity": "1",
"v_line_manager": "Damien Reed",
"v_person_leaving_fn": "Andy",
"v_person_leaving_sn": "Rock",
"v_offboarding_employment_type" : "operations",
"v_date_leaving": "2024-03-06"
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2024 09:14 PM
Hi Suman,
I am using simple REST messages for this integration. I can not find anywhere that I can add this script within my HTTP POST methods.
Do I have to create scripted REST API for this integration?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2024 09:26 PM
Hi @attanhes ,
consider your catalog item has variable which is of type reference to sys_user; so 3rd party won't know the user sys_id and it would lead to variable set to empty
So you better create scripted REST API and handle the request they send and then use Cart API to create RITM and REQ.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.
Please refer to the below article:
If I could help you with your Query then, please hit the Thumb Icon and mark it as Correct !!
Thanks & Regards,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-04-2024 09:53 PM
Hi @attanhes
Please try the below approach :
1. Ensure the query parameter "sysparm_input_display_value" is set to true
2. In the request body, pass the userid of the requestor like I have passed userid for Abel Tuter
3. Hit the send button and check the RITM. You should be able to map the Requestor with Display Value instead of sys_id.
Thanks & Regards
Amit Verma
Please mark this response as correct and helpful if it assisted you with your question.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-20-2024 04:49 PM - edited 03-20-2024 04:51 PM
Thanks everyone. I have created Scripted Rest API for my requirements, and it works perfectly. Now I can fully control all the fields through script.
I am adding my code here in case if anyone want to take advantage.
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var reqbody = request.body.dataString;
try {
var parser = new global.JSON();
var parsedData = parser.decode(reqbody);
var FirstName = parsedData.v_person_leaving_fn;
var linemanager = parsedData.v_line_manager;
var SurName = parsedData.v_person_leaving_sn;
var Dateleaving = parsedData.v_date_leaving;
var EmpType = parsedData.v_offboarding_employment_type;
// Log the parsed data
gs.log("Parsed Data: " + JSON.stringify(parsedData));
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', linemanager); // Assuming linemanager is the username
grUser.addQuery('name', linemanager); // Assuming linemanager is the username
grUser.query();
if (grUser.next()) {
var linemanagerSysId = grUser.sys_id.toString(); // Get the sys_id of the user
}
var item = cart.addItem('ca9a27141bbcc2102a2eedb7b04bcb0f', 1);
// Set the variables on the request item form
cart.setVariable(item, "v_person_leaving_fn", FirstName);
cart.setVariable(item, "v_person_leaving_sn", SurName);
cart.setVariable(item, "v_line_manager", linemanagerSysId); // Set the sys_id of the user
cart.setVariable(item, "v_date_leaving", Dateleaving);
cart.setVariable(item, "v_offboarding_employment_type", EmpType);
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', linemanagerSysId); // Set the sys_id of the user
reqRecord.update();
}
// Log the request number
gs.log("Request Number: " + reqNumber);
// Fetch the RITM number for response
var ritm = new GlideRecord('sc_req_item');
ritm.get('request.number', reqNumber);
var ritmNumber = ritm.number;
gs.info("RITM Number: " + ritmNumber);
//gs.log("Test"); // Add any additional logging here if needed
var res = {};
res["status"] = "Success";
res["requestNumber"] = reqNumber;
res["requestItemNumber"] = ritmNumber;
response.setBody(res);
} catch (ex) {
// Log any errors
gs.error("Error: " + ex.message);
var res = {};
res["status"] = "Error";
res["message"] = ex.message;
response.setBody(JSON.stringify(res));
response.setStatus(500);
}
})(request, response);
Jason data format:
{
//"sysparm_id": "ca9a27141bbcc2102a2eedb7b04bcb0f",
"sysparm_quantity": "1",
"v_line_manager": "Damien Reed",
"v_person_leaving_fn": "Andy",
"v_person_leaving_sn": "Rock",
"v_offboarding_employment_type" : "operations",
"v_date_leaving": "2024-03-06"
}