script include response return null

chet shian
Tera Contributor

Hi All,

 

I'd like to validate multiple fields, all of which must be unique. I handle the validation on Onsubmit event. Below are my settings on the client and backend. 

 

I can't get things to function, and the response from the server side returned null. 

 

What's wrong with my code and settings?

chetshian_0-1705564302601.png

 

chetshian_1-1705564501254.png

 

Code on client side

 

function onSubmit() {
    //Type appropriate comment here, and begin script below
    if (g_scratchpad.isFormValid) { //using g_scratchpad as Async GlideAjax does not work with Onsubmit
        return true;
    }
    var personnel_type = g_form.getValue('personnel_type').trim();
    var employee_id = g_form.getValue('employee_id').trim();
    var Project_site = g_form.getValue('project_site').trim();
    //var actionName = g_form.getActionName();

    var ga = new GlideAjax('getCC_Personnel');
    ga.addParam('sysparm_name', 'validateDuplicateRec');
    ga.addParam('sysparm_personnel_type', personnel_type);
    ga.addParam('sysparm_employee_id', employee_id);
    ga.addParam('sysparm_Project_site', Project_site);
    ga.getXMLAnswer(validateDuplicate);
    return false;


    function validateDuplicate(answer) {

        //var resp = response.responseXML.documentElement.getAttribute("answer");


        g_scratchpad.isFormValid = true;
       

        alert(answer);
        if (answer == 'false') {
            g_form.submit(actionName);
            var actionName = g_form.getActionName();
            g_form.addErrorMessage('Duplicate user with same project site and personnel type found');

            return false;
        } else {
            g_form.submit(actionName);
            actionName = g_form.getActionName();
            alert('another alert');
            return true;

        }




    }
}
 
and code on backend. 
 
var XgetCC_Personnel = Class.create();
XgetCC_Personnel.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

    validateDuplicateRec: function() {
        gs.log("enter to the backend");
        var answer = false;
        var personneltype = this.getParameter('sysparm_personnel_type');
        var employeeid = this.getParameter('sysparm_employee_id');
        var projectsite = this.getParameter('sysparm_Project_site');
        var gr = new GlideRecordSecure('x_wohp_new_hire_ap_nac_c_cc_personnel');
        gr_cc_personnel.addQuery('personnel_type', personneltype);
        gr_cc_personnel.addQuery('employee_id', employeeid);
        gr_cc_personnel.addQuery('project_site', projectsite);
        gr_cc_personnel.query();
        if (gr_cc_personnel.next()) {
            answer = true;
        }
        return answer;
        // var result = "";
        // var personneltype = this.getParameter('sysparm_personnel_type');
        // var employeeid = this.getParameter('sysparm_employee_id');
        // var projectsite = this.getParameter('sysparm_Project_site');
        // var gr_cc_personnel = new GlideRecordSecure ('x_wohp_new_hire_ap_nac_c_cc_personnel');

        // gr_cc_personnel.addQuery('personnel_type',personneltype);
        //gr_cc_personnel.addQuery('employee_id',employeeid);
        //  gr_cc_personnel.addQuery('project_site',projectsite);
        // gr_cc_personnel.addActiveQuery();

        // 3. Execute query
        //  gr_cc_personnel.query();    
        //  if (gr_cc_personnel.next()) {
        //      result = "true";
        //  }
        //   gs.info("Chetan-2 inside validate form Result is " + result);
        //  return result;




    },
    type: 'XgetCC_Personnel'
});

 

10 REPLIES 10

Hi @chet shian there is another error your calling wrong script include name in client script


var ga = new GlideAjax('getCC_Personnel');// change this to XgetCC_Personnel as per your scriptinclude
ga.addParam('sysparm_name', 'validateDuplicateRec');
ga.addParam('sysparm_personnel_type', personnel_type);
ga.addParam('sysparm_employee_id', employee_id);
ga.addParam('sysparm_Project_site', Project_site);
ga.getXMLAnswer(validateDuplicate);
return false;

Regards
Harish

Tai Vu
Kilo Patron
Kilo Patron

Hi @chet shian 

1. In your script include, the initiated variable named gr while you're using gr_cc_personnel

 

var gr = new GlideRecordSecure('x_wohp_new_hire_ap_nac_c_cc_personnel'); //gr
gr_cc_personnel.addQuery('personnel_type', personneltype); //gr_cc_personnel

 

 

2. You're calling the GlideAjax with the wrong script include name.

getCC_Personnel and XgetCC_Personnel
 
3. The action name is used in the wrong place.
 
You can give my adjustment a try.
#Client Script

 

