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.