Advanced reference qualifier not working as expected

ramak
Giga Expert

Hello all, there is a requirement that restricts the users based on the company selected on the Incident form. I have created a script include to do this bit :

var getCurrentCompanyUsers = Class.create();

getCurrentCompanyUsers.prototype = {

      initialize: function() {

  var userslist = '';

  var comp = current.company;

  var usr = new GlideRecord('sys_user');

  usr.addQuery('company',comp.sys_id);

  usr.query();

  while(usr.next()) {

  if(userslist.length > 0) {

  userslist += (',' +usr.sys_id);

  }

  else {

  userslist = usr.sys_id;

  }

  }

  return 'sys_idIN' +userslist;

      },

      type: 'getCurrentCompanyUsers'

};

Still, it is showing the list of all the users in the system and not in the selected company. Is there something I am missing in the code ?

(I can use the dependent functionality but using the advanced ref qualifier so that the filter could be modified at any time)

1 ACCEPTED SOLUTION

Unfortunately Reference Qualifiers don't show the query in the breadcrumb.



I posted some code up on how to do it via UI Macro and Field decorators a little while ago.


See my comment on the thread below:


Reference Lookup Initial Filter



I will try adapt it for you below:



Use a UI Macro


http://wiki.servicenow.com/index.php?title=UI_Macros#gsc.tab=0



Then, use the ref_contributions attribute to call it on the field.


Dictionary Attributes - ServiceNow Wiki



<?xml version="1.0" encoding="utf-8" ?>  


<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">  


<j:set var="jvar_n" value="my_company_users_${ref}"/>  


<g:reference_decoration id="${jvar_n}" field="${ref}"  


  onclick="filterUserByCompany(); "  


  title="${gs.getMessage('My Companies Users')}" image="images/icons/tasks.gifx"/>  


<script>  


  function filterUserByCompany() {  


  var thefield = 'caller_id'; //Identify the reference field this should be attached to.  


  var thetable = 'incident'; //This gets whatever table you are on.  


  var lookupfield = 'lookup.'+ thetable + '.' + thefield; //Creates the lookup or reference field ID.  


  var thetarget = thetable + '.' + thefield;  


  var url = "&amp;amp;sysparm_query=company=" + g_form.getValue('company');  


  var refurl = reflistOpenUrl(thetarget, thetarget, thefield, 'sys_user', 'null', 'false', '');  


  var refurlquery = refurl + url;  


  popupOpenStandard(refurlquery, 'lookup');  


  }  


</script>  


</j:jelly>



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

View solution in original post

33 REPLIES 33

Yes, the only way to achieve this requirement is through a UI macro, which will show an extra button on the right of the reference qualifier button.



If you name your UI Macro my_company_users, then your called ID field must have ref_contributions=my_company_users



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

This is the dictionary attribute of 'caller_id' field


find_real_file.png


This is how the Incident form looks like after selecting a company. No new buttons next to 'caller_id'/Contact field


find_real_file.png


This is the UI macro - my_company_users that I am using.


find_real_file.png



Am I missing something here Paul ?


I think line 3 has to align with the name of the UI Macro:





<j:set var="jvar_n" value="my_company_users_${ref}"/>



Unfortunately I don't have my instance with the code for this anymore so I am just guessing at this stage 😕


"/>






ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022

Nope, still the same , btw do I need to add any images or something ? or is this browser dependent, I am using chrome now...


I was able to get this working in my developer instance.



UI Macro my_company_users



<?xml version="1.0" encoding="utf-8" ?>


<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">


<j:set var="jvar_n" value="my_company_users_${ref}"/>


<g:reference_decoration id="${jvar_n}" field="${ref}"


  onclick="filterUserByCompany(); "


  title="${gs.getMessage('My Companies Users')}" image="images/icons/tasks.gifx"/>



<script>


  function filterUserByCompany() {


  var thefield = 'caller_id'; //Identify the reference field this should be attached to.


  var thetable = 'sys_user'; //This gets whatever table you are on.


  var lookupfield = 'lookup.'+ thetable + '.' + thefield; //Creates the lookup or reference field ID.


  var thetarget = thetable + '.' + thefield;




  var url = "&amp;amp;sysparm_query=company=" + g_form.getValue('company');


  var refurl = reflistOpenUrl(thetarget, thetarget, thefield, 'sys_user', 'null', 'false', '');


  var refurlquery = refurl + url;


  popupOpenStandard(refurlquery, 'lookup');


  }


</script>


</j:jelly>



Dictionary Entry caller_id


dect.PNG



Solution:



solution.PNG



CLicking the exclamation button shows the popup.



P.S.


The company field must be exposed on the form.



ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022