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

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

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