<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Reference variable loading so slow due to advanced reference qualifier and script include in Developer forum</title>
    <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178710#M835636</link>
    <description>&lt;P&gt;Hello!&lt;/P&gt;
&lt;P&gt;I wrote a script include to user as a reference qualifier in a reference variable. The script works as intended, the problem is it is very slow so I'm thinking there must be something wrong. The else statement works great and loads the reference variable quick. However the if statement in bold (when the logged in user has the role) the reference variable will take almost 2 minutes to load the users. I know querying all active users is a lot, however before adding this reference qualifier, if the simple condition builder was just set to active is true it loaded quickly.&lt;/P&gt;
&lt;P&gt;Please let me know if you have any tips for the script below:&lt;/P&gt;
&lt;P&gt;var NHL_new_hire_user = Class.create();&lt;BR /&gt;NHL_new_hire_user.prototype = Object.extendsObject(AbstractAjaxProcessor, {&lt;/P&gt;
&lt;P&gt;getNewHires: function() {&lt;BR /&gt; &lt;BR /&gt; var user = [];&lt;BR /&gt; &lt;BR /&gt; var current_user = gs.getUserID();&lt;BR /&gt; &lt;BR /&gt;var roles = new GlideRecord('sys_user_has_role'); //query what roles the current user has and look for nhl role&lt;BR /&gt; roles.addQuery('user', current_user);&lt;BR /&gt; roles.addQuery('role', 'df97b1dcdbd0670092773220ad96196b'); //nhl_admin role&lt;BR /&gt; roles.query();&lt;BR /&gt; &lt;BR /&gt; &lt;STRONG&gt;if (roles.next()){ //if the logged in user does have the nhl role&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; var all_users = new GlideRecord('sys_user'); //query all active users&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; all_users.addQuery('active', true);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; all_users.query();&lt;/STRONG&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;STRONG&gt; while(all_users.next()){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; user.push(all_users.sys_id.toString()); //push an array of all active users&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt; &lt;BR /&gt; else{ //logged in user does not have nhl role&lt;BR /&gt; var user_manager = new GlideRecord('sys_user'); //querying active users whose manager is the logged in user&lt;BR /&gt; user_manager.addQuery('active',true);&lt;BR /&gt; user_manager.addQuery('manager', current_user);&lt;BR /&gt; user_manager.addQuery('u_contractor', false);&lt;BR /&gt; user_manager.query();&lt;BR /&gt; &lt;BR /&gt; while(user_manager.next()){&lt;BR /&gt; user.push(user_manager.sys_id.toString()); //push an array of active users with logged user as manager&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;
&lt;P&gt;return 'sys_idIN' + user.join(',');&lt;BR /&gt;},&lt;/P&gt;
&lt;P&gt;type: 'NHL_new_hire_user'&lt;BR /&gt;});&lt;/P&gt;</description>
    <pubDate>Mon, 18 Feb 2019 21:23:25 GMT</pubDate>
    <dc:creator>Hannah C</dc:creator>
    <dc:date>2019-02-18T21:23:25Z</dc:date>
    <item>
      <title>Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178710#M835636</link>
      <description>&lt;P&gt;Hello!&lt;/P&gt;
