我有一个Quartz.NET应用程序,我需要管理员能够修改作业详细信息 - 主要是每个作业数据图中的信息,还有触发器之类的东西 - 这是我正在使用的代码
protected void ButtonSubmit_Click(object sender, EventArgs e)
{
JobDetail jobDetail = sched.GetJobDetail(hdnID.Value, hdnGroupID.Value);
jobDetail.JobDataMap["idname"] = txtName.Text;
jobDetail.JobDataMap["initialPath"] = TextBox1.Text;
jobDetail.JobDataMap["targetPath"] = TextBox2.Text;
jobDetail.JobDataMap["regex"] = TextBox3.Text;
jobDetail.JobDataMap["overrideemails"] = txtEmails.Text;
jobDetail.JobDataMap["flush"] = chkflush.Checked;
jobDetail.JobDataMap["impUsername"] = txtImpUsername.Text;
jobDetail.JobDataMap["impDomain"] = txtImpDomain.Text;
jobDetail.JobDataMap["impPassword"] = txtImpPassword.Text;
Trigger[] triggers = sched.GetTriggersOfJob(hdnID.Value, hdnGroupID.Value);
if (ddlScheduleType.SelectedIndex == 0)
{
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("00:00:01");
}
}
}
else
{
foreach (CronTrigger trigger in triggers.OfType<CronTrigger>())
{
trigger.CronExpressionString = txtCron.Text;
}
}
}
(我知道我对foreach循环所做的事情是愚蠢的,但是只有一个触发器有一个作业,这是我在这里收到的一段代码。)
问题是,页面回发正常,新值仍保留在文本框中。但是,当我再次查看工作时,根本没有任何变化。我究竟做错了什么?由于根本没有错误,这很令人困惑。
请注意,隐藏字段也已正确设置。
由于
当我调试程序时,ButtonSubmit_Click事件肯定正在运行,程序会经历这个过程。
答案 0 :(得分:1)
通过调用sched.GetTriggersOfJob
和sched.GetJobDetail
获得的实例是真实触发器/作业的克隆。
在重新安排更改的触发器或使用更改的触发器添加更改的作业之前,调度程序不会使用对这些对象的更改。
如果您只更改了触发器,我认为您应该可以使用RescheduleJob,并且可以remove原始触发器和add新触发器。