Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Business rule to view records of those groups of which loggedin user is not member of

rishabh31
Mega Sage

Hello Community members,

I want to create a BR (client callable) for a custom dynamic filter option 'Not one of my Group', which displays only those records of which loggedin user is NOT a member of.

For this I tried below useful article (refer URL- 

@https://www.servicenow.com/community/in-other-news/2-steps-to-create-a-dynamic-filter-that-returns-groups-lo...

 

but not getting the desired results.

Requesting to please help with the BR scripting part to satisfy the above explained filter condition.

 

Will mark the desired response as helpful & accepted!

 

Thanks in Advance.

 

 

1 ACCEPTED SOLUTION

Okay, so you want it to be available as a dynamic filter,

Let's make some minor changes, to make it work, see example below.

 

 

Script include:

var MembershipUtil = Class.create();
MembershipUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	notMyGroups : function (){
		var notMemberOf = [];

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

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

		return notMemberOf;  // returns sysID of all groups which logged in user is not member of 	
	},
	
    type: 'MembershipUtil'
});

 

Dynamic filter:

dynamic-filter-not-my-groups.png

View solution in original post

7 REPLIES 7

OlaN
Tera Sage
Tera Sage

Hi,

Try something like this as a script include:

 

var MembershipUtil = Class.create();
MembershipUtil.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: 'MembershipUtil'
});

@OlaN, Sir or anyone can please check what's wrong here the script while testing on reports not working to provide either group names (Dispalys- 'All>Assignment group is (empty)') nor their associated records of which logged in user are not member of.

-Script include: (Client callable- true)

var MembershipUtil = Class.create();
MembershipUtil.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: 'MembershipUtil'
});

 

-Dynamic filter Option to call above created script include

rishabh31_0-1676265242734.png

- Result:-

rishabh31_1-1676265790956.png

 

I checked with impersonating users also, and it does not provide any records for any users who are not a member of groups.

 

Requesting to please check & provide help.

 

Thanks in advance

 

 

Okay, so you want it to be available as a dynamic filter,

Let's make some minor changes, to make it work, see example below.

 

 

Script include:

var MembershipUtil = Class.create();
MembershipUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	notMyGroups : function (){
		var notMemberOf = [];

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

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

		return notMemberOf;  // returns sysID of all groups which logged in user is not member of 	
	},
	
    type: 'MembershipUtil'
});

 

Dynamic filter:

dynamic-filter-not-my-groups.png

Dear @OlaN sir thank you for getting this sorted, just a question I observe the changes but did not clearly understand why you made the changes as I am new to scripting, I marked your answer Helpful & accepted, if you can please help me understand why you make certain changes so results appeared, & where we use the earlier script (which you shared as your 1st response)