&lt;P&gt;I wrote a script include to user as a reference qualifier in a reference variable. The script works as intended, the problem is it is very slow so I'm thinking there must be something wrong. The else statement works great and loads the reference variable quick. However the if statement in bold (when the logged in user has the role) the reference variable will take almost 2 minutes to load the users. I know querying all active users is a lot, however before adding this reference qualifier, if the simple condition builder was just set to active is true it loaded quickly.&lt;/P&gt;
&lt;P&gt;Please let me know if you have any tips for the script below:&lt;/P&gt;
&lt;P&gt;var NHL_new_hire_user = Class.create();&lt;BR /&gt;NHL_new_hire_user.prototype = Object.extendsObject(AbstractAjaxProcessor, {&lt;/P&gt;
&lt;P&gt;getNewHires: function() {&lt;BR /&gt; &lt;BR /&gt; var user = [];&lt;BR /&gt; &lt;BR /&gt; var current_user = gs.getUserID();&lt;BR /&gt; &lt;BR /&gt;var roles = new GlideRecord('sys_user_has_role'); //query what roles the current user has and look for nhl role&lt;BR /&gt; roles.addQuery('user', current_user);&lt;BR /&gt; roles.addQuery('role', 'df97b1dcdbd0670092773220ad96196b'); //nhl_admin role&lt;BR /&gt; roles.query();&lt;BR /&gt; &lt;BR /&gt; &lt;STRONG&gt;if (roles.next()){ //if the logged in user does have the nhl role&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; var all_users = new GlideRecord('sys_user'); //query all active users&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; all_users.addQuery('active', true);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; all_users.query();&lt;/STRONG&gt;&lt;BR /&gt; &lt;BR /&gt;&lt;STRONG&gt; while(all_users.next()){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; user.push(all_users.sys_id.toString()); //push an array of all active users&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt; &lt;BR /&gt; else{ //logged in user does not have nhl role&lt;BR /&gt; var user_manager = new GlideRecord('sys_user'); //querying active users whose manager is the logged in user&lt;BR /&gt; user_manager.addQuery('active',true);&lt;BR /&gt; user_manager.addQuery('manager', current_user);&lt;BR /&gt; user_manager.addQuery('u_contractor', false);&lt;BR /&gt; user_manager.query();&lt;BR /&gt; &lt;BR /&gt; while(user_manager.next()){&lt;BR /&gt; user.push(user_manager.sys_id.toString()); //push an array of active users with logged user as manager&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;
&lt;P&gt;return 'sys_idIN' + user.join(',');&lt;BR /&gt;},&lt;/P&gt;
&lt;P&gt;type: 'NHL_new_hire_user'&lt;BR /&gt;});&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 21:23:25 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178710#M835636</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T21:23:25Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178711#M835637</link>
      <description>Yes you can improve this. In your if section, just do this instead of querying all active users:

return ‘active=true’;</description>
      <pubDate>Mon, 18 Feb 2019 21:47:36 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178711#M835637</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T21:47:36Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178712#M835638</link>
      <description>in Fact you don’t need to query the user table at all. I would rewrite your function like this:

var ret = ‘active=true’;
if (!gs.hasRole(‘nhl’)) {
  ret += ‘u_contractor=false^manager=javascript:gs.getUserID()’;
}
return ret;</description>
      <pubDate>Mon, 18 Feb 2019 21:53:54 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178712#M835638</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T21:53:54Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178713#M835639</link>
      <description>&lt;P&gt;Thank you Jon! So those 5 lines will replace&amp;nbsp;both the if statement and the else statement?&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:00:09 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178713#M835639</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:00:09Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178714#M835640</link>
      <description>Yes it would actually constitute the entire function. Just confirm the name of the role to check is “nhl”.</description>
      <pubDate>Mon, 18 Feb 2019 22:07:25 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178714#M835640</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:07:25Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178715#M835641</link>
      <description>Oh one update:

The line inside the if statement should be (add the Caret at the front):

ret += ‘^u_contractor=false^manager=javascript:gs.getUserID()’;</description>
      <pubDate>Mon, 18 Feb 2019 22:10:17 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178715#M835641</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:10:17Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178716#M835642</link>
      <description>&lt;P&gt;Thanks Jon. It is not working...all active users are still showing up even if I don't have the nhl_requisition_admin role. I did verify this is the name of the role and tried doing the sys_id too.&lt;/P&gt;
&lt;P&gt;This is what the full script include looks like now:&lt;/P&gt;
&lt;P&gt;var NHL_new_hire_user = Class.create();&lt;BR /&gt;NHL_new_hire_user.prototype = Object.extendsObject(AbstractAjaxProcessor, {&lt;/P&gt;
&lt;P&gt;getNewHires: function() {&lt;/P&gt;
&lt;P&gt;var ret = ('active=true');&lt;BR /&gt;if (!gs.hasRole('nhl_requisition_admin')) {&lt;BR /&gt; ret += '^u_contractor=false^manager=javascript.gs.getUserID()';&lt;BR /&gt;}&lt;BR /&gt;return ret;&lt;BR /&gt;},&lt;/P&gt;
&lt;P&gt;type: 'NHL_new_hire_user'&lt;BR /&gt;});&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:17:33 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178716#M835642</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:17:33Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178717#M835643</link>
      <description>If you are testing as an admin, admin users always return true for the gs.hasRole function. If you don’t want admins to see all active users, then you can put the query to the sys_user_has_role table back in.

