MOSS2007基础:Windows SharePoint Services 3.0中的Web Part
开发人员扩展WSS 2.0站点的最常使用的方式就是开发自定义的Web部件。Web部件绝对是一个伟大的发明,因为她可以允许我们随意在页面里增加用户自定义的元素或实现个性化。因此,已经有很多MS或第三方公司开发了许多基于WSS 2.0的自定义Web部件。
因为WSS 2.0中Web部件的成功,所以MS才决定在ASP.NET 2.0中增加对开发自定义Web部件的支持。这使得更多的开发人员可以在他们的ASP.NET应用中使用这一出色的特性,而且完全可以脱离WSS 2.0环境。
因此,现在有两种不同的Web部件。老的WSS风格的WebPart依赖于Microsoft.SharePoint.dll,必须继承自WSS 2.0所定义的WebPart基类,其命名空间为Microsoft.SharePoint.WebPartPages。新的ASP风格WebPart依赖于System.Web.dll,必须继承自不同的一个由ASP.NET 2.0定义的WebPart基类,其命名空间为System.Web.UI.WebControls.WebParts。
有一个大家听了绝对高兴的消息。在WSS 3.0中既可以使用老的WSS风格的WebPart,又可以使用新的ASP风格WebPart。这是通过将WSS 3.0支持的WebPart建立在顶层的ASP.NET Web Part结构基础上,重新编写Microsoft.SharePoint.dll而实现的。这样WSS 3.0运行时环境将兼容专为WSS 2.0编写的WebPart。
为了向大家解释WebPart如何载入并在WSS 3.0中运行,下面将讨论一下WSS 3.0是如何被重新在ASP.NET 2.0的WebPart基础上设计构建的。我将深入WSS 3.0内部,看看它的Web部件页是如何组织的。接下来的日志中我们再研究在WSS 3.0中开发自定义WebPart的细节。(敬请关注)
想要在一个ASP.NET 2.0的应用中使用WebPart,我们必须创建一个.aspx页面并包括一个WebPartManager控件和至少一个WebPartZone控件。WebPartManager控件负责将WebPart相关的数据序列化,进而实现存取。要知道,所有的这些数据都是要进入ASP.NET服务的数据库的。
该.aspx页面作为一个Web部件页也可以包括Editor Parts,它将允许用户对WebPart进行定制和个性化WebPart属性。也可以包括一个Catalog Parts,它将允许用户添加新的WebPart到Web部件区域中。如果希望了解更多关于ASP.NET 2.0种内功个性化和自定义WebPart的内容,您可以参考msdn。(http://msdn.microsoft.com/msdnmag/issues/05/09/WebParts)
在WSS 3.0中的WebPart是架构在一个名为SPWebPartManager的控件基础上的,它本身源于ASP.NET 2.0的WebPartManager控件。SPWebPartManager控件重写了WebPartManager控件的许多标准方法,使得WebPart数据存到WSS的内容数据库中,而不是ASP.NET的服务数据库中。当然,通常情况下我们并不需要关心这些。只要交给SPWebPartManager控件处理就可以了,而且这个并且这仅需的一个控件实例已经包括到母版页default.master中了,我们的创建的内容页面都已继承了该母版。
其他几个典型的WSS 3.0Web部件页中的控件包括Web Part zones,Editor Parts和Catalog Parts。需要注意的是,在WSS 3.0Web部件页中使用的Web Part zones必须用由Microsoft.SharePoint.WebPartPages命名空间定义的WebPartZone控件来创建,而不是标准的ASP.NET 2.0中的WebPartZone控件。
WebPartZone控件的实例通常在内容页面中来定义。下面的示例代码显示了如何创建一个内容页面,并设计其成为一个WSS 3.0站点中的Web部件页。可以看到,该.aspx页面链接到default.master,同时它继承自WebPartPage基类,在占位符PlaceHolderMain中包括了两个WebPartZone控件。
<% Page language="c#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="[Microsoft.SharePoint.dll的完全限定名称]" %>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<h3>我的自定义Web部件页</h3>
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td valign="top">
<WebPartPages:WebPartZone runat="server" ID="Left" Title="左侧区域" />
</td>
<td valign="top">
<WebPartPages:WebPartZone runat="server" ID="Right" Title="右侧区域" />
</td>
</tr>
</table>
</asp:Content>
当我们创建一个标准的ASP.NET 2.0应用程序中的Web部件页时,我们必须添加与WebPartManager控件交互的逻辑,用来管理WebPart显示的模式。通常情况下,我们还需要明确添加Editor Parts和Catalog Parts到页面的HTML布局中并做相应的调整。但如果在WSS 3.0站点的内容页面里,我们就不必做这些事情了。我们只要从Microsoft.SharePoint.WebPartPages命名空间中继承WebPartPage类,所以这些事都交给它在后台完成就好了。当用户进入页面编辑模式后,Editor Parts或Catalog Parts就会自动出现在右侧,供用户来添加WebPart到Web部件区域或更改已有的WebPart属性。