Dynamic reference field filter in UI page

Abhijit4
Mega Sage

Hello Experts,

I am having one UI page in which one reference field filter is managed in <g:evaluate> tag as below,

This works fine while loading( it applies proper filter which we want) but now new requirement is to change that reference filter based on one checkbox selection which will  be on same UI page.

Any help would be appreciated.

Thanks.

By marking my response as correct or helpful, you contribute to helping future readers with similar issues.
Regards,
Abhijit
ServiceNow MVP

10 REPLIES 10

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

refer this example on how to set dynamic reference qualifier for <g:ui_reference> tag

Based on Source User Change I am setting the filter for 2nd tag

Enhance it for your example

HTML:

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<table>
		<tr>
			<td >Source</td>
			<td><g:ui_reference id="source" name="source" table="sys_user" completer="AJAXTableCompleter" query="active=true" onChange="setUserFilter()" /></td>
		</tr>
		<tr>
			<td>Target</td>
			<td><g:ui_reference id="target" name="target" table="sys_user" completer="AJAXTableCompleter" onChange="clearFilter()"/></td>
		</tr>
	</table>

</j:jelly>

Client Script:

function setUserFilter() {

	var sysIDSource = gel('source').value;
	var UserLookUp = gel('lookup.target');

	if(gel('target').value != ''){
		document.getElementById('sys_display.target').value = '';
		document.getElementById('target').value = '';
		document.getElementById('targetLINKreplace').style.display = 'none';
	}

	var array = [];
	var gr = new GlideRecord("sys_user");
	gr.addQuery("sys_id", "!=", sysIDSource);
	gr.addQuery('company.name', 'ACME Germany');
	gr.query();
	while(gr.next()) {
		array.push(gr.sys_id.toString());
	}

	UserLookUp.setAttribute('onclick',"mousePositionSave(event); reflistOpen( 'target', 'not', 'sys_user', '', 'false','QUERY:active=true', 'sys_idIN" + array+ "', '')");
}

function clearFilter(){

	document.getElementById('sys_display.source').value = '';
	document.getElementById('source').value = '';
	document.getElementById('sourceLINKreplace').style.display = 'none';
}

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hi Ankur,

Thanks for the reply.

 

I am getting filter dynamically as expected but when I am trying to select any of the record from pop up window then it is not getting selected.

 

Any help would be appreciated.

 

Thanks.

By marking my response as correct or helpful, you contribute to helping future readers with similar issues.
Regards,
Abhijit
ServiceNow MVP

Hi,

Did you see any browser console error during the selection?

please share the screenshot

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hi Ankur,

Yes there is error in console.

Here is code screenshot,

 

Here is console error,

Any help would be appreciated.

Thanks.

By marking my response as correct or helpful, you contribute to helping future readers with similar issues.
Regards,
Abhijit
ServiceNow MVP