Script include not working on call Dynamic Filter option

rishabh31
Mega Sage

Dear Community Members,

 

Can anyone please check what's wrong here, during testing on reports not getting desired results to provide group names as filter condition (here dispalys- 'All>Assignment group is (empty)'- Screenshot attached) & their associated records of which logged-in user are NOT member of those groups.

 

-Script include: (Client callable- true); Accessible from- All Application Scope; ACL with itil role created while saving (Screenshot attached below this code)

var MemberUtil = Class.create();
MemberUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
notMemberOf: function(userID) {
        var notMemberOf = [];

        var groupGR = new GlideRecord('sys_user_group');
        groupGR.query();

        while (groupGR.next()) {
            var memberGR = new GlideRecord('sys_user_grmember');
            memberGR.addEncodedQuery('user=' + userID + '^group=' + groupGR.getUniqueValue());
            memberGR.query();
            if (!memberGR.hasNext()) {
                notMemberOf.push(groupGR.getUniqueValue());
            }
        }

        return notMemberOf.join(','); // returns sysID of all groups which this user is not member of 	
    },
    type: 'MemberUtil'
});

rishabh31_4-1676272761541.png

 

-Dynamic filter Option to call above-created script include:-

rishabh31_3-1676272366026.png

 

- Result:-

rishabh31_1-1676271166330.png

I checked with impersonating users also, but it does not provide any records for logged-in (impersonated) user who he/she is not member of group(s).

 

Also checked URL-@https://www.servicenow.com/community/itsm-forum/dynamic-filter-using-script-include-as-reference/m-p/79949, to properly call the script include to dynamic filter option but still no desired results.

 

Requesting community help to resolve this.

 

Thanks in advance

 

 

1 ACCEPTED SOLUTION

BharathChintala
Mega Sage

@rishabh31 

write below script

var MemberUtil = Class.create();
MemberUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
notMemberOf: function() {
        var notMemberOf = [];
        var userID = gs.getUserID();
        var groupGR = new GlideRecord('sys_user_group');
        groupGR.query();

        while (groupGR.next()) {
            var memberGR = new GlideRecord('sys_user_grmember');
            memberGR.addEncodedQuery('user=' + userID + '^group=' + groupGR.getUniqueValue());
            memberGR.query();
            if (!memberGR.hasNext()) {
                notMemberOf.push(groupGR.getUniqueValue());
            }
        }

        return notMemberOf.join(','); // returns sysID of all groups which this user is not member of 	
    },
    type: 'MemberUtil'
});
If my inputs have helped with your question, please mark my answer as accepted solution, and give a thumb up.
Bharath Chintala

View solution in original post

2 REPLIES 2

Anup Desai1
Mega Sage

Hi @rishabh31 ,

 

I think you need to mention userID in dynamic filter options script which is required in script include.

 

BharathChintala
Mega Sage

@rishabh31 

write below script

var MemberUtil = Class.create();
MemberUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
notMemberOf: function() {
        var notMemberOf = [];
        var userID = gs.getUserID();
        var groupGR = new GlideRecord('sys_user_group');
        groupGR.query();

        while (groupGR.next()) {
            var memberGR = new GlideRecord('sys_user_grmember');
            memberGR.addEncodedQuery('user=' + userID + '^group=' + groupGR.getUniqueValue());
            memberGR.query();
            if (!memberGR.hasNext()) {
                notMemberOf.push(groupGR.getUniqueValue());
            }
        }

        return notMemberOf.join(','); // returns sysID of all groups which this user is not member of 	
    },
    type: 'MemberUtil'
});
If my inputs have helped with your question, please mark my answer as accepted solution, and give a thumb up.
Bharath Chintala