Show/Hide choices on field depending on which group the user is member of

Floridalife
Giga Expert

I am trying to hide some of the choice in a reference type field depending on which group the user is part of, at first i was trying to filter it based on what the u_assignment_group field was set to on the form, this is the client script i was   using but it didnt work (even tried SysID for the group), if this is the recommended way can you advise what looks wrong in the code?

function onChange() {

var sta = g_form.getValue('u_assignment_group');//get the value of state  

//var cat = g_form.getValue('category');//get the value of category  

//var com = g_form.getValue('company');//get the value of company  

  if (u_assignment_group == "8dd9bdaa37c45e009325dcc773990e25" || u_assignment_group == "SA" || u_assignment_group == "INF")/*if state is resolved AND category is Inventory AND company is HQ, then:*/   {  

      //now populate the choices:  

      g_form.addOption('call_type', 'Option 1', 'Option 1', 1);  

      //g_form.addOption('call_type', 'Option 2', 'Option 2', 2);  

      //g_form.addOption('call_type', 'Option 3', 'Option 3', 3);//etc...  

  }   }

Then i started playing with the dependent field but we have a handful of teams and i was forced to duplicate the choice for each team and use the sysid, very time consuming and messy, is there a better way ?

2016-06-08 16_40_09-ServiceNow.png

1 ACCEPTED SOLUTION

Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

HI Mathieu,




I see that you are not fetching the value of assignment group field i.e you should use


var assignment = g_form.getValue('u_assignment_group');


now in your if loop replace compare it based on assignment and also I see that other loops you have used assignment group display value and it should be sys_id.



var assignment = g_form.getValue('u_assignment_group'); //will return sys_id


var assignment = g_form.getDisplayBox('u_assignment_group').value; //will return display value


View solution in original post

26 REPLIES 26

Great, should i add at the of the script a line that would removeoption if the group dont match then ? Or can i set the option inactive maybe to avoid extra coding?



Sent from my iPhone


You should add line that would remove option.


Pradeep Sharma
ServiceNow Employee
ServiceNow Employee

HI Mathieu,




I see that you are not fetching the value of assignment group field i.e you should use


var assignment = g_form.getValue('u_assignment_group');


now in your if loop replace compare it based on assignment and also I see that other loops you have used assignment group display value and it should be sys_id.



var assignment = g_form.getValue('u_assignment_group'); //will return sys_id


var assignment = g_form.getDisplayBox('u_assignment_group').value; //will return display value


Also   g_form.addOption('call_type', 'Option 1', 'Option 1', 1);   //here the parameters are fieldname,choicevalue,choicelabel,choiceindex


make sure choice value and choice label are correct values.


Thanks guys, i've updated the code as you advised, see below


function onChange() {


var group = g_form.getValue('u_assignment_group');//get the value of state  


//var cat = g_form.getValue('category');//get the value of category  


//var com = g_form.getValue('company');//get the value of company  


  if (group == "8dd9bdaa37c45e009325dcc773990e25" || u_assignment_group == "SA" || u_assignment_group == "INF")/*if state is resolved AND category is Inventory AND company is HQ, then:*/   {  


      //now populate the choices:  


      g_form.addOption('call_type', 'Option 1', 'Option 1', 1);  


      //g_form.addOption('call_type', 'Option 2', 'Option 2', 2);  


      //g_form.addOption('call_type', 'Option 3', 'Option 3', 3);//etc...  


  }   }



Now question, this script is going to display Option 1 when the user add the right group to the u_assignment_group field, how can i tell it to hide it if not part of the group ?