Prevent Change requester from approving their own Changes.

Steve Brown1
Tera Expert

Hi Community,

Using Helsinki - helsinki-03-16-2016__patch7-11-02-2016

Following a recent audit I need to prevent any Requester being able to Approve their own Change Requests.

I have read a couple of articles similar to my situation but they have been specific to a particular Assignment Group and my scripting skills are non existent to be able to turn their suggestions into something that works!!   I have also tried writing a Business Rules on the sysapproval_approver table but could not get this to work either.

I have attempted to change the below script from another post from 2014 to work in our Instance but I cannot get it to work - the best result was skipping the Peer check step of the workflow where an approval is required from the Assignment group of the Requester.

  1. answer = [];  
  2. var approvers = new GlideRecord('sys_user_grmember');  
  3. approvers.addQuery('group.name', 'IT Infrastructure Managers');  
  4. approvers.query();  
  5. while(approvers.next()) {  
  6.     if(approvers.user.toString() != current.requested_by.toString()) {  
  7.           answer.push(approvers.user.toString());  
  8.     }  
  9. }  

 

My version:

1. answer = [];  

2. var approvers = new GlideRecord('sys_user_grmember');  

3. approvers.addQuery('current.assignment_group');

4. approvers.query();  

5. while(approvers.next()) {  

6.   if(approvers.user.toString() != current.requested_by.toString()) {  

7.             answer.push(approvers.user.toString());  

8.       }  

9. }

I think the script is doing the following:

2 - Identifying the Group the Requester is in

3 - Is the Requester in the Assignment Group?

4 - ??

5 - ??

6 - If the Requester is in the Assignment Group

7 - ?? do something!

Many thanks in advance.

Steve Brown

1 ACCEPTED SOLUTION

There is an additional quotes in the current.assignment_group which will not make it work. I have done a minor update to code



answer = [];


var approvers = new GlideRecord('sys_user_grmember');


approvers.addQuery('group', current.assignment_group);   //Matches assignment group on change with the group membership table


approvers.query();


while(approvers.next()) {    


  if(approvers.user.toString() != current.requested_by.toString()) {


            answer.push(approvers.user.toString());


      }


}



I have tested this and it was working on my developer instance.



Thanks


Please Hit like, Helpful or Correct depending on the impact of the response


View solution in original post

20 REPLIES 20

Jeffrey Barton
Tera Contributor

I set the state to "No Longer Required" and it immediately set that for all other approvers.  This is not working and I have the same issues - why isn't servicenow fixing this - they know darn well nobody should self approve in group approvals...  ugh...  Or at least give us an out of the box option to set "no self approval" so that we don't all have to struggle trying to find the right places to put this code into.