Исследование Event Receiver SharePoint 2010. Часть первая
Давно не писал постов, был занят проектами.
А данной серии постов я хочу рассказать об Event Receiver (Обработчики событий) для элементов списка и их интересные возможности.
Мое первое впечатление от создания всяческих ресиверов для элементов списка, было небольшим шоком с точки зрения работы с данными.
Хочу привести небольшую таблицу свойств обработчиков.
* Источник
Сегодня я хочу описать один небольшой сценарий привязки обработчиков на конкретный список или библиотеку.
Если у вас Feature типа Scope="Site", то при создании обработчика он будет постоянно срабатывать вне зависимости привязали вы его к конкретному списку или шаблону списка.
На деле это особо не заметно, а вот при очень высокой тенденции работы с вашим сайтом это сразу же будет съедать какое-то производительности. Если у вас на сайте стоит показ панель разработчика это станет очевидно.
После создания и отладки обработчика, я проводил долгую отладку кода, при этом меня сразу насторожило, что он постоянно срабатывает и валится и только когда он начинает работать из конкретного списка и с конкретным элементом работает исправно. Радостно что с опытом пишешь более работоспособный код и сразу его адаптируешь, а вот что насторожило что он отработывает постоянно и на всех списках при этом я привезал его в конкретному списку.
И после долгого серфинга по интернетам, для меня стало очевидно, что в контексте Scope="Site", обработчик всегда работает на весь сайт и его никак не привезать к конкретному списку, только если в самом коде не проверять с какого списка идет обращение (не Best Practise).
В итоге как я решил эту проблему просто и без всяческих танцев:
Я создал дополнительную feature типа Scope="Web" и в моем обработчике изменил строчку на
И теперь я точно уверен, что мой обработчик всегда работает только в рамках моего списка.
При разработки features для MS SharePoint 2010, я всегда использую Scope="Site".
А данной серии постов я хочу рассказать об Event Receiver (Обработчики событий) для элементов списка и их интересные возможности.
Мое первое впечатление от создания всяческих ресиверов для элементов списка, было небольшим шоком с точки зрения работы с данными.
Хочу привести небольшую таблицу свойств обработчиков.
Список | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | Пусто | Новые значения | null |
ItemAdded | Пусто | Новые значения | Новые значения |
ItemUpdating | Пусто | Новые значения | Старые значения |
ItemUpdated | Пусто | Новые значения | Новые значения |
ItemDeleting | Пусто | Пусто | Старые значения |
ItemDeleted | Пусто | Пусто | null |
Библиотека | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | Пусто | Пусто | null |
ItemAdded | Пусто | Пусто | Новые значения |
ItemUpdating | Старые значения | Новые значения | Старые значения |
ItemUpdated | Старые значения | Новые значения | Новые значения |
ItemDeleting | Пусто | Пусто | Старые значения |
ItemDeleted | Пусто | Пусто | null |
* Источник
Сегодня я хочу описать один небольшой сценарий привязки обработчиков на конкретный список или библиотеку.
Если у вас Feature типа Scope="Site", то при создании обработчика он будет постоянно срабатывать вне зависимости привязали вы его к конкретному списку или шаблону списка.
На деле это особо не заметно, а вот при очень высокой тенденции работы с вашим сайтом это сразу же будет съедать какое-то производительности. Если у вас на сайте стоит показ панель разработчика это станет очевидно.
После создания и отладки обработчика, я проводил долгую отладку кода, при этом меня сразу насторожило, что он постоянно срабатывает и валится и только когда он начинает работать из конкретного списка и с конкретным элементом работает исправно. Радостно что с опытом пишешь более работоспособный код и сразу его адаптируешь, а вот что насторожило что он отработывает постоянно и на всех списках при этом я привезал его в конкретному списку.
И после долгого серфинга по интернетам, для меня стало очевидно, что в контексте Scope="Site", обработчик всегда работает на весь сайт и его никак не привезать к конкретному списку, только если в самом коде не проверять с какого списка идет обращение (не Best Practise).
В итоге как я решил эту проблему просто и без всяческих танцев:
Я создал дополнительную feature типа Scope="Web" и в моем обработчике изменил строчку на
<Receivers ListUrl="{URL списка}" Scope="Web">
И теперь я точно уверен, что мой обработчик всегда работает только в рамках моего списка.
При разработки features для MS SharePoint 2010, я всегда использую Scope="Site".
Комментарии
Отправить комментарий