Schedule report on the 1st day on the month excluding weekends

ST9
Tera Contributor

How to schedule a report for every 1st of month but if it is weekend then it should trigger next day.

 

12 REPLIES 12

Hi,

you want to invoke scheduled report from scheduled job?

then do this

myJob();

function myJob(){

    var gdt = new GlideDateTime();
    var dayOfWeek = gdt.getDayOfWeekLocalTime();
    var trigger = new GlideRecord("sys_trigger");
    if(dayOfWeek == 6){
        gdt.addDaysUTC(2);
        trigger.name = "Job running on Monday due to saturday";
        trigger.next_action = gdt;
        trigger.job_id.setDisplayValue('RunScriptJob');
        trigger.script = getTriggerScript();
        trigger.state = 0;
        trigger.trigger_type = 0;
        trigger.insert();
    }

    if(dayOfWeek == 7){
        var nowTime = new GlideDateTime();
        nowTime.addDaysUTC(1);
        trigger.name = "Job running on Monday due to sunday";
        trigger.next_action = nowTime;
        trigger.job_id.setDisplayValue('RunScriptJob');
        trigger.script = getTriggerScript();
        trigger.state = 0;
        trigger.trigger_type = 0;
        trigger.insert();
    }
}

function getTriggerScript(userSysID) {
    var ret = "var rec = new GlideRecord('sysauto_report'); rec.get('name', 'MyReport'); SncTriggerSynchronizer.executeNow(rec);"; // give your script here
    return ret;
}

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur,

I just wanted to schedule my report to trigger on every 1st day of month, excluding Sat/Sun.

I will try your script.. But i'm getting this line- 

trigger.name = "Job running on Monday due to saturday";

 

Hi,

that is just the name for the trigger; nothing special on it

trigger.name = "Job running on Monday due to saturday";

keep scheduled report as inactive as we will be triggering it from scheduled job

update script as this

myJob();

function myJob(){

	var gdt = new GlideDateTime();
	var dayOfWeek = gdt.getDayOfWeekLocalTime();
	var trigger = new GlideRecord("sys_trigger");
	if(dayOfWeek == 6){
		gdt.addDaysUTC(2);
		trigger.name = "Job running on Monday due to saturday";
		trigger.next_action = gdt;
		trigger.job_id.setDisplayValue('RunScriptJob');
		trigger.script = getTriggerScript();
		trigger.state = 0;
		trigger.trigger_type = 0;
		trigger.insert();
	}
	else if(dayOfWeek == 7){
		var nowTime = new GlideDateTime();
		nowTime.addDaysUTC(1);
		trigger.name = "Job running on Monday due to sunday";
		trigger.next_action = nowTime;
		trigger.job_id.setDisplayValue('RunScriptJob');
		trigger.script = getTriggerScript();
		trigger.state = 0;
		trigger.trigger_type = 0;
		trigger.insert();
	}
	else{
		// it's not weekend so run the report
		var rec = new GlideRecord('sysauto_report'); 
		rec.get('name', 'MyReport');
		SncTriggerSynchronizer.executeNow(rec);
	}
}

function getTriggerScript(userSysID) {
	var ret = "var rec = new GlideRecord('sysauto_report'); rec.get('name', 'MyReport'); SncTriggerSynchronizer.executeNow(rec);"; // give your script here
	return ret;
}

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

ST9
Tera Contributor

Also, is it possible from Schedule report condition script?

var answer = false;

//Get the day of week. 1=Monday, 7=Sunday
var now = new GlideDateTime();

//Run only on weekdays
if(now.getDayOfWeek() < 6){
answer = true;
}
answer;

 

find_real_file.png

Hi,

you can skip the scheduled report using conditions and ensure it runs only on 1st of the month and not on weekend also

but your next part is to make it run on monday of the coming weekend

for that you need to use my solution/approach

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader