Поделиться через


Изменение списков ведущих веб-сайтов 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.

Примечание.

Рекомендуется протестировать этот пример на чистом сайте разработчика.

См. также