- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-03-2023 11:21 PM - edited 08-03-2023 11:23 PM
validateDatetoDisable.prototype = Object.extendsObject(AbstractAjaxProcessor, {
nowDateTime: function() {
var disableDate = this.getParameter('sysparm_disable_dt');
gs.log('Rishi Disable Dt ' + disableDate);
var cDate = new GlideDate();
gs.log('Rishi Current Dt ' + cDate);
//return gs.dateDiff(gs.nowDateTime(), disableDate, true) / 86400;
//return gs.dateDiff(cDate, disableDate, true) / 86400;
return gs.dateDiff(cDate, disableDate, true);
},
type: 'validateDatetoDisable'
});
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var disDate = new GlideAjax('validateDatetoDisable');
disDate.addParam('sysparm_name', 'nowDateTime');
disDate.addParam('sysparm_disable_dt', g_form.getValue('date_to_disable_account'));
disDate.getXML(compareDisableDate);
function compareDisableDate(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
//if (answer <= 0) {To neither allow current date nor past date
if (answer < 0) { //To allow current date but not past date
g_form.addErrorMessage("Date to Disable should not be the Past Date");
g_form.clearValue('date_to_disable_account');
}
}
}
I know this can be achieved through UI Policy Script, but I want this fulfilled through Client Callable Script Include for learning purposes.
Thank You in advance!
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-04-2023 02:56 AM
Oh, sorry, I completely missed the error from the log that you posted.
That error indicates something else, maybe a scope identifier will help?
Here's how I would do it, if going for the client-script/script include way.
Script include:
Client script:

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2023 10:22 AM
Okay, that will make it a bit more complicated.
Add these lines to the script to allow for the same day also.
And on another note, make it a habit to use gs.info() instead of gs.log(), since gs.log() does not work in scoped applications.
isBeforeToday: function() {
var compareDate = this.getParameter('sysparm_date_compare');
if (!compareDate)
return 0;
var gdt = new GlideDateTime();
var compareGDT = new GlideDateTime(compareDate);
var systemDay = gdt.getDate().toString();
var compareDay = compareGDT.getDate().toString();
if (systemDay == compareDay) {
return 1;
else {
if (compareGDT.before(gdt)) {
return 0;
} else {
return 1;
}
}
},

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-04-2023 01:12 AM
Hi,
I believe the error here is that the function is returning a value as a String, but you are trying to compare it as an Integer.
That will not work.
Also, if you are just looking at date comparison, you can probably do this with a UI policy, no coding would be required.
Have a look at this article by Mark Roethof to help you get started.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-04-2023 02:56 AM
Oh, sorry, I completely missed the error from the log that you posted.
That error indicates something else, maybe a scope identifier will help?
Here's how I would do it, if going for the client-script/script include way.
Script include:
Client script:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-04-2023 01:28 PM
Thank You @OlaN Sir, its working fine now
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2023 06:07 AM - edited 08-06-2023 06:22 AM
Hello @OlaN Sir,
Sorry was not tested your provided script with Current (Today's) date selection. When I select Today's date it's displaying 'Invalid Date' (see screenshot) which is not desired. It should take today's date or any future date. Please help so that it will take Today's date as well.
I tried to verify this through applying logs (see the below screenshot)
Provided Script Include with Logs:
var DisdtValidation = Class.create();
DisdtValidation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
isBeforeToday: function() {
var compareDate = this.getParameter('sysparm_date_compare');
gs.log('Rishi Compare Dt ' + compareDate);
if (!compareDate)
return 0;
var gdt = new GlideDateTime();
gs.log('Rishi Now Dt ' + gdt);
var compareGDT = new GlideDateTime(compareDate);
gs.log('Rishi Compare GDT ' + compareGDT);
if (compareGDT.before(gdt)) {
return 0;
} else {
return 1;
}
},
type: 'DisdtValidation'
});

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2023 10:22 AM
Okay, that will make it a bit more complicated.
Add these lines to the script to allow for the same day also.
And on another note, make it a habit to use gs.info() instead of gs.log(), since gs.log() does not work in scoped applications.
isBeforeToday: function() {
var compareDate = this.getParameter('sysparm_date_compare');
if (!compareDate)
return 0;
var gdt = new GlideDateTime();
var compareGDT = new GlideDateTime(compareDate);
var systemDay = gdt.getDate().toString();
var compareDay = compareGDT.getDate().toString();
if (systemDay == compareDay) {
return 1;
else {
if (compareGDT.before(gdt)) {
return 0;
} else {
return 1;
}
}
},