2017-10-10 7 views
1

J'ai cron trigger qui tire tous les jours à un moment particulier de la journée, je dois mettre à jour ce trigger afin que je ne veux pas que le déclencheur soit exécuté à une date donnée.Mise à jour Quartz.net cron trigger ne s'exécute pas à une date ou à des dates particulières pour le déclenchement quotidien.

par ex. J'ai un trigger qui s'exécute quotidiennement chaque jour, je dois passer une date (31oct2017) A cette date ce trigger ne devrait pas s'exécuter.

J'ai essayé ci-dessous le code

var calendar = SCSScheduler.Scheduler.GetCalendar(id); 
CronCalendar cronCal = new CronCalendar(calendar,cronExceptionSchedule); 
       SCSScheduler.Scheduler.AddCalendar(id, cronCal, true, true); 
    var newTrigger = tb.WithCronSchedule(cronSchedule) 
        .StartAt(DateTime.UtcNow) 
        .ForJob(id) 
        .ModifiedByCalendar(id) 
        .Build(); 

      SCSScheduler.Scheduler.RescheduleJob(key, newTrigger); 

Je ne trouve pas de méthode pour mettre à jour le calendrier pour ne pas exécuter emploi pour cette date.

Répondre

1

Vous devez utiliser la classe HolidayCalendar, utilisée pour exclure des jours entiers des déclencheurs que vous créez.

Ceci est en fait assez bien décrit dans le documentation (code 3.0beta1 quartz):

HolidayCalendar cal = new HolidayCalendar(); 
cal.AddExcludedDate(new DateTime(2017, 10, 31)); 

await sched.AddCalendar("myHolidays", cal, false, false); 

ITrigger t = TriggerBuilder.Create() 
    .WithIdentity("myTrigger") 
    .ForJob("myJob") 
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(9, 30)) // execute job daily at 9:30 
    .ModifiedByCalendar("myHolidays") // but not on holidays 
    .Build();