The CreatorCon Call for Content is officially open! Get started here.

User Criteria script not triggering debugger or running

kgomez222
Tera Contributor

Hey all, i've been struggling with user criteria for the past week. i've created a mock function to practice creating user criteria scripts.

No matter what I do, my script does not run. User criteria scripts are not cached so it looks like they run each time.
it SHOULD be running

But, when do they run?
when a user clicks on self service > knowledge?

when a user opens an article?
I've tested every scenario and my user criteria script simply does not run. The debugger does not trigger and I don't know what's going on

here is my function. 

// Get the user's groups
var userGroups = new GlideRecord('sys_user_grmember');
userGroups.addQuery('user', user_id);
userGroups.query();

// Check if the user belongs to the TEST group
var answer = false;
while (userGroups.next()) {
  var group = userGroups.group.getRefRecord();
  if (group.type == 'TEST') {
    answer = true;
    break;
  }
}

return answer;

 

5 REPLIES 5

Weird
Mega Sage

For starters you might just want to log what you're doing.
For example in this script you're using user_id, but is it a variable that you've defined?

I'd start by adding logs like
gs.info("User criteria user id: " + user_id);
gs.info("User criteria grmember count: " + userGroups.getRowCount());
and
gs.info("User criteria valid group: " + group.isValidRecord());

That way  you can check the logs, see that something is running and see the actual values there.
Also, you're now checking that type == "TEST"
The type field contains a comma separated list of sys_ids, so you'd have to compare it to the sys_id of TEST.
If you have more than one type, you'll probably also need  to use something like type.indecOf("TEST sysID") > -1 as your condition to check if the sys_id is included.

kgomez222
Tera Contributor

Shouldn't the debugger still be running tho? user criteria is evaluated each time, i set my breakpoints and it doesn't run.

Where do the gs.info logs print to? 

the user_id is a variable that is already instantiated within a user script. 

I'm still fairly new to servicenow and i hate not being able to use the

I must admit that I haven't fully utilized the debugging tools, since I generally just log stuff first, so I'm not sure if you're even using the correct debugging tool.

Logs show up in "syslog" table.
It's under "System Logs" -> "System Log" -> "All"

If you can see your logged values there then it's running OK.
Make sure to always use filter "Created on today" since there's a lot of data in the log table and it might otherwise take a while to load. You can include "Message starts with User criteria" to get your logs.

Aman Kumar S
Kilo Patron

HI @kgomez222 ,

Try below script:

 

 

// Get the user's groups
var userGroups = new GlideRecord('sys_user_grmember');
userGroups.addQuery('user', user_id);
userGroups.query();

// Check if the user belongs to the TEST group
var answer = false;
while (userGroups.next()) {
  var group = userGroups.group.getRefRecord();
  grpType = group.type;
  if (grpType.indexOf('sys_id_of_the_group_type') > -1) {// look for the sys_id in the "sys_user_group_type" table
    answer = true;
    break;
  }
}

return answer;

 

Best Regards
Aman Kumar