- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2024 09:52 PM
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
//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'
});
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2024 11:03 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2024 11:28 PM - edited 02-22-2024 11:31 PM
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'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2024 11:03 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2024 11:28 PM - edited 02-22-2024 11:31 PM
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'
});