Does that get you where you need to be?</description>
      <pubDate>Mon, 18 Feb 2019 22:25:28 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178717#M835643</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:25:28Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178718#M835644</link>
      <description>&lt;P&gt;Ohh okay, that makes sense. Let me try impersonating someone without admin and without the role and see if it works. Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:28:25 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178718#M835644</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:28:25Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178719#M835645</link>
      <description>&lt;P&gt;Ok so users with the role can see all active users. But users without the role see no users&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:37:58 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178719#M835645</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:37:58Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178720#M835646</link>
      <description>If you impersonate that same user, can they see any users if you navigate to the user list and add this query to your filters:

Active Is true
AND
Contractor is false
And
Manager is (dynamic) Me</description>
      <pubDate>Mon, 18 Feb 2019 22:42:55 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178720#M835646</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:42:55Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178721#M835647</link>
      <description>Or you can get to it like this:

/sys_user_list.do?sysparm_query=active=true^u_contractor=false^manager=javascript:gs.getUserID()</description>
      <pubDate>Mon, 18 Feb 2019 22:45:03 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178721#M835647</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:45:03Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178722#M835648</link>
      <description>&lt;P&gt;Yes they have 11 users show up&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:45:31 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178722#M835648</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:45:31Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178723#M835649</link>
      <description>Oh I see a small typo in your script.

Between javascript and gs.getUserID(), put a colon, not a period</description>
      <pubDate>Mon, 18 Feb 2019 22:50:32 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178723#M835649</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:50:32Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178724#M835650</link>
      <description>&lt;P&gt;Yay it works!!! Thank you so so much!! I spent hours on this so you just made my day thank you.&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:52:50 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178724#M835650</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:52:50Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178725#M835651</link>
      <description>&lt;P&gt;In case anyone else needs this, here is the final working scrip include:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;var NHL_new_hire_user = Class.create();&lt;BR /&gt;NHL_new_hire_user.prototype = Object.extendsObject(AbstractAjaxProcessor, {&lt;/P&gt;
&lt;P&gt;getNewHires: function() {&lt;/P&gt;
&lt;P&gt;var ret = ('active=true');&lt;BR /&gt;if (!gs.hasRole('nhl_requisition_admin')) {&lt;BR /&gt; ret += '^u_contractor=false^manager=javascript:gs.getUserID()';&lt;BR /&gt;}&lt;BR /&gt;return ret;&lt;BR /&gt;},&lt;/P&gt;
&lt;P&gt;type: 'NHL_new_hire_user'&lt;BR /&gt;});&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then on the reference variable that references the user table this is what I put in the reference qualifier field:&lt;/P&gt;
&lt;P&gt;javascript: new NHL_new_hire_user().getNewHires()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what this is if the logged in user has the nhl_requisition_admin role, the reference variable on the catalog item will load all active users for them to select from. If the logged in user does not have the role, it will only load users active users with the specified conditions.&lt;/P&gt;</description>
      <pubDate>Mon, 18 Feb 2019 22:56:46 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178725#M835651</guid>
      <dc:creator>Hannah C</dc:creator>
      <dc:date>2019-02-18T22:56:46Z</dc:date>
    </item>
    <item>
      <title>Re: Reference variable loading so slow due to advanced reference qualifier and script include</title>
      <link>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178726#M835652</link>
      <description>Awesome! And thanks for all the “helpful” points!</description>
      <pubDate>Mon, 18 Feb 2019 22:59:40 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/reference-variable-loading-so-slow-due-to-advanced-reference/m-p/2178726#M835652</guid>
      <dc:creator>Jon Barnes</dc:creator>
      <dc:date>2019-02-18T22:59:40Z</dc:date>
    </item>
  </channel>
</rss>

