- SharePoint 教程
- SharePoint - 主页
- SharePoint - 概述
- SharePoint - 类型
- SharePoint - 功能
- SharePoint - 设置环境
- SharePoint - 创建网站集
- SharePoint - API
- SharePoint - 管理中心
- SharePoint - 应用程序模型
- SharePoint - 集成选项
- SharePoint - 开发工具
- SharePoint - 列表功能
- 附加列表功能
- SharePoint - 自定义列表
- SharePoint - 库
- SharePoint - Web 部件
- 网站栏目和内容类型
- SharePoint - 数据
- SharePoint - 服务器对象模型
- SharePoint - 客户端对象模型
- SharePoint - REST API
- SharePoint - 功能和元素
- SharePoint - 功能\事件接收器
- SharePoint - Azure 平台
- SharePoint - 打包和部署
- SharePoint - 沙盒解决方案
- SharePoint - 应用程序
- SharePoint 有用资源
- SharePoint - 快速指南
- SharePoint - 资源
- SharePoint - 讨论
SharePoint - 功能\事件接收器
在本章中,我们将学习添加代码句柄。代码句柄是激活或停用功能时引发的事件。换句话说,我们将检查特征接收器。
我们在上一章中创建的 Visual Studio 项目有一个功能,当它被激活时,它会配置我们的联系人列表、站点页面以及指向站点页面的链接。
但是,当该功能停用时,SharePoint 仅删除链接,SitePage 和联系人列表仍然保留。
如果我们愿意,我们可以在功能停用时编写代码来删除列表和页面。在本章中,我们将学习如何在功能停用时删除内容和元素。
为了处理功能的事件,我们需要一个功能接收器。
步骤 1 - 要获取功能接收器,请右键单击解决方案资源管理器中的功能,然后选择添加事件接收器。
using System; using System.Runtime.InteropServices; using System.Security.Permissions; using Microsoft.SharePoint; namespace FeaturesAndElements.Features.Sample { /// <summary> /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade. /// </summary> /// <remarks> /// The GUID attached to this class may be used during packaging and should not be modified. /// </remarks> [Guid("e873932c-d514-46f9-9d17-320bd3fbcb86")] public class SampleEventReceiver : SPFeatureReceiver { // Uncomment the method below to handle the event raised after a feature has been activated. //public override void FeatureActivated(SPFeatureReceiverProperties properties)//{ // } // Uncomment the method below to handle the event raised before a feature is deactivated. //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)// { // } // Uncomment the method below to handle the event raised after a feature has been installed. //public override void FeatureInstalled(SPFeatureReceiverProperties properties)// { // } // Uncomment the method below to handle the event raised before a feature is uninstalled. //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)// { // } // Uncomment the method below to handle the event raised when a feature is upgrading. //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters) // { // } } }
你可以看到我们得到的是一个继承自SPFeatureReceiver的类。
在 SharePoint 中,您可以处理不同类型的事件的不同类。例如,列表上的事件、列表项上的事件、网站上的事件。您可以创建一个派生自特定事件接收器的类,然后可以重写该类内部的方法来处理事件。
功能的事件在其被使用时使用 -
- 活性
- 已停用
- 已安装
- 已卸载
- 升级中
接下来,您需要将该类附加为特定项目的事件处理程序。例如,如果有一个处理列表事件的事件处理程序,则需要将该类附加到列表。
因此,我们将处理两个特征 -
当该功能被激活并且
当它被停用时。
步骤2 - 我们将实现FeatureActivated和FeatureDeactivated方法,如下所示 -
using System; using System.Runtime.InteropServices; using System.Security.Permissions; using Microsoft.SharePoint; namespace FeaturesAndElements.Features.Sample { /// <summary> /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade. /// </summary> /// <remarks> /// The GUID attached to this class may be used during packaging and should not be modified. /// </remarks> [Guid("e873932c-d514-46f9-9d17-320bd3fbcb86")] public class SampleEventReceiver : SPFeatureReceiver { private const string listName = "Announcements"; public override void FeatureActivated(SPFeatureReceiverProperties properties) { var web = properties.Feature.Parent as SPWeb; if (web == null) return; var list = web.Lists.TryGetList(listName); if (list != null) return; var listId = web.Lists.Add(listName, string.Empty, SPListTemplateType.Announcements); list = web.Lists[listId]; list.OnQuickLaunch = true; list.Update(); } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { var web = properties.Feature.Parent as SPWeb; if (web == null) return; var list = web.Lists.TryGetList(listName); if (list == null) return; if (list.ItemCount == 0) { list.Delete(); } } } }
注意-
激活该功能后,我们将创建一个公告列表。
当该功能停用时,我们将检查公告列表是否为空,如果是,我们将删除它。
步骤 3 - 现在右键单击项目并选择部署。您将看到以下部署冲突警告。
Visual Studio 告诉我们,我们正在尝试创建一个名为“联系人”的列表,但网站中已经有一个名为“联系人”的列表。它询问我们是否要覆盖现有列表,在本例中单击“解决”。
步骤 4 - 返回 SharePoint,然后刷新您的网站并转到网站操作 → 网站设置 → 管理网站功能 → 示例功能。
您可以看到左侧窗格中没有公告列表。
步骤 5 - 让我们激活示例功能,您将看到公告列表,但现在它是空的。
注意- 如果您停用示例功能,您会注意到公告列表消失。
步骤 6 - 让我们重新激活该功能。转到公告,然后添加新公告。我们将调用此测试,然后单击“保存”。
您将在公告下看到测试文件。
现在,当您停用公告时,您将看到公告列表保留下来,因为它不为空。