- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-02-2025 10:37 PM
I have written this scheduled job which will send reminder notification every 2 days.
like
1st reminder every 2 days
2nd reminder every 4 days
3rd reminder every 6 days
But issue is coming on weekend. We are running this only on weekdays with condition. Now if in between weekend is coming then sometimes reminder don't trigger. How to correct this?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-02-2025 11:21 PM
ou need to adjust your logic to exclude weekends from the day count. Instead of counting calendar days, count business days (weekdays only).
verify with following updated script:
var reminder = new GlideRecord('sysapproval_approver');
reminder.addEncodedQuery("state=requested^source_table=sn_customerservice_north_america_procurement");
reminder.query();
while (reminder.next()) {
var createdDate = new GlideDateTime(reminder.sys_created_on);
var today = new GlideDateTime();
var businessDays = getBusinessDaysBetween(createdDate, today);
if (businessDays == 2) {
gs.eventQueue('sn_customerservice.reminder1', reminder, reminder.approver);
} else if (businessDays == 4) {
gs.eventQueue('sn_customerservice.reminder2', reminder, reminder.approver);
} else if (businessDays == 6) {
gs.eventQueue('sn_customerservice.reminder3', reminder, reminder.approver);
}
}
// Function to count only business days (excluding weekends)
function getBusinessDaysBetween(startDate, endDate) {
var count = 0;
var tempDate = new GlideDateTime(startDate);
while (tempDate.before(endDate)) {
var dayOfWeek = tempDate.getDayOfWeek(); // 1 = Monday, 7 = Sunday
if (dayOfWeek != 6 && dayOfWeek != 7) { // Skip Saturday (6) and Sunday (7)
count++;
}
tempDate.addDays(1);
}
return count;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-02-2025 11:21 PM
ou need to adjust your logic to exclude weekends from the day count. Instead of counting calendar days, count business days (weekdays only).
verify with following updated script:
var reminder = new GlideRecord('sysapproval_approver');
reminder.addEncodedQuery("state=requested^source_table=sn_customerservice_north_america_procurement");
reminder.query();
while (reminder.next()) {
var createdDate = new GlideDateTime(reminder.sys_created_on);
var today = new GlideDateTime();
var businessDays = getBusinessDaysBetween(createdDate, today);
if (businessDays == 2) {
gs.eventQueue('sn_customerservice.reminder1', reminder, reminder.approver);
} else if (businessDays == 4) {
gs.eventQueue('sn_customerservice.reminder2', reminder, reminder.approver);
} else if (businessDays == 6) {
gs.eventQueue('sn_customerservice.reminder3', reminder, reminder.approver);
}
}
// Function to count only business days (excluding weekends)
function getBusinessDaysBetween(startDate, endDate) {
var count = 0;
var tempDate = new GlideDateTime(startDate);
while (tempDate.before(endDate)) {
var dayOfWeek = tempDate.getDayOfWeek(); // 1 = Monday, 7 = Sunday
if (dayOfWeek != 6 && dayOfWeek != 7) { // Skip Saturday (6) and Sunday (7)
count++;
}
tempDate.addDays(1);
}
return count;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-02-2025 11:32 PM
Hello @Hafsa1 ,
I would recommend that, if possible, you change the job to run daily, including on weekends.
Otherwise there will always be a risk of something missed due to different time zones (for example, Saturday morning in India would still be Friday in the USA), daylight saving time switches, etc. It would be very tricky to accommodate all these cases in the script.
If the script runs every day it can be as simple as this:
var reminder = new GlideRecord('change_request');
reminder.query();
var bdtNow = new GlideDateTime();
while (reminder.next()) {
var bdtActual = new GlideDateTime(reminder.sys_created_on);
var days = GlideDateTime.subtract(bdtActual, bdtNow).getDayPart();
var event = '';
switch (days.toString()) {
case '2': event = 'sn_customerservice.reminder1'; break;
case '4': event = 'sn_customerservice.reminder2'; break;
case '6': event = 'sn_customerservice.reminder3';
}
if (event) {
gs.eventQueue(event, reminder, reminder.approver);
}
}
Regards,
Robert