使用 Features 扩展 SharePoint Server 2007






4.72/5 (32投票s)
创建和部署一个事件处理程序功能,该功能可以在网站或站点、站点集合、Web 应用程序或场级别激活
概述
适用范围
- Microsoft® ASP.NET 2.0
- Microsoft® Visual Studio® .NET 2005
- Microsoft® Windows SharePoint Services 3.0
- Microsoft® SharePoint Portal Server 2007
摘要
Microsoft 提供了扩展 SharePoint Portal Server 2007 开箱即用功能的方法,例如功能、SharePoint Designer 2007、Windows Workflow Foundation 等。功能在开发扩展功能(如页面模板、列表、内容类型、Web 部件、工作流和事件)方面为新的和现有的 SharePoint 2007 站点提供了灵活性。
目录
- 引言
- 功能的组件
- 事件处理程序功能
- 同步和异步事件
- SPItemEventReceiver
- SPListEventReceiver
- SPWebEventReceiver
- 构建解决方案
- 打包解决方案
- 部署解决方案
- 激活解决方案
- 测试解决方案
- 卸载解决方案
- 测试平台
- 参考文献
- 结论
引言
功能框架已扩展,允许开发人员创建自定义功能。功能可以使用 SharePoint Portal Server 2007 的新部署方式进行部署,即解决方案部署。解决方案是开发人员创建的自定义包(例如 WSP 文件)或可分发的 CAB 文件,并由 SharePoint 管理员进行部署。管理员可以将功能部署到单个站点或所有 Web 前端服务器。
在本文中,我将介绍创建和部署事件处理程序功能的过程,该功能可以在网站或站点、站点集合、Web 应用程序或场级别激活。
功能的组件
一个功能可以包含任意数量的文件,但必须包含一个 Feature.xml 文件。Feature.xml 文件,或称为功能清单,是功能的驱动程序,也是 SharePoint 在调用功能时首先查找的文件。
功能组织在位于 12 个目录下的 Features 目录中的文件夹中;SharePoint Server 2007 将所有系统文件放在此路径:%SystemDrive%\Program Files\Common Files\Microsoft Shared\web server extensions\12.
除了 Feature.xml 文件外,功能还可以包含子文件夹和支持文件,例如包含事件处理程序引用、作为功能一部分部署的 ASPX 页面、ASCX 文件以及 DLL 和 RESX 文件的元素文件。
事件处理程序功能
SharePoint 事件处理程序是一种程序,可增强和添加 SharePoint 列表、列表项或网站的整体功能。事件功能可以使用功能部署到新的或现有的网站。SharePoint 对象模型提供了几个事件类,可以将事件处理程序定向到列表、列表项或网站。
同步和异步事件
除了异步事件,SharePoint Server 2007 还引入了同步事件,即在操作发生之前激活的事件。同步事件可以在删除项目、文档库或站点之前捕获它们。同步事件消除了用户从文档库中删除项目的能力,或者事件限制用户从文档库中删除列。
SharePoint 对象模型公开了几个继承自 Microsoft.SharePoint 程序集的事件类。主要有三个事件类
- SPItemEventReceiver
- SPListEventReceiver
- SPWebEventReceiver
每个类都包含同步和异步方法,用于处理项目、列表或网站级别的操作。在本文中,我将演示如何挂接 ItemDeleting、FieldDeleting 或 SiteDeleting 事件,以阻止用户从文档库中删除项目或从文档库中删除列。
SPItemEventReceiver
通过重写 SPItemEventReceiver 类的成员,开发人员可以阻止用户删除或更新列表中的项目。下面将介绍一些重要的 SPItemEventReceiver 类成员
| 事件 | 事件类型 | 描述 | 
| ItemAdded | 异步 | 在列表添加项目后 | 
| ItemAdding | Synchronous | 在列表添加项目前 | 
| ItemAttachmentAdded | 异步 | 在列表项添加附件后 | 
| ItemAttachmentAdding | Synchronous | 在列表项添加附件前 | 
| ItemAttachmentDeleted | 异步 | 在列表项删除附件后 | 
| ItemAttachmentDeleting | Synchronous | 在列表项删除附件前 | 
| ItemCheckedOut | 异步 | 在列表项签出后 | 
| ItemCheckingOut | Synchronous | 在列表项签出前 | 
| ItemCheckedIn | 异步 | 在列表项签入后 | 
| ItemCheckingIn | Synchronous | 在列表项签入前 | 
| ItemDeleted | 异步 | 在列表删除项目后 | 
| ItemDeleting | Synchronous | 在列表删除项目前 | 
| ItemUpdated | 异步 | 在列表更新项目后 | 
| ItemUpdating | Synchronous | 在列表更新项目前 | 
在演示中,我将使用一个同步事件,即 ItemDeleting,它阻止用户删除列表(文档库)中的项目。您可以通过在功能架构文件(例如 ItemEventReceiver.xml)中指定 ListTemplateId 属性来调用此事件,适用于任何类型的列表或文档库。
请参阅下面的 ItemEventReceiver.cs 和 ItemEventReceiver.xml 的屏幕截图,了解如何定义 ListTemplateId 和 Assembly。
 
 
 
 
下表显示了默认列表模板的整数 ID,您可以在定义事件处理程序模板 ID 时使用这些 ID。
| 列表模板 ID | 列表模板 | 
| 100 | 通用列表 | 
| 101 | 文档库 | 
| 102 | 调查 | 
| 103 | 链接列表 | 
| 104 | 公告列表 | 
| 105 | 联系人列表 | 
| 106 | 事件列表 | 
| 107 | 任务列表 | 
| 108 | 讨论区 | 
| 109 | 图片库 | 
| 110 | 数据源 | 
| 111 | 站点模板库 | 
| 113 | Web 部件库 | 
| 114 | 列表模板库 | 
| 115 | XML 表单库 | 
| 120 | 列表自定义网格 | 
| 200 | 会议系列列表 | 
| 201 | 会议议程列表 | 
| 202 | 会议参与者列表 | 
| 204 | 会议决定列表 | 
| 207 | 会议目标列表 | 
| 210 | 会议文本框 | 
| 211 | 会议携带物品列表 | 
| 212 | 会议工作区页面列表 | 
| 300 | 门户站点列表 | 
| 1100 | 问题跟踪 | 
| 2002 | 个人文档库 | 
| 2003 | 私人文档库 | 
SPListEventReceiver
通过重写 SPListEventReceiver 类的成员,开发人员可以阻止用户从网站删除或更新列表。下面将介绍一些重要的 SPListEventReceiver 类成员。
| 事件 | 事件类型 | 描述 | 
| FieldAdded | 异步 | 在列表中添加文档后 (文档库) | 
| FieldAdding | Synchronous | 在列表中添加文档前 (文档库) | 
| FieldDeleted | 异步 | 从列表中删除文档后 (文档库) | 
| FieldDeleting | Synchronous | 从列表中删除文档前 (文档库) | 
| FieldUpdated | 异步 | 在列表中更新文档后 (文档库) | 
| FieldUpdating | Synchronous | 在列表中更新文档前 (文档库) | 
在演示中,我将使用一个同步事件,即 FieldDeleting,它阻止用户从列表(文档库)中删除文档。在这种情况下,我将在 ListEventReceiver.xml 文件中再次指定文档库的 ListTemplateId = 101。
SPWebEventReceiver
通过重写 SPWebEventReceiver 类的成员,开发人员可以阻止用户从网站集合中删除网站,甚至完全删除网站集合。下面将介绍一些重要的 SPWebEventReceiver 类成员。
| 事件 | 事件类型 | 描述 | 
| SiteDeleted | 异步 | 在网站集合删除后 | 
| SiteDeleting | Synchronous | 在删除网站集合之前 | 
| WebDeleted | 异步 | 在网站删除后 | 
| WebDeleting | Synchronous | 在删除网站之前 | 
在演示中,我将使用一个同步事件,即 WebDeleting,它阻止用户从网站集合中删除网站。
构建解决方案
我们需要 Visual Studio 2005 来创建解决方案,以提供所需的功能。
下面将介绍创建 SharePoint Server 应用程序事件处理程序所需的步骤。
- 在 Visual Studio .NET 2005 中创建一个 C#.NET 类库解决方案,并将其命名为 EventHand<code>lerFeature
- 在“项目”菜单上,选择“添加引用”以打开“引用”对话框。
- 向下滚动到“Windows SharePoint Services”并单击引用 Microsoft.SharePoint.dll。
- 在项目解决方案中创建一个新文件夹,并将其命名为 Features。
- 在 Features 文件夹中创建三个文件夹,并将其命名为 ItemEventReceiver、ListEventReceiver 和 WebEventReceiver 文件夹。
- 为 ItemEventReceiver 文件夹创建 Feature.XML 和功能架构文件。
Feature.XML 文件属性
下面将介绍 Feature 标记的一些属性。
| Attribute | 值 | 描述 | 
| ID | GUID | 包含功能的全局唯一标识符(GUID)。 | 
| 标题 | 文本 | 返回功能的标题。最多 255 个字符。 | 
| 范围 | Farm/WebApplication/Site/Web  | 可以包含以下值之一: Farm (场)、WebApplication (Web 应用程序)、Site (站点集合) 和Web (网站)。 | 
| 隐藏 | True/False  | 此属性默认等于 FALSE 。 | 
| AlwaysForceInstall | True/False  | 可选布尔值。如果功能在安装过程中被强制安装,即使功能已安装,则为 TRUE 。例如,如果设置为TRUE,则用户尝试使用 scanforfeatures 或 installfeature 命令行操作安装功能(即使已安装)时,功能安装调用都会始终触发。此属性默认等于FALSE 。AlwaysForceInstall 属性会影响所有范围的功能。 | 
请参阅下面的 Feature.XML 文件屏幕截图。
 
 
- 对 ListEventReceiver 和 WebEventReceiver 文件夹重复上述步骤。
- 创建一个新的 C#.NET 类,并将其命名为 ItemEventReceiver.cs 类。添加 Microsoft.SharePoint命名空间,并将此类继承自SPItemEventReceiver类,以重写ItemDeleting成员,从而阻止用户从列表或文档库中删除项目。
- 重复上述步骤,再创建两个类,并将其命名为 ListEventReceiver.cs 和 WebEventReceiver.cs。
- 构建解决方案
- 使用 .NET 命令提示符的 SN 实用工具对解决方案进行签名,或在解决方案属性中指定“签名程序集”名称。
注意:解决方案的完整源代码和包文件附在本文章中。
打包功能
在 SharePoint Server 2007 中,解决方案用于将功能、站点定义、Web 部件、模板文件、程序集和代码访问安全 (CAS) 策略打包并部署到 SharePoint 前端服务器。
下面将介绍创建解决方案包的步骤。
- 作为同一项目的一部分创建 Manifest.XML 文件,其中包含解决方案信息以及作为整体解决方案一部分的功能文件路径。
- 创建 Diamond Discovery File (DDF) 文件,其中包含将文件压缩到 CAB 文件中的信息。
- 在 Windows 命令提示符中,在 DDF 文件上运行 MakeCab.Exe 以生成 WSP 文件。注意:MakeCab.Exe 文件可从 Microsoft 站点下载,应将其复制到包含 Visual Studio 项目文件的同一目录中。
- 请参阅下面的屏幕截图,了解如何通过 MakeCab.EXE 命令行实用工具制作 WSP 文件。
 
 
部署功能
下面将介绍部署解决方案包的步骤。
- 使用 STSADM.EXE 命令行工具将 WSP 文件添加到 SharePoint 解决方案库。
 
 
- 导航到 SharePoint 管理中心页面。
- 单击“操作”选项卡,然后选择“解决方案管理”,以查看场中已部署解决方案的列表。
 
 
请参阅下面的屏幕截图,查看已部署在场中的解决方案列表。
 
 
- 单击 EventHandlerFeature链接,将解决方案部署到指定的 Web 应用程序。
- 单击“部署解决方案”将 EventHandlerFeature解决方案部署到 Web 应用程序。请参阅下面的屏幕截图。
 
 
- 选择“Web 应用程序”,然后单击“确定”以部署解决方案。请参阅下面的屏幕截图获取详细信息。
 
 
激活解决方案
- 现在导航到所需网站的“站点设置”并选择“站点功能”。
- 选择所需的站点功能,然后单击“激活”按钮以激活该功能。请参阅下面的屏幕截图获取详细信息。
 
 
- 您可以使用 STSADM 命令行实用工具,通过指定 URL 在特定网站上激活功能。
 
 
测试解决方案
- ItemEventResource功能
导航到已激活 ItemEventResource 功能的站点中的文档库。
- 选择一个文档,然后单击“删除”以删除该文档。
- SharePoint 将生成一个错误页面,指出您无法从文档库中删除项目。
- 禁用该功能,然后尝试从库中删除相同的文档。现在,在这种情况下,您可以成功删除该文档。
 
 
- ListEventResource功能
导航到已激活 ListEventResource 功能的站点中的文档库。
- 选择“设置”,然后单击“文档库设置”以导航到文档库设置页面。
- 选择任何列,然后从文档库中删除该列。
- SharePoint 将生成一个错误页面,指出您无法从此文档库中删除列。
 
 
- WebEventResource功能
导航到已激活 WebEventResource 功能的 Web 应用程序中的一个站点。
- 单击“网站操作”和“设置”。
- 单击“删除此网站”以删除该网站。
- SharePoint 将生成一个错误页面,指出您无法从此 Web 应用程序中删除此网站。
 注意:请先在测试环境中尝试此解决方案,以避免任何灾难。
