Обработчики событий элемента списка SharePoint - PullRequest
2 голосов
/ 20 июля 2011

У меня есть следующий сценарий в моем проекте SharePoint 2007.У меня есть определение задания таймера, которое каждые 30 минут обновляет список SharePoint из таблицы базы данных SQL.

Я также добавил обработчик событий элемента для своего списка, поэтому он не позволяет пользователям добавлять новые элементы в список из SharePoint.пользовательский интерфейс.Другими словами, новые элементы списка могут быть добавлены только в определении задания таймера через объектную модель SharePoint, и это не должно позволять добавлять новый элемент из пользовательского интерфейса.

Моя проблема в том, что обработчик событий выполняется, даже когда он добавляетновый элемент из определения задания таймера, могу ли я как-то проверить в обработчике событий, как был добавлен элемент (через объектную модель или через пользовательский интерфейс).

Большое спасибо, Грайр

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Пара вариантов для вас.

Пометить вставки из вашего задания таймера

  • Установите флажок в вашем списке, любой столбец, такой как "AddedFromTimerJob" (можно сделать скрытым из пользовательского интерфейса)) или добавьте что-нибудь в SPListItem.Properties
  • . В получателе событий проверьте флаг / свойство - если его присутствует, пропустите его, если нет, то отклоните.

или Отключить приемник событий для потока, выполнить вставку, повторно включить приемник событий.

1 голос
/ 20 июля 2011

Прежде всего, почему бы не установить разрешения, которые не позволяют добавлять новые элементы, вместо того, чтобы предоставлять пользователю ошибку через eventreceiver после того, как он пытается добавить элемент в список?

О проблеме - возможно временно отключить запуск событий. Например, когда выполняется задание таймера, отключите запуск событий, пока не закончите. Однако это может не подходить для всех ситуаций, так как отключит ВСЕ получатели событий для списка. Но это работает, если у вас нет никаких приемников событий, которые что-то делают с добавленными данными в событиях ItemAdding / ItemAdded.

Код для временного отключения событий можно найти здесь: Отключить запуск событий элемента Sharepoint при обновлении элемента (это относится к любому событию, а не только к обновлению)

0 голосов
/ 05 января 2012

Вы можете проверить учетную запись пользователя, который выполняет операцию добавления элемента.

Если System.Threading.Thread.CurrentPrincipal.Identity - это учетная запись, которая выполняет задание таймера, установите SPEventPropertiesBase.Cancel = false;

...