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);
}
}
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
Pouvez-vous poster le code que vous utilisez pour remplacer un SimpleTrigger par un CronTrigger? –
Juste posté le nouveau code :) – Chris