在创建时修改 SharePoint 主机 Web 列表

在主机 Web 中创建新的列表时,您可以使用 ListAdded 远程事件接收器修改该列表。 例如,您可以启用版本控制,将内容类型添加到列表中,或者执行客户端对象模型 (CSOM) 实施的任何其他更改。

将列表添加到主机 Web 时,您需以编程方式附加事件接收器。 Core.EventReceiversBasedModifications 示例演示如何使用提供程序托管的外接程序执行此操作。 安装加载项时,将发生 AppInstalled 事件,您可以使用此事件附加 ListAdded 事件。

准备工作

首先,请从 GitHub 上的 Office 365 开发人员模式和做法项目中下载 Core.EventReceiversBasedModifications 示例外接程序。

注意

本文中的代码按原样提供,不提供任何明示或暗示的担保,包括对特定用途适用性、适销性或不侵权的默示担保。

附加 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 时的功能。

注意

建议在一个干净的开发人员网站中测试此示例。

另请参阅