Script include not working on client side - on change

DB1
Tera Contributor

Hi All,

I have a script Include as shown below:

var checkUserEmail = Class.create();
checkUserEmail.prototype = {
	initialize: function() {
	},

	validateUser: function() {
		var answer = '';
		var getEmail = this.getParameter('sysparm_getemail');
		var grgetEmail = new GlideRecord("sys_user");
		grgetEmail.addEncodedQuery("active=true^email!=NULL");
		grgetEmail.addQuery("email",getEmail); 
		//gr.setLimit(1);
		grgetEmail.query();
		if(grgetEmail.next()){
			answer = 'false'; 
		}
		else{
			answer = 'true';
		}
		return answer;
	} ,


	type: 'checkUserEmail'
};

  and is client callable.

 

I just have a "Email" string field variable on a catalog item and I need to compare the email entered (on change) everytime the user enters any value in it it has to check the user table for any occurence and if there is an entry it has to show an error.

 

I have the below client script however it returns null value from script include side

 

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

	var email = g_form.getValue('user_email').toString();
	alert(email);

	var ga = new GlideAjax('checkUserEmail');
	ga.addParam('sysparm_name', "validateUser");
	ga.addParam('sysparm_getemail', newValue);
	alert(newValue);
	ga.getXML(getResponse);
	function getResponse(response) {
		var res = response.responseXML.documentElement.getAttribute("answer");
		alert(res);	
	}
}

Thhis res returns null. Need help on the same.

 

TIA

@Danish Bhairag2 @Sandeep Rajput @Ankur Bawiskar @Tai Vu 

3 REPLIES 3

Tai Vu
Kilo Patron
Kilo Patron

Hi @DB1 

Your Script Include is not Client Callable one.

TaiVu_0-1699364258467.png

 

var checkUserEmail = Class.create();
checkUserEmail.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	
    validateUser: function() {
        var answer = '';
        var getEmail = this.getParameter('sysparm_getemail');
        var grgetEmail = new GlideRecord("sys_user");
        grgetEmail.addEncodedQuery("active=true^email!=NULL");
        grgetEmail.addQuery("email", getEmail);
        //gr.setLimit(1);
        grgetEmail.query();
        if (grgetEmail.next()) {
            answer = 'false';
        } else {
            answer = 'true';
        }
        return answer;
    },

    type: 'checkUserEmail'
});

 

 

Cheers,

Tai Vu

AnveshKumar M
Tera Sage
Tera Sage

Hi @DB1 

 

Change the script to the following one and make sure it is client callable.

 

 

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

    validateUser: function() {
        var answer = '';
        var getEmail = this.getParameter('sysparm_getemail');
        var grgetEmail = new GlideRecord("sys_user");
        grgetEmail.addEncodedQuery("active=true^email!=NULL");
        grgetEmail.addQuery("email", getEmail);
        //gr.setLimit(1);
        grgetEmail.query();
        if (grgetEmail.next()) {
            answer = 'false';
        } else {
            answer = 'true';
        }
        return answer;
    },

    type: 'checkUserEmail'
});

 

 

AnveshKumarM_0-1699364195140.png

 

 

Please mark my answer helpful and accept as solution if it helped 👍✔️

Thanks,
Anvesh

Prince Arora
Tera Sage
Tera Sage

@DB1 

 

The script doesn't looks like client callable if a script include is client callable, it should be extended with AbstractAjaxProcessor and it should be look like below:

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


validateUser:function(){
//Your code here
}

type: 'test'
});

 

Do one thing

1) Copy your function from the code (just your function)

2) Delete the current script include

3) Create a new script include and made client callable active true before saving the record

4) Then paste your function there and it should work

 

If my answer solved your issue, please mark my answer as  Correct & 👍Helpful based on the Impact.