GlideAjax Script Include and Client Script code to restrict access of fields not working.

prabhmeet
Giga Expert

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);
}
}
}

1 ACCEPTED SOLUTION

dvp
Mega Sage
Mega Sage

 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);
        }
    }
    
}

 

 

View solution in original post

14 REPLIES 14

Yea, after reading a bit more, I missed the part about this being a catalog item. ACL's then really wouldn't help here.


Please consider marking my reply as Helpful and/or Accept Solution, if applicable. Thanks!

oh ok, then I guess I have to work with GlideAjax only

Service_RNow
Mega Sage

HI,

Check this website. Maybe you will find some interesting information.

https://community.servicenow.com/community?id=community_question&sys_id=c97a07e9db5cdbc01dcaf3231f96...

Please mark reply as Helpful/Correct, if applicable. Thanks!

Hi Ram, if I use g_scratchpad for my requirement, how can I write the code for getting requested for's manager and requested for manager's manager in the display business rule?

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);
}