Привязка обработчика события с помощью объектной модели SharePoint
Дата последнего изменения: 8 апреля 2010 г.
Применимо к: SharePoint Foundation 2010
Обработчик события SharePoint Foundation можно привязать с помощью базовых классов приемника событий в объектной модели SharePoint Foundation. В этом примере кода событие ItemAdded, созданное в разделе Создание обработчика событий, привязывается к экземпляру SPSite.
Примечание |
---|
В Microsoft Visual Studio 2010 представлены типы проекта, которые выполняют основную работу автоматически при создании событий SharePoint. Тем не менее, следующие примеры кода представлены для демонстрации механизмов создания и привязки событий. |
Создание проекта с кодом для привязки
Откройте Microsoft Visual Studio и создайте базовый проект консольного приложения и назовите его BindItemEvents. Затем создайте один класс с именем Program.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace BindItemEvents
{
class Program
{
static void Main(string[] args)
Затем требуется создать ссылки на сайт и веб-объекты. Учтите, что ссылки на сайт и веб-объекты задаются с помощью инструкции using. Это происходит потому, что он автоматически вызывает метод Dispose() для объектов после исполнения блока кода. Также можно создать экземпляры сайта и веб-объектов в блоке кода. Однако при этом следует убедиться, что после работы с этими объектами они были удалены.
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
Теперь требуется создать список на веб-сайте, для которого создана ссылка — это библиотека документов с именем "Shared Documents". А затем следует привязать определение приемника событий.
{
SPList list = web.Lists["Shared Documents"];
SPEventReceiverDefinition def = list.EventReceivers.Add();
Обратите внимание на то, что простого добавления приемника событий EventReceivers недостаточно. Для привязки также необходимо задать значения свойств, чтобы определить приемник событий:
def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
def.Class = "ERDefinition.ItemEvents";
def.Name = "ItemAdded Event";
def.Type = SPEventReceiverType.ItemAdded;
def.SequenceNumber = 1000;
def.Synchronization = SPEventReceiverSynchronization.Synchronous;
def.Update();
В приведенном выше примере кода указаны самые часто используемые свойства. Полный список доступных свойств (и документация по всем свойствам) см. в статье SPEventReceiverDefinition. Однако самое важное свойство, необходимое для всех классов, — это свойство Type (в этом случае это ItemAdded). Кроме того, необходимо указать сборку с помощью свойства Assembly и класс, в этом случае — ERDefinition.ItemEvents, который уже должен быть создан (как описано в разделе Создание обработчика событий).
Учтите, что указывается строгое имя сборки. (Строго имя сборки можно получить, если найти глобальный кэш сборок (GAC) и использовать свойства сборки). Кроме того, обратите внимание на то, что в строгом имени сборки учитывается регистр. Используйте свойство SequenceNumber для указания порядка, в котором инициируются события, если действие вызывает несколько событий. Свойство Synchronization позволяет указывать, является ли событие синхронным или асинхронным. Наконец, необходимо выполнить метод Update().
Листинг программы
Далее представлен полный листинг кода для выполнения описанных выше действий.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace BindItemEvents
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Shared Documents"];
SPEventReceiverDefinition def = list.EventReceivers.Add();
def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
def.Class = "ERDefinition.ItemEvents";
def.Name = "ItemAdded Event";
def.Type = SPEventReceiverType.ItemAdded;
def.SequenceNumber = 1000;
def.Synchronization = SPEventReceiverSynchronization.Synchronous;
def.Update();
}
}
}
}
}
См. также
Задачи
Создание компонента обработчика событий
Концепции
Привязка обработчика событий SharePoint Foundation
Привязка обработчиков событий с использованием компонентов SharePoint