function onSubmit() {
    //Type appropriate comment here, and begin script below
    if (g_scratchpad.isFormValid) { //using g_scratchpad as Async GlideAjax does not work with Onsubmit
        return true;
    }
    
	var personnel_type = g_form.getValue('personnel_type').trim();
    var employee_id = g_form.getValue('employee_id').trim();
    var project_site = g_form.getValue('project_site').trim();
    var actionName = g_form.getActionName();

    var ga = new GlideAjax('XgetCC_Personnel');
    ga.addParam('sysparm_name', 'validateDuplicateRec');
    ga.addParam('sysparm_personnel_type', personnel_type);
    ga.addParam('sysparm_employee_id', employee_id);
    ga.addParam('sysparm_project_site', project_site);
    ga.getXMLAnswer(function(answer){
		if (answer == 'true') {
            g_form.addErrorMessage('Duplicate user with same project site and personnel type found');
            return false;
        }
        g_scratchpad.isFormValid = true;
        g_form.submit(actionName);
	});
    return false;
	
}

 

 
#Script include

 

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

    validateDuplicateRec: function() {
        var personneltype = this.getParameter('sysparm_personnel_type');
        var employeeid = this.getParameter('sysparm_employee_id');
        var projectsite = this.getParameter('sysparm_project_site');
        var gr_cc_personnel = new GlideRecordSecure('x_wohp_new_hire_ap_nac_c_cc_personnel');
        gr_cc_personnel.addQuery('personnel_type', personneltype);
        gr_cc_personnel.addQuery('employee_id', employeeid);
        gr_cc_personnel.addQuery('project_site', projectsite);
        gr_cc_personnel.setLimit(1);
        gr_cc_personnel.query();
        return gr_cc_personnel.hasNext();
    },

    type: 'XgetCC_Personnel'
});

 

 

 
Cheers,
Tai Vu

Hi @chet shian 

Just give my suggestions a try, it might save your time.

 

Cheers,

Tai Vu

Thanks Timi, 

I took your suggestion by using XgetCC_Personnel instead me name of the include script I got an error  "Access to Script Include NHA_getCC_Personnel blocked from scope: x_wohp_new_hire_ap"

so I changed to the name of script include to get rid of this error.

The rest I applied with your suggested script but It did not work. 

I printed with the alert on the response. I got a null returned value, 

 

chetshian_0-1706073852898.png

 

var ga = new GlideAjax('getCC_Personnel');

 

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

    validateDuplicateRec: function() {
			gs.info("test", "testsource");
        gs.info("enter to the backend");
		gs.info("test", "testsource");
        var answer = false;
        var personneltype = this.getParameter('sysparm_personnel_type');
        var employeeid = this.getParameter('sysparm_employee_id');
        var projectsite = this.getParameter('sysparm_Project_site');
        var gr_cc_personnel = new GlideRecordSecure('x_wohp_new_hire_ap_nac_c_cc_personnel');
        gr_cc_personnel.addQuery('personnel_type', personneltype);
        gr_cc_personnel.addQuery('employee_id', employeeid);
        gr_cc_personnel.addQuery('project_site', projectsite);
        gr_cc_personnel.setLimit(1);
        gr_cc_personnel.query();
        return gr_cc_personnel.hasNext();

    },
    type: 'NHA_getCC_Personnel'
});

 

 

 

function onSubmit() {
    //Type appropriate comment here, and begin script below
    if (g_scratchpad.isFormValid) { //using g_scratchpad as Async GlideAjax does not work with Onsubmit
        return true;
    }
    var personnel_type = g_form.getValue('personnel_type').trim();
    var employee_id = g_form.getValue('employee_id').trim();
    var Project_site = g_form.getValue('project_site').trim();
    var actionName = g_form.getActionName();

    var ga = new GlideAjax('getCC_Personnel');
    ga.addParam('sysparm_name', 'validateDuplicateRec');
    ga.addParam('sysparm_personnel_type', personnel_type);
    ga.addParam('sysparm_employee_id', employee_id);
    ga.addParam('sysparm_Project_site', Project_site);
     ga.getXMLAnswer(function(answer){
		if (answer == 'true') {
            g_form.addErrorMessage('Duplicate user with same project site and personnel type found');
            return false;
        }
		alert(answer);
        g_scratchpad.isFormValid = true;
        g_form.submit(actionName);
	});
    return false;
}

 

Anil Lande
Kilo Patron

Hi,

Please check below things:

1. Use coplete API name in your Client script for GlideAjax API.

    var ga = new GlideAjax('getCC_Personnel');

instead use

    var ga = new GlideAjax('x_wohp_new_hire_ap.getCC_Personnel');  

 

2. Put logs in your Script include to see if it is being called and few logs to check what all loops it is entering and one log just before final return statement to print the value of answer. 

 

Please appreciate the efforts of community contributors by marking appropriate response as correct answer and helpful, this may help other community users to follow correct solution in future.
Thanks
Anil Lande