Unable to query the HR profile data using scripted rest API on sn_hr_core_profile table? I am always getting response as record not found.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-25-2022 09:09 PM
Hi All,
I am trying to update the sn_hr_core_profile table with additional fields for each record using a scripted rest API.
This API will have the logic to get the sys_id of the employee record using the Employee number and then use that sys_id to populate additional fields for each record received from the input JSON(this can have multiple nodes).
I am always stuck at the first point itself where the GlideRecord for sn_hr_core_profile table is not giving me any output for the gr.query().
I am sure this has something to do with the ACL's but I am not able to identify the real cause. Any pointers here are much appreciated.
- Labels:
-
HR Service Delivery

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-25-2022 09:17 PM
Hi,
Please add a screenshot of your script so we could help.
Thanks,
Arav
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-28-2022 08:36 PM
Hi Arav, Thanks for your time. Please find the script below. I just trying to do a GET operation but seems like it says record doesn't exist. Looks like an ACL issue but not sure why?
var emplid = request.pathParams.emplid;
gs.info("emplid is : "+emplid);
var gr = new GlideRecordSecure('sn_hr_core_profile');
//var gr = new GlideRecordSecure('incident');
gr.addQuery('employee_number',emplid );
//gr.addQuery('sys_id',emplid );
gr.query();
gs.info("outside loop : "+gr.employee_number);
if(gr.next()){
gs.info("inside loop : "+gr.employee_number);
var respBody = {};
respBody.emp_number = gr.employee_number;
response.setBody(respBody);
response.setStatus(201);
}
//response.setStatus(200);
//response.setBody({'message': 'success' });
return;

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-28-2022 10:09 PM
Hi Shailesh,
The script is working for me and so I have a few additional questions.
a. Is the REST API written in Human Resources Core scope ?
b. Why is there a need to use "GlideRecordSecure" vs "GlideRecord" ? Are you trying to hide a few profile records ? Please check the "read" ACL on "sn_hr_core_profile" to see if it has been customized
c. As you are using pathParams, is the relative path properly configured in REST message ? Before I ask more on this, is the snippet below printing the employee id being passed ?
gs.info("emplid is : "+emplid);
Thanks,
Arav
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-29-2022 08:43 AM
Hi Arav, Thanks for your time on this.
Please find below my answers here.
a) Is the REST API written in Human Resources Core scope ?
Ans) Yes its in Human resources Core scope.
b. Why is there a need to use "GlideRecordSecure" vs "GlideRecord" ? Are you trying to hide a few profile records ? Please check the "read" ACL on "sn_hr_core_profile" to see if it has been customized
Ans) Since this data is sensitive I saw in service now Documentation to use GlideRecordSecure instead of GlideRecord. Not trying to hide any profile records. I don't see any customizations on this.
c. As you are using pathParams, is the relative path properly configured in REST message ? Before I ask more on this, is the snippet below printing the employee id being passed ?
gs.info("emplid is : "+emplid);
Ans) Yes its printing the correct empl id.
Just FYI, In fact I tried the same code for incident table and things works well here.
Regards,
Shailesh