65.9K
CodeProject 正在变化。 阅读更多。
Home

SharePoint 委托控件已解密

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (4投票s)

2008年10月28日

CPOL

4分钟阅读

viewsIcon

37018

揭秘 SharePoint 委托控件,实现快速轻松的 SharePoint 品牌定制。

引言

在过去的几个月里,我一直在为一个国际最大公司之一的 SharePoint 门户进行品牌定制。这对我来说非常有趣,尤其这是我第一次进行品牌定制的经历。当我查看 OOB 主控页(default.master)时,我注意到在“PlaceHolderAdditionalPageHead”的头部元素下方有一个名为“delegate control”的控件。在谷歌搜索和研究之后,我可以肯定地说,委托控件是 SharePoint 2007 在品牌定制和自定义方面最重要的功能之一。

历史

回到 2003 年,当微软发布 Microsoft SharePoint Portal Server 2003 时,它很棒,但当时让开发者极其恼火的是该产品的非扩展性和难以自定义。现在,MOSS 2007 提供了许多扩展点,即使在站点配置完成后也可以对其进行修改。SharePoint 功能的引入打开了一个修改主控页、页面布局和页面本身的世界。此外,SharePoint 还引入了委托控件,允许对页面部分进行更精细化的控制。

为什么它们如此方便和实用?

在我参与过的每一次 SharePoint 部署中,都曾被要求修改搜索框。在以前的 SharePoint 版本中,这需要取消幽灵化和自定义,以及/或创建一个全新的站点定义。现在,多亏了委托控件,您可以将任何控件放置在 SharePoint 页面上,从而在您想要的任何范围内替换现有控件,而无需额外的编码或重新部署页面本身。它们与新引入的功能框架协同工作,根据键值和序列号在运行时动态加载控件。

理论够了,它们如何工作?

全局站点定义部署的 default.master 文件包含一些委托控件,其 ID 值如下:

  • AdditionalPageHead
  • GlobalSiteLink0
  • SmallSearchInputBox
  • PublishingConsole

例如,SmallSearchBox 显示一个搜索区域,default.master 中的 DelegateControl 定义如下:

<SharePoint:DelegateControl runat=”server” ControlId=” SmallSearchBox”>

所有版本的 SharePoint 都包含一个名为 ContentLightUp 的功能,其中包含一个 Control 元素,该元素为具有 SmallSearchArea ControlId 值的 DelegateControl 指定了一个控件。该元素如下所示:

<Control Id=”SmallSearchInputBox” Sequence=”100” ControlSrc=”~/_controltempaltes/searcharea.ascx” />

MOSS 的企业版包含一个名为 OSearchEnhancedFeature 的功能,它将 searcharea.ascx 用户控件替换为 SearchBoxEx Web 控件,该控件将用户重定向到 MOSS 中更高级的搜索页面。

<Control Id="SmallSearchInputBox" Sequence="50" ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c">

当 SharePoint 选择控件来替换委托控件时,它会遍历已激活控件的列表并选择最佳控件,最佳控件被定义为具有最低序列号的控件。由于 OSearchEnhancedFeature 中的控件元素具有较低的序列号,因此它定义的控件会代替 ContentLightup 中确定的控件被加载,并且这一切都无需修改 default.master。

还有其他委托控件,例如 AdditionalPageHead,它们没有视觉元素,而是提供了在运行时插入额外 HTML 的能力。

例如,我曾经创建了一个名为 SearchEngineOptimizer 的 Web 控件,它可以发出用于搜索引擎优化的 META 标签(Meta 标签是出现在 HTML 页面头部中的 HTML 标签),并创建了一个功能来加载该 Web 控件!

好了,我想强调几点建议:

  • 通过使用作用域为 Web 的功能,您可以为站点集合中的不同区域使用不同的搜索框,而无需额外的代码。
  • 您可以加载用户控件或服务器控件。如果您指定用户控件,请使用 URL 属性;如果您想加载服务器控件,请使用 ControlClass 和 ControlAssembly 属性。
  • 通过在委托控件声明中添加 AllowMultiple=true,您可以使其加载多个用户/服务器控件。(例如,AdditionalPageHead 委托控件默认设置为允许多个控件)。
  • 在设计页面时,为可能随时间变化的功能创建委托控件。
  • 跟踪序列号,不要使用过低的数字。您不希望将来在覆盖功能时遇到麻烦。

摘要

委托控件是创建可与其他选项混合搭配的解决方案的重要设计选项。为某个站点启用功能而不为另一个站点启用功能的能力,可以成为 SharePoint 开发者工具箱中非常重要的工具。

© . All rights reserved.