Help in Scripting

Community Alums
Not applicable

Hello ServiceNow family.

Greetings of the day!

 

I have a requirement.

 

If a user's title is updated to 'abc' then that user should automatically become a member of 'XYZ' group. Similarly, if the user's title is changed, then he/she should be removed from that group. How can I do this.

 

Please help.

2 ACCEPTED SOLUTIONS

Peter Bodelier
Giga Sage

Hi @Community Alums,

 

Create a business rule on the user table. Condition title changes.
Script:

(function executeRule(current, previous /*null when async*/) {
	if (current.title == 'abc' && previous.title != 'abc') {
		var chkMember = new GlideRecord('sys_user_grmember');
		chkMember.addEncodedQuery('group=XYZ^user=' + current.sys_id);
		chkMember.query();
		if(!chkMember.next()){
			var crMember = new GlideRecord('sys_user_grmember');
			crMember.initialize();
			crMember.group = 'XYZ';
			crMember.user = current.sys_id;
			crMember.insert();
		}
	} else if (current.title != 'abc' && previous.title == 'abc') {
		var dlMember = new GlideRecord('sys_user_grmember');
		dlMember.addEncodedQuery('group=XYZ^user=' + current.sys_id);
		dlMember.query();
		if (dlMember.next()){
			dlMember.deleteRecord();
		}
	}

})(current, previous);

 Replace XYZ by the sys_id of the group


Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

View solution in original post

Sandeep Rajput
Tera Patron
Tera Patron

@Community Alums You need to write an onBefore Insert/Update Business rule on sys_user table as follows.

Screenshot 2023-10-13 at 8.52.02 PM.pngScreenshot 2023-10-13 at 9.01.40 PM.png

Here is the script.

(function executeRule(current, previous /*null when async*/) {

	// Add user to group
	if(current.title=='VP'){ //Apply your title check here
		var glideRecord=new GlideRecord('sys_user_grmember');
		glideRecord.initialize();
		glideRecord.setValue('user',current.sys_id);
		glideRecord.setValue('group','<sys_id of group>');//group to be added
		glideRecord.insert();
	}
	else{//remove user from group
		var glideRecordDel=new GlideRecord('sys_user_grmember');
		glideRecordDel.addQuery('user',current.sys_id);
		glideRecordDel.addQuery('group','<sys_id of group>');
		glideRecordDel.query();
		if(glideRecordDel.next()){
			glideRecordDel.delete();//delete the user from group
		}
	}

})(current, previous);

Hope this helps.

View solution in original post

5 REPLIES 5

Peter Bodelier
Giga Sage

Hi @Community Alums,

 

Create a business rule on the user table. Condition title changes.
Script:

(function executeRule(current, previous /*null when async*/) {
	if (current.title == 'abc' && previous.title != 'abc') {
		var chkMember = new GlideRecord('sys_user_grmember');
		chkMember.addEncodedQuery('group=XYZ^user=' + current.sys_id);
		chkMember.query();
		if(!chkMember.next()){
			var crMember = new GlideRecord('sys_user_grmember');
			crMember.initialize();
			crMember.group = 'XYZ';
			crMember.user = current.sys_id;
			crMember.insert();
		}
	} else if (current.title != 'abc' && previous.title == 'abc') {
		var dlMember = new GlideRecord('sys_user_grmember');
		dlMember.addEncodedQuery('group=XYZ^user=' + current.sys_id);
		dlMember.query();
		if (dlMember.next()){
			dlMember.deleteRecord();
		}
	}

})(current, previous);

 Replace XYZ by the sys_id of the group


Help others to find a correct solution by marking the appropriate response as accepted solution and helpful.

Sandeep Rajput
Tera Patron
Tera Patron

@Community Alums You need to write an onBefore Insert/Update Business rule on sys_user table as follows.

Screenshot 2023-10-13 at 8.52.02 PM.pngScreenshot 2023-10-13 at 9.01.40 PM.png

Here is the script.

(function executeRule(current, previous /*null when async*/) {

	// Add user to group
	if(current.title=='VP'){ //Apply your title check here
		var glideRecord=new GlideRecord('sys_user_grmember');
		glideRecord.initialize();
		glideRecord.setValue('user',current.sys_id);
		glideRecord.setValue('group','<sys_id of group>');//group to be added
		glideRecord.insert();
	}
	else{//remove user from group
		var glideRecordDel=new GlideRecord('sys_user_grmember');
		glideRecordDel.addQuery('user',current.sys_id);
		glideRecordDel.addQuery('group','<sys_id of group>');
		glideRecordDel.query();
		if(glideRecordDel.next()){
			glideRecordDel.delete();//delete the user from group
		}
	}

})(current, previous);

Hope this helps.

Community Alums
Not applicable

@Peter Bodelier @Sandeep Rajput 
Thank you very much for the help.

Both the codes are working fine.

Please mark both the answers correct if they are working for you. This will help other users to find the right information,