List Collector with multiple values calling a script with OnChange client script.

Monique Assaf
Tera Contributor

Hi,

I am trying to confirm when a user selects a group of users with a list collector it calls a script include to check if the user requested is in the group selected. Currently I have this working for a single user, but when multiple users are added it doesn't return the correct result.

I also would like remove the user that is currently in the group out of the list.

Any assistance is greatly appreciated. 

Catalog client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    //Checks the users in the selected group.
    {
        var group = g_form.getValue('add_select_the_group');
        var user = 'select_users';
        var selectedusers = g_form.getValue(user).split(',');
        var ga = new GlideAjax('LookupUserGroups');
        ga.addParam('sysparm_name', 'getUserGroups');
        ga.addParam('sysparm_user_id', selectedusers);
        ga.addParam('sysparm_group_id', group);
        ga.getXML(ajaxcall);

    }

    function ajaxcall(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        alert(answer);
        alert('The requested user is currently a member of the selected group.');

    }
}

Script Includes:

var LookupUserGroups = Class.create();
LookupUserGroups.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getUserGroups: function() {
        var user_id = this.getParameter('sysparm_user_id');
        var pagroup = this.getParameter('sysparm_group_id');
        var groups_ids = '';
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('user', user_id);
        gr.addQuery('group', pagroup);
        gr.query();
        if (gr.next()) {
            return true;

        } else {
            return false;
        }
    },
    type: 'LookupUserGroups'
});

1 ACCEPTED SOLUTION

Hi,

1) you will have to determine which one is the latest value by comparing oldValue and newValue

2) newValue will hold 1 sysId extra than oldValue

use this -> to check for all users at once

var LookupUserGroups = Class.create();
LookupUserGroups.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	getUserGroups: function() {
		var user_id = this.getParameter('sysparm_user_id');
		var pagroup = this.getParameter('sysparm_group_id');
		var userCount = user_id.split(',').length;

		var gr = new GlideRecord('sys_user_grmember');
		gr.addQuery('user', 'IN', user_id);
		gr.addQuery('group', pagroup);
		gr.query();
		var foundCount = gr.getRowCount();

		if(userCount == foundCount)
			return true; // it means all users are part of group selected
		else
			return false; // it means any 1 user is not part of group selected

	},
	type: 'LookupUserGroups'
});

Regards
Ankur

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

View solution in original post

6 REPLIES 6

Hi,

So what should happen if any 1 user doesn't belong to the group selected?

Regards
ankur

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

Hi,

1) you will have to determine which one is the latest value by comparing oldValue and newValue

2) newValue will hold 1 sysId extra than oldValue

use this -> to check for all users at once

var LookupUserGroups = Class.create();
LookupUserGroups.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	getUserGroups: function() {
		var user_id = this.getParameter('sysparm_user_id');
		var pagroup = this.getParameter('sysparm_group_id');
		var userCount = user_id.split(',').length;

		var gr = new GlideRecord('sys_user_grmember');
		gr.addQuery('user', 'IN', user_id);
		gr.addQuery('group', pagroup);
		gr.query();
		var foundCount = gr.getRowCount();

		if(userCount == foundCount)
			return true; // it means all users are part of group selected
		else
			return false; // it means any 1 user is not part of group selected

	},
	type: 'LookupUserGroups'
});

Regards
Ankur

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