У меня есть список, в котором у меня есть обработчик ItemUpdated.
Когда я редактирую с использованием представления таблицы и изменяю каждый элемент, событие ItemUpdated, очевидно, будет выполняться для каждого отдельного элемента.
В моем событии ItemUpdated я хочу, чтобы он проверил, запланировано ли задание таймера.Если есть, то продлите расписание SPOneTimeSchedule этого задания, чтобы задержать его на 5 секунд.Если нет, то создайте задание таймера и запланируйте его на 5 секунд.
Я попытался выяснить, существует ли определение задания в обработчике, и если оно существует, тогда расширьтеграфик на 5 секунд.Если его не существует, создайте определение задания для запуска в течение нескольких минут.
MyTimerJob rollupJob = null;
foreach (SPJobDefinition job in web.Site.WebApplication.JobDefinitions)
{
if (job.Name == Constants.JOB_ROLLUP_NAME)
{
rollupJob = (MyTimerJob)job;
}
}
if (rollupJob == null)
{
rollupJob = new MyTimerJob(Constants.JOB_ROLLUP_NAME, web.Site.WebApplication);
}
SPOneTimeSchedule schedule = new SPOneTimeSchedule(DateTime.Now.AddSeconds(5));
rollupJob.Schedule = schedule;
rollupJob.Update();
Когда я пробую это на сервере, я получаю много ошибок
"Возник конфликт обновления, и вы должны повторить это действие. Объект MyTimerJob Name = MyTimerJobName Parent = SPWebApplication Name = SharePoint -80 обновляется NT AUTHORITY \ NETWORK SERVICE в процессе w3wp
Я думаюзадание, вероятно, запускается в первый раз и после его запуска поступают другие события ItemUpdated и находят существующее определение задания. Затем оно пытается обновить это определение, даже если оно используется в настоящее время. Должен ли я создать новое имя определения заданиячтобы он не наступил на первое? Или увеличил время до минуты?