Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

So now that I have two sets of users, I really want to do set logic on it, and subtract the results of the financial_group_members.do list from the sys_user_has_role_list.do results.

This is pretty close; I'm wondering if I can do exactly that using a script. Going to try. First, need to track down both scripts.not certain why it is that I'm getting math that doesn't quite add up.

Code Block
function findItil() {
   var user_array = [];
  var role_id = []
  var user_has_role = new GlideAggregate('sys_user_has_role');
  user_has_role.addEncodedQuery('role=b4c1f5331011100094adb14c071ff154^user.active!=false^user.emailISNOTEMPTY^user.user_nameISNOTEMPTY');
  user_has_role.addAggregate('COUNT', 'user');
  user_has_role.query();
  while (user_has_role.next()) {
    user_array.push(user_has_role.user.user_name);
  }
  return user_array;
}

function findFinancialMembersWithNoOtherRole() {
   var user_array = [];
   var user_in_group = new GlideRecord('sys_user_grmember');
   user_in_group.addQuery('group', '4da8813ea1a8990494ad46651315d87d'); //Financial Approvers group
   user_in_group.query();
   while (user_in_group.next()) {
      var group_count = new GlideAggregate('sys_user_grmember');
      group_count.addQuery('user', user_in_group.user.sys_id);
      group_count.addAggregate('COUNT');
      group_count.query();
      var groups = 0;
      if (group_count.next()) {
         groups = group_count.getAggregate('COUNT');
         if (groups == 1) {
            user_array.push(user_in_group.user.user_name);
         }
      }
   }
   return user_array;
}
function arr_diff(a1, a2)
{
  var a=[], diff=[];
  for(var i=0;i<a1.length;i++)
    a[a1[i]]=true;
  for(var i=0;i<a2.length;i++)
    if(a[a2[i]]) delete a[a2[i]];
    else a[a2[i]]=true;
  for(var k in a)
    diff.push(k);
  return diff;
}
function findItilMinusFinancialMembersWithNoOtherRole () {
  var itil_users = findItil();
  var finance_no_role_users = findFinancialMembersWithNoOtherRole();
  gs.print("The length of itil users is: " + itil_users.length);
  gs.print("The length of finance approvers with no other role is: " + finance_no_role_users.length);
  var result = arr_diff(itil_users,finance_no_role_users);
  gs.print("The subtracted set of elements is: " + result.length);
}
findItilMinusFinancialMembersWithNoOtherRole();