- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-01-2019 10:38 AM
I have a catalog item where I have a reference field to sys_user table (Requested for).
In Some fields on the form only the following users can enter values - requested for's manager, requested for manager's manager, User access administration group. To other users the fields should be visible but they cannot enter values.
I have written a Script Include and Client Script for this but it is not working. I am new to ServiceNow and not too good with coding. Can someone please point out my mistakes?
Please someone help me correct the code?
Script Include -
var RestrictAccessToUpdateFields = Class.create();
RestrictAccessToUpdateFields.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAccess: function() {
var obj ={};
obj.retvalue ='';
obj.mm = '';
obj.grp = '';
var a = this.getParameter('sysparm_user_id');
var manager = new GlideRecord('sys_user');
manager.addQuery('sys_id', a);
manager.query();
if(manager.next()){
obj.retvalue = manager.manager.sys_id;
obj.mm = manager.manager.manager.sys_id;
obj.grp =gs.getUser().isMemberOf('User Access Administration');
}
return JSON.stringify(obj);
},
type: 'RestrictAccessToUpdateFields'
});
Onchange CLient Script
var id = g_form.getValue('requested_for');//newValue
var ga = new GlideAjax('RestrictAccessToUpdateFields');
var a = g_user.getUser();
ga.addParam('sysparm_name','getAccess');
ga.addParam('sysparm_user_id',id);
ga.getXML(CallBack);
function CallBack(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
var returneddata = JSON.parse(answer);
if(returneddata.retvalue == g_user.userID || returneddata.mm == g_user.userID || returneddata.grp == true ){
g_form.setReadOnly('updated_first_name', false);
g_form.setReadOnly('updated_last_name', false);
}
else{
g_form.setReadOnly('updated_first_name', true);
g_form.setReadOnly('updated_last_name', true);
}
}
}
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 07:42 AM
getUser method is not available in g_user and also in script inlcude your code returns the objects instead of sys id of managers
Try the below script
Script Include -
var RestrictAccessToUpdateFields = Class.create();
RestrictAccessToUpdateFields.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAccess: function() {
var obj ={};
obj.retvalue ='';
obj.mm = '';
obj.grp = '';
var a = this.getParameter('sysparm_user_id');
var manager = new GlideRecord('sys_user');
manager.addQuery('sys_id', a);
manager.query();
if(manager.next()){
obj.retvalue = manager.manager.sys_id.toString();
obj.mm = manager.manager.manager.sys_id.toString();
obj.grp =gs.getUser().isMemberOf('User Access Administration');
}
return JSON.stringify(obj);
},
type: 'RestrictAccessToUpdateFields'
});
Onchange CLient Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var id = g_form.getValue('requested_for');//newValue
var ga = new GlideAjax('RestrictAccessToUpdateFields');
ga.addParam('sysparm_name','getAccess');
ga.addParam('sysparm_user_id',id);
ga.getXML(CallBack);
function CallBack(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
var returneddata = JSON.parse(answer);
if(returneddata.retvalue == g_user.userID || returneddata.mm == g_user.userID || returneddata.grp == true ){
g_form.setReadOnly('updated_first_name', false);
g_form.setReadOnly('updated_last_name', false);
}
else{
g_form.setReadOnly('updated_first_name', true);
g_form.setReadOnly('updated_last_name', true);
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 06:05 AM
Hi Ram,
I tried the below code( just for the group restriction) but it is not working -
Display BR-
(function executeRule(current, previous /*null when async*/) {
function userIsMember() {
g_scratchpad.isMember = gs.getUser().isMemberOf('User Access Administration');
}
})(current, previous);
Client Script -
function onLoad() {
var myVariablesAreReadOnly = false;
if (!g_scratchpad.isMember) {
myVariablesAreReadOnly = true;
}
g_form.setReadOnly("variables.updated_first_name",myVariablesAreReadOnly);
g_form.setReadOnly("variables.updated_last_name",myVariablesAreReadOnly);
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 07:42 AM
getUser method is not available in g_user and also in script inlcude your code returns the objects instead of sys id of managers
Try the below script
Script Include -
var RestrictAccessToUpdateFields = Class.create();
RestrictAccessToUpdateFields.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAccess: function() {
var obj ={};
obj.retvalue ='';
obj.mm = '';
obj.grp = '';
var a = this.getParameter('sysparm_user_id');
var manager = new GlideRecord('sys_user');
manager.addQuery('sys_id', a);
manager.query();
if(manager.next()){
obj.retvalue = manager.manager.sys_id.toString();
obj.mm = manager.manager.manager.sys_id.toString();
obj.grp =gs.getUser().isMemberOf('User Access Administration');
}
return JSON.stringify(obj);
},
type: 'RestrictAccessToUpdateFields'
});
Onchange CLient Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var id = g_form.getValue('requested_for');//newValue
var ga = new GlideAjax('RestrictAccessToUpdateFields');
ga.addParam('sysparm_name','getAccess');
ga.addParam('sysparm_user_id',id);
ga.getXML(CallBack);
function CallBack(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
var returneddata = JSON.parse(answer);
if(returneddata.retvalue == g_user.userID || returneddata.mm == g_user.userID || returneddata.grp == true ){
g_form.setReadOnly('updated_first_name', false);
g_form.setReadOnly('updated_last_name', false);
}
else{
g_form.setReadOnly('updated_first_name', true);
g_form.setReadOnly('updated_last_name', true);
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 11:07 AM
Hi dvp,
Thanks a lot. It worked now.
I am hoping you can help me with one of my other question, there also I have written a Glide ajax script.
It is fetching user's details from sys_user table depending on which user's name is entered on the form. Though it is working, there is a problem that first name of some users is not coming up.
Question - Get User's values from sys_user table on basis of user selected.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 11:12 AM
Can you share the script that you have currently
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2019 11:17 AM
Hi dvp,
So It is returning first name for many other users I randomly checked, only for users - Abraham Lincoln, Prabhmeet Kaur, System Administrator it return every other detail except first name.
here's the script -
script include-
var GetUserDetailsAjax = Class.create();
GetUserDetailsAjax.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getInfo: function(){
var obj={};
obj.first_name='';
obj.last_name='';
obj.email='';
obj.vendor_name='';
obj.location='';
obj.department='';
obj.beeline_assignment_number='';
obj.manager='';
obj.contracter_end_date='';
obj.phone_number='';
// obj.street='';
var id=this.getParameter('sysparm_user_id');
var gr= new GlideRecord('sys_user');
if(gr.get(id)){
if(gr.location!='')
obj.first_name = gr.first_name.toString();
obj.last_name = gr.last_name.toString();
obj.email=gr.email.toString();
obj.vendor_name =gr.u_vendor_name.toString();
obj.location=gr.location.name.toString();
obj.department=gr.department.name.toString();
obj.beeline_assignment_number = gr.department.id.toString();
obj.manager=gr.manager.getDisplayValue().toString();
obj.contracter_end_date=gr.u_end_date.toString();
// obj.zip=gr.zip.toString();
//obj.street=gr.street.toString();
obj.phone_number=gr.mobile_phone.toString();
//here you will get all the required fields from sys_user that you want to show on your form.
}
return JSON.stringify(obj);
},
type: 'GetUserDetailsAjax'
});
Onchange client script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var id = g_form.getValue('requested_for');//newValue
var ga = new GlideAjax('GetUserDetailsAjax');
ga.addParam('sysparm_name','getInfo');
ga.addParam('sysparm_user_id',id);
ga.getXML(CallBack);
function CallBack(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
var user=JSON.parse(answer);
g_form.setValue('first_name',user.first_name);
g_form.setValue('last_name', user.last_name);
g_form.setValue('email_address', user.email);
g_form.setValue('vendor_name', user.u_vendor_name);
g_form.setValue('location_number', user.location);
g_form.setValue('department', user.department);
g_form.setValue('current_assignment_number', user.beeline_assignment_number);
g_form.setValue('manager', user.manager);
g_form.setValue('end_date', user.contracter_end_date);
g_form.setValue('phone_number', user.phone_number);
}