- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2022 03:17 AM
The date field should not allow users to fill less than 24 hrs from the current date and it should follow a defined schedule
For example Schedule: Mon-Fri (8:00-19:00)Business hours
it should throw an error if the date is less than 24 hrs or out of business hours.
Looking for help.
Thanks in advance
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-30-2022 08:54 PM
Hi,
is script include client callable?
is the function being called properly?
share logs for this
var ajaxDateDiff = Class.create();
ajaxDateDiff.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check5Days: function () {
var answer;
var valid = new GlideDateTime();
valid.setDisplayValue(this.getParameter('sysparm_date'));
gs.info('User value->' + valid);
var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
var inSchedule = schedule.isInSchedule(valid);
gs.info("Is in schedule->" + inSchedule);
if (!inSchedule)
{
answer = 'false';
}
else
{
answer = 'true';
}
return answer;
},
});
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2022 05:07 AM
You will have to enhance the script as per your requirement.
Members can guide you.
If you start on your own it would be learning for you as well.
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2022 09:39 PM
Hi Ankur,
I'm using the below script include and client script but it is not working can you help me out here.
script include
var ajaxDateDiff = Class.create();
ajaxDateDiff.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check5Days: function () {
var answer = "";
var valid = this.getParameter('sysparm_date');
var startDate = new GlideDateTime();
var days = 7;
var dur = new GlideDuration(43200*1000* days);
var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
//schedule.get("377f5e51db2e851040d8176a489619cc");
var end = schedule.add(startDate, dur);
var diffSeconds = gs.dateDiff(end, valid, true);
if (diffSeconds < 0 )
{
answer = 'true';
}
else
{
answer = 'false';
}
return answer;
},
});
on change client script:
function onChange(control, oldValue, newValue, isLoading) {
// Call the script include to do the date check
var ga = new GlideAjax('ajaxDateDiff');
ga.addParam('sysparm_name', 'check5Days');
ga.addParam('sysparm_date', newValue);
ga.getXML(ValidateDateResponse);
}
function ValidateDateResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer == "false") {
g_form.addErrorMsg('termineingabe', "The date/time you entered is an invalid format, the current date or after the current date", 'error');
g_form.setValue('termineingabe', "");
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2022 10:11 PM
Update as this
Script Include:
var ajaxDateDiff = Class.create();
ajaxDateDiff.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check5Days: function () {
var answer = "";
var valid = new GlideDateTime(this.getParameter('sysparm_date'));
var startDate = new GlideDateTime();
var days = 1;
var dur = new GlideDuration(43200*1000* days);
var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
var end = new GlideDateTime(schedule.add(startDate, dur));
var duration = GlideDateTime.subtract(valid, end);
var daysPart = duration.getDayPart();
if (daysPart < 1 )
{
answer = 'false';
}
else
{
answer = 'true';
}
return answer;
},
});
Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if(oldValue != newValue){
// Call the script include to do the date check
var ga = new GlideAjax('ajaxDateDiff');
ga.addParam('sysparm_name', 'check5Days');
ga.addParam('sysparm_date', newValue);
ga.getXML(ValidateDateResponse);
}
}
function ValidateDateResponse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if (answer == "false") {
g_form.addErrorMsg('termineingabe', "The date/time you entered is an invalid format, the current date or after the current date", 'error');
g_form.setValue('termineingabe', "");
}
}
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-30-2022 02:22 AM
HI Ankur,
I have tried the above code but not working.
my requirements are:
I have a catalog variable field name : termineingabe (type: date/time)
it should not allow users to enter date and time out of business hours
schedule created: Mon-Fri 8:00-19:00 Excluding weekends.(only 11 hours a day)
can you please help me out here?
Thanks in advance.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-30-2022 02:44 AM
Hi,
okay so you just want to check if selected date/time is in schedule or not
then do this
var ajaxDateDiff = Class.create();
ajaxDateDiff.prototype = Object.extendsObject(AbstractAjaxProcessor, {
check5Days: function () {
var answer;
var valid = new GlideDateTime();
valid.setDisplayValue(this.getParameter('sysparm_date'));
var schedule = new GlideSchedule('377f5e51db2e851040d8176a489619cc');
var inSchedule = schedule.isInSchedule(valid);
if (!inSchedule)
{
answer = 'false';
}
else
{
answer = 'true';
}
return answer;
},
});
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader