What is the best alternative to GlideRecord in ACL ? Refer example below

Snehal13
Kilo Sage

This read ACL is on sc_req_item table for allowing read access to approvers.

I want to replace using GlideRecord with a different approach as SN doesn't recommend using GlideRecord/GlideRecordSecure/GlideRecordAggregate in ACL

 

var gr_obj = new GlideRecord('sysapproval_approver');
gr_obj.addQuery('approver', gs.getUserID());
gr_obj.addQuery('sysapproval.parent', current.sys_id);
gr_obj.query();
if (gr_obj.next()) {
     return true;
}
return false;

Example 2 

This read ACL is on sc_task table to allow read for all fields in sc_task

var task_gr = new GlideRecord('task');
task_gr.addQuery('parent', current.request_item.universal_request);
task_gr.query();
while (task_gr.next()) {
                   if (gs.getUser().isMemberOf(task_gr.assignment_group.getDisplayValue())) {
                   answer = true;
                   }
}

 

2 ACCEPTED SOLUTIONS

Ankur Bawiskar
Tera Patron
Tera Patron

@Snehal13 

you can create a script include and function and then write that code there

Then call that script include in ACL advanced script.

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

@Snehal13 

Correct, the script include function will return true/false

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

14 REPLIES 14

@Ankur Bawiskar 

One quick query - If I move the existing ACL script logic (having the GlideRecord logic to query) to a script include and let the ACL script call this script include, will SN execute the script include logic under ACL context or under script include context ?

 

The whole point of my requirement is to ensure that the SN health scan report does not flag ACLs that have ACL script using GlideRecord/GlideAggregate as it is not recommended best practice.

Snehal13
Kilo Sage

@Ankur Bawiskar , I have marked your answer as Correct and helpful already but 1 quick ask - Is it possible to remove the usage of GlideRecord entirely from above given ACL script examples ? 

@Snehal13 

you need to create script include function and in that function pass the current object and then handle the logic

that function will return true/false

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@Ankur Bawiskar , I get usage of script include. - Is it possible to remove the usage of GlideRecord entirely from  ACL and script include ? I don't want to use gliderecord anywhere. Refer original question 2 examples 

@Snehal13 

for 2nd example you can do like this

answer = gs.getUser().isMemberOf(current.request_item.universal_request.assignment_group);

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader