SPItemEventProperties и ItemUpdating, или Очередной привет от Sharepoint

 
У списка и типа содержимого есть различные Receivers — ItemUpdating, ItemAdding и т.д.
Как известно из SDK, чтобы перехватывать эти события, необходимо создать свой класс и переопределить в нем нужные методы.
Вот так выглядет ItemUpdating:
public override void ItemUpdating(SPItemEventProperties properties)
{
    properties.Cancel = false;
}
Как подсказывает тот же SDK, переменная properties содержит 2 важных, особенно для ItemUpdating, свойства — AfterProperties и BeforeProperties.
 
Но самое интересное, что эти 2 свойства работаю совсем не так, как ожидается.
Для AfterProperties справедливо следующее:
1. properties.AfterProperties.ChangedProperties.Count всегда равно 0
2. AfterProperties содержит в себе все поля элемента, вне зависимости от того, менялись они или нет. Доступ к ним производится через операцию взятие индекса ([]), н-р properties.AfterProperties["Title"]
 
Для BeforeProperties справделиво только одно — оно всегда пустое. Не равно null, а просто пустое. Т.е. не содержит никаких полей.
 
В связи с этой особенностью, если есть необходимость сравнивать значения до изменения и после, нужно сравнивать properties.AfterProperties["имя_поля"] (это значение после изменения) и properties.ListItem["имя_поля"] (это будет значение до изменения)
 
PS Данное замечание спаведливо для типов содержимого списоков и самих списков. В библиотеке документов и типов содержимого основанных на документах дело обстоит иначе.
PS2 Тоже интересная ссылка по теме (ENG) http://www.sharepoint-tips.com/2006/08/bad-news-synchronous-list-events-bug.html
Реклама

One Response to SPItemEventProperties и ItemUpdating, или Очередной привет от Sharepoint

  1. Gennady says:

    Спасибо!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: