client script and script include

Shiv Dahe
Tera Expert

I want to restrict user from submitting duplicate time card (time_card) and considering three parameters to validate the same

1. week_starts_on

2. user

3. task

if all three parameters matches with an existing record user should not be able to submit the request.

 

I have written an onChange client script to validate it but it is not working.

on alert it is showing "null"

 

Client Script

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    alert(g_form.getDisplayValue('week_starts_on'));
    var dup = new GlideAjax('global.duplicate_time_sheet');
    dup.addParam('sysparm_name', 'checkPrerequisite');
    dup.addParam('sysparm_week', g_form.getDisplayValue('week_starts_on'));
    dup.addParam('sysparm_task', g_form.getValue('task'));
    dup.addParam('sysparm_user', g_form.getValue('user'));

    dup.getXMLAnswer(getResponse);

    function getResponse(response) {
        var res = JSON.parse(response);
        alert(res);
        if (res == 'duplicate') {
            alert('Duplicate dont submit');
        } else if (res == 'not_duplicate') {
            alert('Submit the form');
        }

        //Type appropriate comment here, and begin script below

    }
}
 
 
 
Script Include
 
var duplicate_time_sheet = Class.create();
duplicate_time_sheet.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    checkPrerequisite: function() {
        // var hy = this.getParameter(current);
        var time = this.getParameter(sysparm_week);
        var task = this.getParameter(sysparm_task);
        var user = this.getParameter(sysparm_user);
        var sd = "week_starts_onON" + time + "@javascript:gs.dateGenerate('" + time + "','start')@javascript:gs.dateGenerate('" + time + "','end')";

        var gr = new GlideRecord('time_card');

        gr.addEncodedQuery(sd + "^task" + task + "^user" + user);

        gr.query();
        if (gr.next()) {
            //alert('duplicate Entry');
            return 'duplicate';
        } else {
            return 'not_duplicate';
        }
    },
    type: 'duplicate_time_sheet'
});

 

//Client Script
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    alert(g_form.getDisplayValue('week_starts_on'));
    var dup = new GlideAjax('global.duplicate_time_sheet');
    dup.addParam('sysparm_name', 'checkPrerequisite');
    dup.addParam('sysparm_week', g_form.getDisplayValue('week_starts_on'));
    dup.addParam('sysparm_task', g_form.getValue('task'));
    dup.addParam('sysparm_user', g_form.getValue('user'));

    dup.getXMLAnswer(getResponse);

    function getResponse(response) {
        var res = JSON.parse(response);
		alert(res);
        if (res == 'duplicate') {
            alert('Duplicate dont submit');
        } else if (res == 'not_duplicate') {
            alert('Submit the form');
        }

        //Type appropriate comment here, and begin script below

    }
}



//Script Include
var duplicate_time_sheet = Class.create();
duplicate_time_sheet.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    checkPrerequisite: function() {
        // var hy = this.getParameter(current);
        var time = this.getParameter(sysparm_week);
        var task = this.getParameter(sysparm_task);
        var user = this.getParameter(sysparm_user);
        var sd = "week_starts_onON" + time + "@javascript:gs.dateGenerate('" + time + "','start')@javascript:gs.dateGenerate('" + time + "','end')";

        var gr = new GlideRecord('time_card');

        gr.addEncodedQuery(sd + "^task" + task + "^user" + user);

        gr.query();
        if (gr.next()) {
            //alert('duplicate Entry');
            return 'duplicate';
        } else {
            return 'not_duplicate';
        }
    },
    type: 'duplicate_time_sheet'
});​

 

2 ACCEPTED SOLUTIONS

Voona Rohila
Kilo Patron
Kilo Patron

Hi @Shiv Dahe 

Remove the parse statement from the client script and try.

  var res = JSON.parse(response);

 


Mark it helpful if this helps you to understand. Accept solution if this give you the answer you're looking for
Kind Regards,
Rohila V
2022-25 ServiceNow Community MVP

View solution in original post

Shiv Dahe
Tera Expert

Thanks, it worked

Corrected solution:

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

    var dup = new GlideAjax('global.duplicate_time_sheet');
    dup.addParam('sysparm_name', 'checkPrerequisite');
    dup.addParam('sysparm_week', g_form.getDisplayValue('week_starts_on'));
    dup.addParam('sysparm_task', g_form.getValue('task'));
    dup.addParam('sysparm_user', g_form.getValue('user'));

    dup.getXMLAnswer(getResponse);

    function getResponse(response) {
        var res = response;
        if (res == 'duplicate') {
            alert('Duplicate dont submit');
        } else if (res == 'not_duplicate') {
            alert('Submit the form');
        }

        //Type appropriate comment here, and begin script below

    }
}


//Script Include
var duplicate_time_sheet = Class.create();
duplicate_time_sheet.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    checkPrerequisite: function() {
        var time = this.getParameter('sysparm_week');
        var task = this.getParameter('sysparm_task');
        var user = this.getParameter('sysparm_user');
        var sd = "week_starts_onON" + time + "@javascript:gs.dateGenerate('" + time + "','start')@javascript:gs.dateGenerate('" + time + "','end')";
        var gr = new GlideRecord('time_card');

        gr.addEncodedQuery(sd + "^task=" + task + "^user=" + user);

        gr.query();
        if (gr.next()) {
            //alert('duplicate Entry');
            return 'duplicate';
        } else {
            return 'not_duplicate';
        }
    },
    type: 'duplicate_time_sheet'
});

 

View solution in original post

2 REPLIES 2

Voona Rohila
Kilo Patron
Kilo Patron

Hi @Shiv Dahe 

Remove the parse statement from the client script and try.

  var res = JSON.parse(response);

 


Mark it helpful if this helps you to understand. Accept solution if this give you the answer you're looking for
Kind Regards,
Rohila V
2022-25 ServiceNow Community MVP

Shiv Dahe
Tera Expert

Thanks, it worked

Corrected solution:

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

    var dup = new GlideAjax('global.duplicate_time_sheet');
    dup.addParam('sysparm_name', 'checkPrerequisite');
    dup.addParam('sysparm_week', g_form.getDisplayValue('week_starts_on'));
    dup.addParam('sysparm_task', g_form.getValue('task'));
    dup.addParam('sysparm_user', g_form.getValue('user'));

    dup.getXMLAnswer(getResponse);

    function getResponse(response) {
        var res = response;
        if (res == 'duplicate') {
            alert('Duplicate dont submit');
        } else if (res == 'not_duplicate') {
            alert('Submit the form');
        }

        //Type appropriate comment here, and begin script below

    }
}


//Script Include
var duplicate_time_sheet = Class.create();
duplicate_time_sheet.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    checkPrerequisite: function() {
        var time = this.getParameter('sysparm_week');
        var task = this.getParameter('sysparm_task');
        var user = this.getParameter('sysparm_user');
        var sd = "week_starts_onON" + time + "@javascript:gs.dateGenerate('" + time + "','start')@javascript:gs.dateGenerate('" + time + "','end')";
        var gr = new GlideRecord('time_card');

        gr.addEncodedQuery(sd + "^task=" + task + "^user=" + user);

        gr.query();
        if (gr.next()) {
            //alert('duplicate Entry');
            return 'duplicate';
        } else {
            return 'not_duplicate';
        }
    },
    type: 'duplicate_time_sheet'
});