Изменение списков ведущих веб-сайтов SharePoint во время создания
При создании списка на хост-сайте можно использовать удаленный приемник событий ListAdded для изменения этого списка. Например, можно включить управление версиями, добавить тип контента в список или внести любые другие изменения, реализованные клиентской объектной моделью (CSOM).
При добавлении списка на хост-сайт необходимо программно подключить приемник событий. В примере Core.EventReceiversBasedModifications показано, как использовать для этого надстройку, размещенную у поставщика. При установке надстройки возникает событие AppInstalled , и это событие используется для присоединения события ListAdded .
Подготовка к работе
Чтобы приступить к работе, скачайте пример надстройки Core.EventReceiversBasedModifications из проекта шаблоны и методики разработчика Office 365 на сайте GitHub.
Примечание.
Код, приведенный в этой статье, предоставляется "как есть" без какой-либо явной или подразумеваемой гарантии, включая подразумеваемые гарантии пригодности для какой-либо цели, для продажи или гарантии отсутствия нарушения прав иных правообладателей.
Присоединение события ListAdded
Чтобы реализовать обработчики событий для надстройки, отобразите свойства проекта SharePoint и задайте для параметра Обработка установленных надстроек и Обработка удаления надстройки значение True.
В следующем примере кода показано, как изменяется приемник событий AppInstalled для присоединения приемника событий ListAdded .
bool rerExists = false;
cc.Load(cc.Web.EventReceivers);
cc.ExecuteQuery();
foreach (var rer in cc.Web.EventReceivers)
{
if (rer.ReceiverName == RECEIVER_NAME)
{
rerExists = true;
}
}
if (!rerExists)
{
EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
receiver.EventType = EventReceiverType.ListAdded;
// Get WCF URL where this message was handled.
OperationContext op = OperationContext.Current;
Message msg = op.RequestContext.RequestMessage;
receiver.ReceiverUrl = msg.Headers.To.ToString();
receiver.ReceiverName = RECEIVER_NAME;
receiver.Synchronization = EventReceiverSynchronization.Synchronous;
cc.Web.EventReceivers.Add(receiver);
cc.ExecuteQuery();
}
Настройка добавленных списков
При срабатывании обработчика событий ListAdded выполняется следующий код.
private void HandleListAdded(SPRemoteEventProperties properties)
{
using (ClientContext cc = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
{
if (cc != null)
{
try
{
if (properties.ListEventProperties.TemplateId == (int)ListTemplateType.DocumentLibrary)
{
//set versioning
cc.Web.GetListByTitle(properties.ListEventProperties.ListTitle).UpdateListVersioning(true, true);
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
}
}
}
Удаление приемника событий
При удалении надстройки также следует удалить приемник событий. Чтобы выполнить эту работу во время отладки, перейдите к надстройкам в библиотеке тестирования и используйте параметр удалить в надстройке. Это активирует событие AppUninstalling с соответствующими разрешениями для удаления созданного удаленного обработчика событий.
Если просто закрыть браузер или удалить надстройку из содержимого сайта, получатель событий никогда не срабатывает или приемник событий AppUninstalling запускается с недостаточными разрешениями для удаления приемника событий ListAdded . Это связано с тем, что надстройки развертываются по-разному, когда они загружаются неопубликованно, что и делает Visual Studio при нажатии клавиши F5.
Примечание.
Рекомендуется протестировать этот пример на чистом сайте разработчика.