control visibility of assignment group based on logged in user

Shivani29
Mega Guru

Hi All,

 

I have a scenario where if logged in user is a part of wpt and opens new incident form can only see groups related to wpt. Also, if it is not  a new form and incident is assigned to wpt then along with wpt groups , group A should also come in the assignment group so that they can re assign the tkt to group A, if required. I have written script include and client script, added logs as well, script include is passing groups correctly to client script but in assignment group field all the groups are visible. Below are the scripts:

Client Script:

 

function onLoad() {
    //Type appropriate comment here, and begin script below
    if (g_form.isNewRecord()) {
        g_form.addInfoMessage('New Form');
        var ga = new GlideAjax('assignment_group');
        ga.addParam('sysparm_name', 'getVisibleGroups');
       ga.getXML(assignmentGroup);
        function assignmentGroup(response) {
            var answer = response.responseXML.documentElement.getAttribute("answer");
            g_form.addInfoMessage(answer);
            g_form.setReferenceQual('assignment_group',answer);
           
        }
    }
}
 
Script Include:
 
var assignment_group = Class.create();
assignment_group.prototype = {
    initialize: function() {},
    getVisibleGroups: function(){
        var user =  gs.getUserID();

        gs.log('shivani logged in user '+user);
        var groupIds = [];

        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('user',user);
        gr.addEncodedQuery('groupLIKEwpt');
        gr.query();
        gs.log('shivani group count '+gr.getRowCount());
        if (gr.next()){
            gs.log('inside if query');
            var groupUser = new GlideRecord('sys_user_group');
            groupUser.addEncodedQuery('nameLIKEwpt^active=True');
            groupUser.query();
            gs.log('shivani counting row '+groupUser.getRowCount());
            while(groupUser.next()){
            groupIds.push(groupUser.getUniqueValue());
            }}
            else{
                gs.log('inside else');
                var allGroup = new GlideRecord('sys_user_group');
                allGroup.addEncodedQuery('active=true');
                allGroup.query();
                gs.log('all groups count'+allGroup.getRowCount());
                while(allGroup.next()){
                groupIds.push(allGroup.getUniqueValue());
                }}
                gs.log('SHivani Group ID '+groupIds);
                return "sys_idIN" + groupIds;
    },

    type: 'assignment_group'
};
 
Your help is much appreciated.
 
Thanks and Regards,
Shivani
1 ACCEPTED SOLUTION

Shivani29
Mega Guru

Hi All,

 

Thanks for your efforts and time. I managed to resolve this issue by sending the incident number from reference qualifier and in script include i gliderecord the incident table to check if record with this number exists or not. it it does not exist, it is a newReord and accordingly i run the entire script.

 

Regards,

Shivani.

View solution in original post

16 REPLIES 16

Juhi Poddar
Kilo Patron

Hello @Shivani29 

Based on the script, it appears that the Script Include is not marked as client-callable. Please verify if it has been configured as client-callable.

 

"If you found my answer helpful, please like and mark it as an "accepted solution". It helps future readers to locate the solution easily and supports the community!"

 

Thank You
Juhi Poddar

 

Hi Juhi,

 

Yes this is marked as client callable.

 

Regards,

Shivani

Ankur Bawiskar
Tera Patron
Tera Patron

@Shivani29 

you should not use client script for this as you need to restrict.

you should use advanced ref qualifier for this

since you want to know in script include whether it's a new record or existing record pass the record sysId and check the value in script include

Based on that handle the script include function logic

Ref qualifier

javascript: new assignment_group().getVisibleGroups(current.sys_id);

something like this

var assignment_group = Class.create();
assignment_group.prototype = {
    initialize: function() {},
    getVisibleGroups: function(sysId) {

        var isNewRecord = '';
        if (sysId)
            isNewRecord = 'false';
        else
            isNewRecord = 'true';

        var user = gs.getUserID();

        gs.log('shivani logged in user ' + user);
        var groupIds = [];

        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('user', user);
        gr.addEncodedQuery('groupLIKEwpt');
        gr.query();
        gs.log('shivani group count ' + gr.getRowCount());
        if (gr.next()) {
            gs.log('inside if query');
            var groupUser = new GlideRecord('sys_user_group');
            groupUser.addEncodedQuery('nameLIKEwpt^active=True');
            groupUser.query();
            gs.log('shivani counting row ' + groupUser.getRowCount());
            while (groupUser.next()) {
                groupIds.push(groupUser.getUniqueValue());
            }
        } else {
            gs.log('inside else');
            var allGroup = new GlideRecord('sys_user_group');
            allGroup.addEncodedQuery('active=true');
            allGroup.query();
            gs.log('all groups count' + allGroup.getRowCount());
            while (allGroup.next()) {
                groupIds.push(allGroup.getUniqueValue());
            }
        }
        gs.log('SHivani Group ID ' + groupIds);
        return "sys_idIN" + groupIds;
    },

    type: '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

Hi Ankur,

 

Thanks for replying. Let me try this way to check NewRecord in script include and will update you.

 

Regards,

Shivani

Hi Ankur,

 

isNewRecord part is not working. I tried and checked by adding logs and getting sys id for new record as well.

 

Regards,
Shivani