2010-10-24 3 views
3

J'utilise Quartz.NET pour un système que je crée, où les travaux sont exécutés via un service Windows et peuvent être ajoutés et édités (y compris les détails du déclencheur) dans une page ASP.NET. J'ai quelques problèmes cependant - j'ai besoin de pouvoir modifier les détails d'un déclencheur, tel que le type de déclencheur simple ou la cronexpression, et on m'a dit que je devrais désinscrire le travail puis le replanifier. Le problème est, désorganisation du travail, puis le rééchelonnement est totalement supprimer le déclencheur de l'emploi pour une raison quelconque. Voici mon code pour quand on clique sur le bouton Soumettre sur la page d'édition:Utiliser Unschedulejob pour modifier les détails d'un déclencheur - que fais-je de mal? (Quartz.NET)

Trigger[] triggers = sched.GetTriggersOfJob(hdnID.Value, hdnGroupID.Value); 

     if (ddlScheduleType.SelectedIndex == 1) 
     { 
      sched.UnscheduleJob(triggers[0].Name, triggers[0].Group); 
      foreach (SimpleTrigger trigger in triggers.OfType<SimpleTrigger>()) 
      { 
       if (ddlInterval.SelectedIndex == 0) 
       { 
        trigger.RepeatInterval = TimeSpan.Parse("00:00:01"); 
       } 
       else if (ddlInterval.SelectedIndex == 1) 
       { 
        trigger.RepeatInterval = TimeSpan.Parse("00:01:00"); 
       } 
       else if (ddlInterval.SelectedIndex == 2) 
       { 
        trigger.RepeatInterval = TimeSpan.Parse("01:00:00"); 
       } 


       sched.RescheduleJob(trigger.Name, trigger.Group, trigger); 


      } 
     } 

     else 
     { 
      foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) 
      { 
       trigger.CronExpressionString = txtCron.Text; 
       sched.UnscheduleJob(triggers[0].Name, triggers[0].Group); 
       sched.RescheduleJob(trigger.Name, trigger.Group, trigger); 

      } 


     } 

     sched.AddJob(jobDetail, true); 

Des idées pour lesquelles ceci ne fonctionne pas? Merci

NOUVEAU:

if (ddlScheduleType.SelectedIndex == 1) 

     { 
      foreach (SimpleTrigger trigger in triggers.OfType<SimpleTrigger>()) 
      { 
       Trigger newtrigger = new SimpleTrigger(); 


       if (ddlInterval.SelectedIndex == 0) 
       { 
        newtrigger = TriggerUtils.MakeSecondlyTrigger(); 
       } 
       else if (ddlInterval.SelectedIndex == 1) 
       { 
        newtrigger = TriggerUtils.MakeMinutelyTrigger(); 
       } 
       else if (ddlInterval.SelectedIndex == 2) 
       { 
        newtrigger = TriggerUtils.MakeHourlyTrigger(); 
       } 

       newtrigger.Name = triggers[0].Name; 
       newtrigger.Group = triggers[0].Group; 
       newtrigger.JobName = triggers[0].JobName; 
       newtrigger.JobGroup = triggers[0].JobGroup; 

       sched.RescheduleJob(trigger.Name, trigger.Group, newtrigger); 


      } 
     } 

     else 
     { 
      foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) 
      { 
       CronTrigger newtrigger2 = new CronTrigger(); 
       newtrigger2.Name = trigger.Name; 
       newtrigger2.Group = trigger.Group; 
       newtrigger2.JobName = trigger.JobName; 
       newtrigger2.JobGroup = trigger.JobGroup; 

       newtrigger2.CronExpressionString = txtCron.Text; 
       sched.RescheduleJob(trigger.Name, trigger.Group, newtrigger2); 

      } 


     } 

Répondre

2
  • Je doute UnscheduleJob est nécessaire. Rééchelonner devrait delete the old trigger, alors essayez sans elle
  • Votre code else n'a pas de sens:

    foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) 
        { 
         trigger.CronExpressionString = txtCron.Text; 
         sched.UnscheduleJob(triggers[0].Name, triggers[0].Group); 
         sched.RescheduleJob(trigger.Name, trigger.Group, trigger); 
        } 
    

    Voulez-vous dire peut-être

    foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) 
        { 
         trigger.CronExpressionString = txtCron.Text; 
         sched.UnscheduleJob(trigger.Name, trigger.Group); //I would remove this 
         sched.RescheduleJob(trigger.Name, trigger.Group, trigger); 
        } 
    
  • Enfin, je voudrais essayer rééchelonnements avec une nouvelle déclencheur plutôt que l'ancien modifié

+0

Bravo mon pote, ça marche bien - mais si je veux changer un SimpleTrigger en CronTrigger ça ne semble pas fonctionner, ça garde juste l'ancien – Chris

+0

Pouvez-vous poster le code que vous utilisez pour remplacer un SimpleTrigger par un CronTrigger? –

+0

Juste posté le nouveau code :) – Chris

Questions connexes