2012-04-18 4 views
1

На моем сайте (SP2010) Я создал триггер, который добавляет рабочий элемент в очередь через метод SPSite.AddWorkItem. Кажется, что это хорошо, поскольку таблица ScheduledWorkItems заполняется правильными данными. Время устанавливается в формате UTC и является текущим или прошедшим. Идентификаторы также настроены в порядке. Таким образом, таблица имеет правильные данные.Рабочий элемент Таймер Работа не срабатывает

Однако изготовленный на заказ обработчик рабочего элемента, полученный из SPWorkItemJobDefinition, с правильным идентификатором, никогда не запускается. Пользователь AppPool, который добавляет рабочие элементы, также является администратором фермы. В этом журнале событий нет записей журнала событий или файлов sharepoint, поэтому он даже не запускается.

Дополнительные условия для успешного развертывания и запуска задания на работу?

+0

ли задание рабочего места запланировано? – Stefan

+0

Должен ли он отображаться в Центре администрирования? Я смотрел в разделе «Запланированные задания», и это пусто. Кстати, в разделе «Определения заданий таймера» это, кстати, тоже не упоминается. –

+0

Подождите, запланированные задания не пусты, но это определение не указано. –

ответ

1

Вам необходимо создать экземпляр работающего задания для определения задания рабочего элемента. Рабочее задание назначается как любая другая работа. См. SPWorkItemJobDefinition Class:

Служит базовым классом для определения определений заданий таймера рабочих мест. Этот класс работает с заданием таймера (SPTimerService) для обработки рабочих элементов (экземпляры SPWorkItem). [...] Этот класс тесно связан с классами SPWorkItem и SPWorkItemCollection. Вы должны использовать класс коллекции, к которому имеет доступ объект SPSite, для добавления рабочих элементов в очередь обработки. Когда задание таймера работы-элемент выполняет, [...]

Я предлагаю создать приемник событий и функция создания экземпляра задания в функции активации «событие»:

SPWebApplication webApp = // ..; 
SomeWorkItemJob = new SomeWorkItemJob("TheName", webApp); 
job.Schedule = new SPMinuteSchedule { Interval = 2}; // every two minutes 
job.Update(false);