禁用和卸载解决方案
您可以选择禁用网站或 Web 应用程序上的特定功能,也可以选择卸载功能,这将从您的 SharePoint 部署中完全删除该功能。可以通过管理用户界面或使用 STSADM.EXE 命令行工具来禁用功能。
- 通过管理用户界面禁用功能
- 浏览您要禁用功能的网站,单击“网站操作”,然后在“网站管理”下单击“站点功能”。
- 在“站点功能”页面上,找到您要禁用的功能,然后单击“禁用”按钮以禁用该功能。
 
 
- 通过使用 STSADM.EXE 命令行工具禁用功能
- 打开 Windows 命令提示符工具,然后键入以下命令:STSADM.EXE –o deactivatefeature –name ItemEventReceiver –urlhttp://mtech.litwareinc.com/
- 通过使用 STSADM.EXE 命令行工具卸载功能
- 打开 Windows 命令提示符工具,然后键入以下命令:STSADM.EXE –o uninstallfeature –name ItemEventReceiver –force
注意:作为功能一部分部署的文件(例如 ASPX、ASCX 文件)在卸载功能时不会被删除。
测试平台
我在以下平台上测试了包含的项目
- Windows Server 2003 Standard Edition SP1
参考文献
- Microsoft Office SharePoint Server 2007 Administrator's Companion Bill English
- Microsoft Windows SharePoint Services 3.0 SDK
结论
在本文中,我演示了如何通过创建功能来增强和扩展 SharePoint 网站,这些功能可用于阻止用户删除 Web 应用程序的项目、列和网站。本文还涵盖了功能打包和部署选项,以及如何禁用或卸载现有功能。


