Some PDIs are currently unavailable, and PDI actions are paused. View the latest updates here. Read More

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