📅  最后修改于: 2020-11-19 08:18:44             🧑  作者: Mango
在本章中,我们将学习添加代码handle 。代码句柄是激活或停用功能时引发的事件。换句话说,我们将检查功能接收器。
我们在上一章中创建的Visual Studio项目具有一个功能,当它被激活时,它提供了“联系人”列表,“ SitePage”以及指向“ SitePage”的链接。
但是,禁用功能后,SharePoint仅删除链接,SitePage和“联系人”列表仍保留。
如果需要,我们可以在停用功能时编写代码以删除列表和页面。在本章中,我们将学习禁用功能时如何删除内容和元素。
要处理功能事件,我们需要功能接收器。
步骤1-要获取功能接收器,请在解决方案资源管理器中右键单击功能,然后选择添加事件接收器。
using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
namespace FeaturesAndElements.Features.Sample {
///
/// This class handles events raised during feature activation, deactivation,
installation, uninstallation, and upgrade.
///
///
/// The GUID attached to this class may be used during packaging and should not be modified.
///
[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 parameters) // {
//
}
}
}
您可以看到我们得到的是一个继承自SPFeatureReceiver的类。
在SharePoint中,可以处理的事件种类不同。例如,列表上的事件,列表项上的事件,网站上的事件。您可以创建派生自特定事件接收器的类,然后可以覆盖该类内部的方法以处理事件。
功能事件在以下情况下使用-
接下来,您需要将该类附加为特定项目的事件处理程序。例如,如果有一个处理列表事件的事件处理程序,则需要将该类附加到列表。
因此,我们将处理两个功能-
激活该功能后,
停用时。
步骤2-我们将实现FeatureActivated和FeatureDeactivated方法,如下所示-
using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
namespace FeaturesAndElements.Features.Sample {
///
/// This class handles events raised during feature activation, deactivation,
installation, uninstallation, and upgrade.
///
///
/// The GUID attached to this class may be used during packaging and should
not be modified.
///
[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告诉我们,我们正在尝试创建一个名为“联系人”的列表,但是站点中已经有一个名为“联系人”的列表。它询问我们是否要覆盖现有列表,在这种情况下,单击Resolve 。
步骤4-返回SharePoint,然后刷新您的网站,然后转到“网站操作”→“网站设置”→“管理网站功能”→“示例功能” 。
您可以看到在左窗格中没有公告列表。
步骤5-让我们激活示例功能,您将看到“公告”列表,但现在为空。
注意-如果您停用示例功能,则您会注意到通知列表消失了。
步骤6-让我们重新激活功能。转到公告,然后添加新的公告。我们将调用此测试,然后单击“保存”。
您将在公告下看到测试文件。
现在,当您取消激活公告时,您会看到“公告”列表保持不变,因为它不为空。