<?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 Dynamic Location Filtering in Catalog Item based on Requestor, Role, and Stockroom (cmn_location) in HAM forum</title>
    <link>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3510996#M5964</link>
    <description>&lt;P class=""&gt;&lt;SPAN&gt;Hi All,&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;I am working on a ServiceNow catalog requirement where I need to dynamically filter a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location reference field&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; based on multiple conditions like user role, requestor, hierarchy, and stockroom availability.&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;Scenario:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;I have a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Catalog Item&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; with two Variable Sets:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Variable Set 1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Field: &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; (Reference → sys_user)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Variable Set 2&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Field: &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; (Reference → cmn_location)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Location Table Structure (cmn_location):&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;The hierarchy is as follows:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Region (e.g., APAC) → top level (parent is empty)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Country (e.g., India) → child of Region&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Conditions:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;I need to filter the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location field&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; based on:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location attributes:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;CODE&gt;&lt;SPAN&gt;cmn_location_source = xxxxx&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;CODE&gt;&lt;SPAN&gt;cmn_location_type = xxxx&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Stockroom condition:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Only locations that have a related record in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;alm_stockroom&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; (i.e., location has a stockroom)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;User role:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;If user has &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;itil role&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; → show &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Region level (APAC)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;If user is &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;end user&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; → show &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Country level (India)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Requestor-based filtering:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Based on selected &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;, restrict locations within the same hierarchy&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; What I Have Tried:&lt;/SPAN&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Created a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Script Include (GlideAjax)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; to build dynamic query&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Used &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Catalog Client Script (onChange)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; on &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Applied &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;g_form.setReferenceQualifier()&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; on Location field&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Issue:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;Since &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; are in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;different variable sets&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am unsure about the best approach to:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Trigger filtering correctly&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Apply dynamic reference qualifier&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Ensure it works across multiple catalog items&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Questions:&lt;/SPAN&gt;&lt;/H3&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;What is the best practice to handle filtering when variables are in different variable sets?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Is GlideAjax + onChange the right approach, or can this be achieved using a reference qualifier?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;What is the optimal way to filter locations based on:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;hierarchy (parent / parent.parent)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;stockroom availability (alm_stockroom)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;How to make this reusable across multiple catalog items?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Any suggestions or best practices would be greatly appreciated.&lt;/SPAN&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;Thanks in advance!&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 19 Mar 2026 14:57:44 GMT</pubDate>
    <dc:creator>LavanyaB8479798</dc:creator>
    <dc:date>2026-03-19T14:57:44Z</dc:date>
    <item>
      <title>Dynamic Location Filtering in Catalog Item based on Requestor, Role, and Stockroom (cmn_location)</title>
      <link>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3510996#M5964</link>
      <description>&lt;P class=""&gt;&lt;SPAN&gt;Hi All,&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;I am working on a ServiceNow catalog requirement where I need to dynamically filter a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location reference field&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; based on multiple conditions like user role, requestor, hierarchy, and stockroom availability.&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;Scenario:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;I have a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Catalog Item&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; with two Variable Sets:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Variable Set 1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Field: &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; (Reference → sys_user)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Variable Set 2&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Field: &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; (Reference → cmn_location)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Location Table Structure (cmn_location):&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;The hierarchy is as follows:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Region (e.g., APAC) → top level (parent is empty)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Country (e.g., India) → child of Region&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Conditions:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;I need to filter the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location field&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; based on:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Location attributes:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;CODE&gt;&lt;SPAN&gt;cmn_location_source = xxxxx&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;CODE&gt;&lt;SPAN&gt;cmn_location_type = xxxx&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Stockroom condition:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Only locations that have a related record in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;alm_stockroom&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; (i.e., location has a stockroom)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;User role:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;If user has &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;itil role&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; → show &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Region level (APAC)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;If user is &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;end user&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; → show &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Country level (India)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Requestor-based filtering:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Based on selected &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;, restrict locations within the same hierarchy&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; What I Have Tried:&lt;/SPAN&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Created a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Script Include (GlideAjax)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; to build dynamic query&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Used &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;Catalog Client Script (onChange)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt; on &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Applied &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;g_form.setReferenceQualifier()&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; on Location field&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Issue:&lt;/SPAN&gt;&lt;/H3&gt;&lt;P class=""&gt;&lt;SPAN&gt;Since &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;CODE&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/CODE&gt;&lt;SPAN&gt; are in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;different variable sets&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am unsure about the best approach to:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Trigger filtering correctly&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Apply dynamic reference qualifier&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Ensure it works across multiple catalog items&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Questions:&lt;/SPAN&gt;&lt;/H3&gt;&lt;OL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;What is the best practice to handle filtering when variables are in different variable sets?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Is GlideAjax + onChange the right approach, or can this be achieved using a reference qualifier?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;What is the optimal way to filter locations based on:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;hierarchy (parent / parent.parent)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;stockroom availability (alm_stockroom)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;How to make this reusable across multiple catalog items?&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;H3&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":small_blue_diamond:"&gt;🔹&lt;/span&gt; Any suggestions or best practices would be greatly appreciated.&lt;/SPAN&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;Thanks in advance!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Mar 2026 14:57:44 GMT</pubDate>
      <guid>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3510996#M5964</guid>
      <dc:creator>LavanyaB8479798</dc:creator>
      <dc:date>2026-03-19T14:57:44Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamic Location Filtering in Catalog Item based on Requestor, Role, and Stockroom (cmn_location</title>
      <link>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3511418#M5979</link>
      <description>&lt;P&gt;hey&amp;nbsp;&lt;a href="https://www.servicenow.com/community/user/viewprofilepage/user-id/993537"&gt;@LavanyaB8479798&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;&lt;STRONG&gt;&amp;nbsp;Approach&amp;nbsp;&lt;/STRONG&gt;&lt;/H2&gt;&lt;H3&gt;&lt;STRONG&gt;1. Variable Sets do NOT block access&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;Even though &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; are in different variable sets, they are still part of the same catalog item form.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;So you can safely reference:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;g_form.getValue('requestor_for');&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;No special handling is required just because they are in separate variable sets.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;&lt;STRONG&gt;2. Use Advanced Reference Qualifier&amp;nbsp;&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;Instead of relying heavily on GlideAjax, the recommended approach is:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Use Advanced Reference Qualifier on the &lt;I&gt;Location&lt;/I&gt; variable&lt;/LI&gt;&lt;LI&gt;Move all filtering logic into a Script Include&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN&gt;This keeps the solution:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN&gt;Server-side&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN&gt;Performant&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN&gt;Reusable across catalog items&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;STRONG&gt;3. Centralize Logic in Script Include&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;Create a Script Include (non-client callable) that builds the encoded query.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Code:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;var LocationFilterUtil = Class.create();
LocationFilterUtil.prototype = {
   getLocationQuery: function(requestorId) {
       var query = [];
       // Base filters
       query.push("cmn_location_source=xxxxx");
       query.push("cmn_location_type=xxxx");
       // Stockroom condition (only locations with stockroom)
       var locs = [];
       var ga = new GlideAggregate('alm_stockroom');
       ga.groupBy('location');
       ga.query();
       while (ga.next()) {
           locs.push(ga.location.toString());
       }
       if (locs.length)
           query.push("sys_idIN" + locs.join(','));
       // Requestor-based filtering
       if (requestorId) {
           var user = new GlideRecord('sys_user');
           if (user.get(requestorId) &amp;amp;&amp;amp; user.location) {
               query.push("parent=" + user.location); // adjust if hierarchy differs
           }
       }
       // Role-based filtering
       if (gs.hasRole('itil')) {
           query.push("parentISEMPTY"); // Region level
       } else {
           query.push("parentISNOTEMPTY"); // Country level
       }
       return query.join('^');
   },
   type: 'LocationFilterUtil'

};&lt;/LI-CODE&gt;&lt;H3&gt;&lt;STRONG&gt;4. Apply in Reference Qualifier&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;On the &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Location&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; variable:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;javascript&amp;amp;colon; new LocationFilterUtil().getLocationQuery(current.variables.requestor_for);&lt;/LI-CODE&gt;&lt;H3&gt;&lt;STRONG&gt;5. Handle Dynamic Changes (onChange)&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;&lt;SPAN&gt;If &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Requestor For&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; can change after load, add a Catalog Client Script:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   g_form.setValue('location', '');
   g_form.refreshReference('location');

}&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;This ensures the Location field refreshes with updated filters.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;*************************************************************************************************************************************&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;If this response helps, please mark it as Accept as Solution and Helpful.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Doing so helps others in the community and encourages me to keep contributing.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Regards&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Vaishali Singh&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Mar 2026 07:36:16 GMT</pubDate>
      <guid>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3511418#M5979</guid>
      <dc:creator>vaishali231</dc:creator>
      <dc:date>2026-03-20T07:36:16Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamic Location Filtering in Catalog Item based on Requestor, Role, and Stockroom (cmn_location</title>
      <link>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3511700#M5980</link>
      <description>&lt;P class=""&gt;&lt;SPAN&gt;Even after applying all conditions, I am still getting:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":cross_mark:"&gt;❌&lt;/span&gt; Locations from other countries (e.g., United States)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":cross_mark:"&gt;❌&lt;/span&gt; Locations not related to the requestor’s location (e.g., India)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;SPAN&gt;Expected:&lt;/SPAN&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;✔ Only locations under requestor’s hierarchy&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;✔ Only stockroom-related locations&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;SPAN&gt;Example:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Requestor Location → India&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;SPAN&gt;Expected → Only India child locations (sites with stockroom)&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;SPAN&gt;Actual → Getting locations from other regions as well&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Fri, 20 Mar 2026 13:10:48 GMT</pubDate>
      <guid>https://www.servicenow.com/community/ham-forum/dynamic-location-filtering-in-catalog-item-based-on-requestor/m-p/3511700#M5980</guid>
      <dc:creator>LavanyaB8479798</dc:creator>
      <dc:date>2026-03-20T13:10:48Z</dc:date>
    </item>
  </channel>
</rss>

