Help with Script Include checking if opened_by field user is a part of Service Desk group

Brett21
Tera Guru

Hi Community

Need some assistance with script include. I created onchange client script & script include that on 'resolve' will check to see if the Incident was opened by a member of the service desk.  What am I doing wrong in my scripts.  Any help would be appreciated.

client callable is checked on my script include record.

Client Script

 // Get Opened By and State values

    var opened = g_form.getValue('opened_by');
    var state = g_form.getValue('state');

    if (state == 6) {

        var ga = new GlideAjax('getServiceDeskMembers');
        ga.addParam('sysparm_name', 'validateOpenedBy');
        ga.addParam('sysparm_user', opened);
        ga.getXML(yellow);
    }
}

function yellow(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");

    if (answer) {
        g_form.addInfoMessage('opened by is member of Service Desk');
    } else {
        g_form.addErrorMessage('opened by is not  member of Service Desk');
        return false;
    }
}

 

Script Include

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

    validateOpenedBy: function() {
        var openedBy = this.getParameter('sysparm_user');
        var group = 'c635a59d84021010d06c6631561545aa'; //Service Desk sys_id


        var check = new GlideRecord('sys_user_grmember');
        check.addQuery('user', openedBy);
        check.addQuery('group', group);
        check.query();
        if (check.next()) {
            return true;
        } else {
            return false;
        }
    },
    type: 'getServiceDeskMembers'
});
1 ACCEPTED SOLUTION

I think I found the issue. I don't think it's working for you since g_form is client so the field has to be displayed in order for g_form.getValue('field') to work properly. I've changed up the scripts to below.

Client Script

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

	//Type appropriate comment here, and begin script below

	var state = g_form.getValue('state');
	var incnum = g_form.getUniqueValue();

	if(state == 6){
		var ga = new GlideAjax('getServiceDeskMembers');
		ga.addParam('sysparm_name', 'validateOpenedBy');
		ga.addParam('sysparm_incnum', incnum);
		ga.getXML(yellow);
	}

	function yellow(response){
		var answer = response.responseXML.documentElement.getAttribute("answer");

		if(answer){
			g_form.addInfoMessage('opened by is memeber of Service Desk');
		} else {
			g_form.addInfoMessage('opened by is NOT memeber of Service Desk');
		}
	}
}

 

Script Include

var getServiceDeskMembers = Class.create();
getServiceDeskMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	validateOpenedBy: function(){
		var incnum = this.getParameter('sysparm_incnum');
		var group = 'd625dccec0a8016700a222a0f7900d06'; //<--REPLACE WITH YOUR INSTANCE'S SYS_ID
		
		var gr = new GlideRecord('incident');
		gr.addQuery('sys_id', incnum);
		gr.query();
		if(gr.next()){
			var openedBy = gr.opened_by;
		}
		
		var check = new GlideRecord('sys_user_grmember');
		check.addQuery('user', openedBy);
		check.addQuery('group', group);
		check.query();
		if(check.next()){
			return true;
		} else {
			return false;
		}
	},

    type: 'getServiceDeskMembers'
});
Claude E. D'Amico, III - CSA

View solution in original post

3 REPLIES 3

Claude DAmico
Kilo Sage

Below worked for me:

Client Script

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

   //Type appropriate comment here, and begin script below
   var opened = g_form.getValue('opened_by');
	var state = g_form.getValue('state');
	
	if(state == 6){
		var ga = new GlideAjax('getServiceDeskMembers');
		ga.addParam('sysparm_name', 'validateOpenedBy');
		ga.addParam('sysparm_user', opened);
		ga.getXML(yellow);
	}
	
	function yellow(response){
		var answer = response.responseXML.documentElement.getAttribute("answer");
		
		if(answer){
			g_form.addInfoMessage('opened by is memeber of Service Desk');
		} else {
			g_form.addInfoMessage('opened by is NOT memeber of Service Desk');
		}
	}
}

Script Include

var getServiceDeskMembers = Class.create();
getServiceDeskMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	validateOpenedBy: function(){
		var openedBy = this.getParameter('sysparm_user');
		var group = 'd625dccec0a8016700a222a0f7900d06'; //<--REPLACE WITH YOUR INSTANCE'S SYS_ID
		
		var check = new GlideRecord('sys_user_grmember');
		check.addQuery('user', openedBy);
		check.addQuery('group', group);
		check.query();
		if(check.next()){
			return true;
		} else {
			return false;
		}
	},

    type: 'getServiceDeskMembers'
});
Claude E. D'Amico, III - CSA

Even though the opened_by user is NOT a part of the Service Desk my client script still shows the answer as 'opened by is member of Service Desk' and this is wrong.  My else block isn't being triggered in this case.  My script include isn't returning false...not sure why.

I think I found the issue. I don't think it's working for you since g_form is client so the field has to be displayed in order for g_form.getValue('field') to work properly. I've changed up the scripts to below.

Client Script

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

	//Type appropriate comment here, and begin script below

	var state = g_form.getValue('state');
	var incnum = g_form.getUniqueValue();

	if(state == 6){
		var ga = new GlideAjax('getServiceDeskMembers');
		ga.addParam('sysparm_name', 'validateOpenedBy');
		ga.addParam('sysparm_incnum', incnum);
		ga.getXML(yellow);
	}

	function yellow(response){
		var answer = response.responseXML.documentElement.getAttribute("answer");

		if(answer){
			g_form.addInfoMessage('opened by is memeber of Service Desk');
		} else {
			g_form.addInfoMessage('opened by is NOT memeber of Service Desk');
		}
	}
}

 

Script Include

var getServiceDeskMembers = Class.create();
getServiceDeskMembers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
	validateOpenedBy: function(){
		var incnum = this.getParameter('sysparm_incnum');
		var group = 'd625dccec0a8016700a222a0f7900d06'; //<--REPLACE WITH YOUR INSTANCE'S SYS_ID
		
		var gr = new GlideRecord('incident');
		gr.addQuery('sys_id', incnum);
		gr.query();
		if(gr.next()){
			var openedBy = gr.opened_by;
		}
		
		var check = new GlideRecord('sys_user_grmember');
		check.addQuery('user', openedBy);
		check.addQuery('group', group);
		check.query();
		if(check.next()){
			return true;
		} else {
			return false;
		}
	},

    type: 'getServiceDeskMembers'
});
Claude E. D'Amico, III - CSA