Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

how to select users only part of that assignment group of that selected record in ui page

sinu2
Tera Expert

Hi,

 

i have created a ui action LIST CHOICE type and a UI page. 

 

In the list of records can selecte multiple records in the list view and click on the UI action so that ui page will open. Inside ui page i have created a reference field which refere to user table. 

 

Current condition

<g:ui_reference name="new_user_id" query="active=true^employee_numberISNOTEMPTY" id="new_user_id" table="sys_user" mandatory="true"/>

 

But i need to see users only users who are part of selected record assignment groups. How can i put this. 

 

Kindly help me

1 ACCEPTED SOLUTION

@sinu2 

try this

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

	<style>
		.required:before {
		content:"* ";
		color: red;
		}
	</style>
	
	<g:evaluate var="jvar_sysId" expression="RP.getWindowProperties().sysparm_id"/>

	<g:ui_form>
		<input type="hidden" name="selected_record_sysId" value="${sysparm_id}"/> 
		<p class="required">Please select user to assign selected records</p> 
		<g:ui_reference name="new_user_id" query="${jvar_users}" id="new_user_id" table="sys_user" mandatory="true^active=true"/>
		<br>
		</br>
		<br>
		</br>
		<g:dialog_buttons_ok_cancel ok="return validateForm()" cancel="return onCancel()"/> 
	</g:ui_form>	

	<g:evaluate var="jvar_users">
		var selected_record_sysId = jelly.jvar_sysId;
		gs.info("line number 24 group ids--"+selected_record_sysId);
		var groupIDS = [];
		var recordgroups = new GlideRecord('x_thimi_fin_srvc_request');
		recordgroups.addEncodedQuery("sys_idIN"+selected_record_sysId);
		recordgroups.query();
		while(recordgroups.next()){
		groupIDS.push(recordgroups.getValue(assignment_group));

		}

		var ug = new GlideRecord('sys_user_grmember');
		ug.addEncodedQuery("groupIN" + groupIDS);
		ug.query();
		var list = []; // create an array of user IDs
		while (ug.next()) {
		list.push(ug.getValue('user')); // add record's user to list as a member of that group
		}
		list.toString();
	</g:evaluate>

</j:jelly>
Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

22 REPLIES 22

Hi Ankur,

 

Kindly please find my UI action and suggest what need to be modified

function assignTo() {
    var selSysIds = g_list.getChecked();

	alert('testtest '+selSysIds);
    var gm = new GlideModal('assign_to');
    gm.setTitle("assign to");
    gm.setPreference("sysparm_id", selSysIds);
    //gm.setPreference("sysparm_grp_id", getGrpName(selSysIds));
    gm.render();
}

function getGrpName(selSysIds) {
    var assignmentGroups = [];
    var gr = new GlideRecord("x_thimi_fin_srvc_ar_request");
    gr.addEncodedQuery("sys_idIN" + selSysIds);
    gr.query();
    while (gr.next()) {
        assignmentGroups.push(gr.assignment_group);
    }	
	return assignmentGroups;
}

 

Ui Page script

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

	<style>
		.required:before {
		content:"* ";
		color: red;
		}
	</style>
	<g:evaluate var="jvar_assignment_group"
				expression="RP.getWindowProperties().get('assignment_group')" />
	
	<g:evaluate var="jvar_users">
		<input type="hidden" name="group_sysIds" value="${sysparm_grp_id}"/> 
		gs.info('test line 15=='+${jvar_assignment_group});
		var ug = new GlideRecord('sys_user_grmember');
		ug.addQuery('group', group_sysIds); // use your jelly variable here for the group to filter
		ug.query();

		var list = []; // create an array of user IDs
		while (ug.next()) {
		list.push(ug.getValue('user')); // add record's user to list as a member of that group
		}
		gs.info('print list of users==='+list);
		var users = list.join(','); // create comma separated values

		users;   // save it to jvar_users
	</g:evaluate>
	<g:ui_form>
		<input type="hidden" name="user_sysId" value="${sysparm_id}"/> 
		<p class="required">Please select user to assign selected records</p> 
		<g:ui_reference name="new_user_id" id="new_user_id" table="sys_user" query="sys_idIN${jvar_users}"/>

		<br>
		</br>
		<br>
		</br>
		<g:dialog_buttons_ok_cancel ok="return validateForm()" cancel="return onCancel()"/> 
	</g:ui_form>	

</j:jelly>

Ui Page Processing script

 

(function () {
	var appGr = new GlideRecord('x_thimi_fin_srvc_ar_request');
	appGr.addEncodedQuery("sys_idIN"+user_sysId);
	appGr.query();
	while(appGr.next()){
	appGr.assigned_to = new_user_id;
	appGr.update();
		
	}
	response.sendRedirect(gs.getUrlOnStack());
}());

Hi Ankur,

Please find the below UI action script and Ui page processing script. Kindly suggest me where i need to modify.

UI action script::::::::::

function assignTo() {
    var selSysIds = g_list.getChecked();

	alert('testtest '+selSysIds);
    var gm = new GlideModal('assign_to');
    gm.setTitle("assign to");
    gm.setPreference("sysparm_id", selSysIds);
    //gm.setPreference("sysparm_grp_id", getGrpName(selSysIds));
    gm.render();
}

function getGrpName(selSysIds) {
    var assignmentGroups = [];
    var gr = new GlideRecord("x_thimi_fin_srvc_ar_request");
    gr.addEncodedQuery("sys_idIN" + selSysIds);
    gr.query();
    while (gr.next()) {
        assignmentGroups.push(gr.assignment_group);
    }	
	return assignmentGroups;
}

 

UI PAGE HTML script:::::::::::::::::::::::::::

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

	<style>
		.required:before {
		content:"* ";
		color: red;
		}
	</style>
	<g:evaluate var="jvar_assignment_group"
				expression="RP.getWindowProperties().get('assignment_group')" />
	
	<g:evaluate var="jvar_users">
		<input type="hidden" name="group_sysIds" value="${sysparm_grp_id}"/> 
		gs.info('test line 15=='+${jvar_assignment_group});
		var ug = new GlideRecord('sys_user_grmember');
		ug.addQuery('group', group_sysIds); // use your jelly variable here for the group to filter
		ug.query();

		var list = []; // create an array of user IDs
		while (ug.next()) {
		list.push(ug.getValue('user')); // add record's user to list as a member of that group
		}
		gs.info('print list of users==='+list);
		var users = list.join(','); // create comma separated values

		users;   // save it to jvar_users
	</g:evaluate>
	<g:ui_form>
		<input type="hidden" name="user_sysId" value="${sysparm_id}"/> 
		<p class="required">Please select user to assign selected records</p> 
		<g:ui_reference name="new_user_id" id="new_user_id" table="sys_user" query="sys_idIN${jvar_users}"/>

		<br>
		</br>
		<br>
		</br>
		<g:dialog_buttons_ok_cancel ok="return validateForm()" cancel="return onCancel()"/> 
	</g:ui_form>	

</j:jelly>

 

UI PAGE PROCESSING SCRIPT::::::

(function () {
	var appGr = new GlideRecord('x_thimi_fin_srvc_ar_request');
	appGr.addEncodedQuery("sys_idIN"+user_sysId);
	appGr.query();
	while(appGr.next()){
	appGr.assigned_to = new_user_id;
	appGr.update();
		
	}
	response.sendRedirect(gs.getUrlOnStack());
}());

@sinu2 

you are already doing something in g:evaluate for gliderecord

is that not working?

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

Hi Ankur,

 

No Ankur it is not working. and I did not create any script include.

 

 

And also i kept my UI action as client callable.