У меня есть список, на котором у меня есть обработчик ItemUpdated.Планирование задания таймера на входе DataSheet в SharePoint
Когда я редактирую, используя представление таблицы данных и изменяя каждый элемент, событие 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 Родитель = SPWebApplication Name = SharePoint -80 обновляется службой NT AUTHORITY \ NETWORK SERVICE в процессе w3wp
Я думаю, что работа, вероятно, запущена в первый раз и когда-то запущена, появляются другие события ItemUpdated и поиск существующего задания Затем он пытается обновить это определение, даже если оно используется в настоящий момент. Должен ли я создать новый Job De чтобы оно не начиналось сверху первого? Или поднять время на минуту?
Да, я знаю, что события с обновлением и добавлением являются асинхронными - мне нужно использовать эти события, однако, поскольку я Меня интересуют изменения только после того, как они сделаны – Graeme