WSS3SDK之:Microsoft.SharePoint 与 Microsoft.SharePoint.Administration下的开发

 

主要的几个顶级类库

命名空间Microsoft.SharePointMicrosoft.SharePoint.Administration下的类型和成员可被用于管理列表和站点,也可用于管理一台运行Windows SharePoint Services的服务器或服务器场。这些命名空间中几个主要的顶级类库有:

n   Microsoft.SharePoint.Administration.SPFarm

n   Microsoft.SharePoint.Administration.SPWebService

n   Microsoft.SharePoint.Administration.SPWebApplication

n   Microsoft.SharePoint.SPSite

n   Microsoft.SharePoint.SPWeb

通过使用这些类,我们就可以得到其他类的访问权,进而操作站点和列表,管理服务器,或管理整个部署。从其中一个类入手,我们就可以通过对象模型来获得想要的类。下面的表格对这些类给出了一个简要的描述。

描述

SPFarm

对象模型的顶级类,用于管理核心配置信息。我们可以用这个类来访问一个SharePoint部署所包括的服务器,服务或解决方案包。

SPWebService

SharePoint Web应用程序的容器,提供对一个SharePoint部署的全局配置信息的访问。

SPWebApplication

代表在一个服务器场中的基于IIS支持负载均衡的Web应用程序。用于操作相关配置信息,并访问一个Windows SharePoint Services Web应用程序下所有的站点集。相当于Windows SharePoint Services 2.0中的虚拟服务器(Microsoft.SharePoint.Administration.SPVirtualServer)

SPSite

代表一个网站集(一个顶级站点和其所有子站点)。用于管理现有网站集和访问所有站点及列表的数据。

SPWeb

代表一个特定的网站。用于操作列表、文件、网站安全性,包括用户,组,权限等。

获取一个站点

在一个SharePoint站点中操作列表数据前,我们必须首先得到一个SPWeb对象。以此作为入口,进而来访问其中的列表,列表项,文档,用户,通知,等等。对象模型中提供了许多种获得站点的方法,比如:

n   如果想从当前的HTTP上下文中得到一个站点下所有列表的集合,我们可以通过Microsoft.SharePoint.SPContext对象来实现。它代表了HTTP上下文(System.Web.HttpContext)。比如,

SPWeb mySite=SPContext.Current.Web;

(在VB中,Dim mySite As SPWeb=SPContext.Current.Web

然后通过mySite.Lists就可以得到站点中所有的列表。很简单,mySite.Title返回站点的标题,mySite.Users返回站点中的用户。

n   我们可以从对象模型的一个更高的层次来起步,通过使用Microsoft.SharePoint.Administration.SPWebService类的ContentService属性来实现。比如,使用SPWebService myWebService=SPWebService.ContentService (VB里,Dim myWebService As SPWeb=SPWebService.ContentService )来返回当前的Web 服务。然后使用SPWebService类的成员来访问一个特定的站点。比如,myWebService.WebApplications[“SharePoint – 80”].Sites[“mySiteCollection”].OpenWeb[“myWebSite”](VB里,myWebService.WebApplications("SharePoint - 80").Sites("mySiteCollection").OpenWeb("myWebSite"))

n   如果我们创建一个控制台应用程序,那么可以使用SPSite构造器来返回某个特定站点集对象,然后使用OpenWeb方法来得到站点对象。

注意:在您创建自己的SPWebSPSite对象后,可以调用CloseDispose方法来关闭该对象。然而,如果具有对某共享资源的引用,如对象由Microsoft.SharePoint.WebControls.SPControl.GetContextSite(System.Web.HttpContext)M:Microsoft.SharePoint.WebControls.GetContextSite Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(System.Web.HttpContext)方法所提供,这时不要使用DisposeClose方法来关闭对象,交给SharePoint来管理就好了。

对象

 

Microsoft.SharePointMicrosoft.SharePoint.Administration命名空间下的许多类都是以SP开头的。通常,如果Microsoft.SharePoint组件文件中的类不以这个前缀开头,那么代表它是一个Web窗体控件。

WSS一般不会保存对象属性的修改到数据库中,直到我们该对象的调用了Update方法。下面的例子展示了如何来更改任务列表的标题和说明。

VB

Dim myList As SPList = myWeb.Lists("Tasks")
myList.Title 
= "New_Title"
myList.Description 
= "List_Description"
myList.Update()

C#

SPList myList = myWeb.Lists[“Tasks”];
myList.Title
=“New_Title”;
myList.Description
=“List_Description”;
myList.Update();

注意:文档库中的文档如果处于签出状态时,那么无法通过调用SPListItem对象的Update方法来修改该文档的元数据。

集合

正如列表是SharePoint站点的核心一样,集合是其对象模型的核心。我们可以使用这些集合来添加,删除,枚举,更新某个对象。集合类通常都有以下特征:

l   具有一个以“Collection”结尾的名称。

l   实现了System..Collections.ICollection接口。

l   具有一个Count属性,Int32类型的。

l   具有一个Int32类型的索引器,用于获取集合中的某一项。

l   具有一个索引器来得到某一项的标识。

l   具有AddDelete方法。

调用集合的Add方法通常会将数据更新回后端数据库,除非该更新操作还需要其他的信息。这时,调用Add方法会返回一个对象包括了需要搜集的信息。比如,添加一个列表项,首先使用Microsoft.SharePoint.SPListItemCollection类的Add方法来返回一个SPListItem对象,给对象某些属性赋予合适的值,然后调用Update方法使变更生效,进而保存到内容数据库。

索引器

索引器提供了一种有用的方式来访问集合中特定的项目。为了返回集合中的一个项目,在C#中使用方括号([])或在VB中使用圆括号(())来包含一个索引值或项目的标识字符串。

比如,如果mySite代表了一个SPWeb类的实例,那么SPList myList=mySite.Lists[“通知”]将返回通知列表(C# 。同样,VB中为Dim myList As SPList=mySite.Lists通知))。然后,我们就可以通过列表对象的Items属性返回列表中所有的列表项(C#为,SPListItemCollection myItems=myList.ItemsVB为,Dim myItems As SPListItemCollection = myList.Items)。如果要从列表中返回一个列表项的子集,我们可以调用列表对象的GetItems方法,并传递一个SPQuery对象来指定该子集:SPListItemCollection myItems=myList.GetItems(myQuery) (VB中,Dim myItems As SPListItemCollection = myList.GetItems(myQuery))

我们可以使用索引器来返回列表中的一个特定项,进一步我们可以指定一个特定的字段名给该项的索引器来返回字段值:

VB

Dim myItem As SPListItem
For Each myItem In myItems
    Response.Write(SPEncode.HtmlEncode(myItem(
"Due Date").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(myItem(
"Status").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(myItem(
"Title").ToString()) + "<BR>")
Next myItem

C#

foreach(SPListItem myItem in myItems)
{
    Response.Write(SPEncode.HtmlEncode(myItem[
"Due Date"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(myItem[
"Status"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(myItem[
"Title"].ToString()) + "<BR>");
}

注意:

在此之前,我们需要一个using引用(VB中为Import)指定Microsoft.SharePoint命名空间,前面的例子需要指定Microsoft.SharePoint.Utilities命名空间。

接下来的示例展示如果返回一个SharePoint站点的任务列表中所有的标题和状态字段值。

VB

Dim myWeb As SPWeb = SPContext.Current.Web
Dim myTasks As SPList = myWeb.Lists("Tasks")
Dim myItems As SPListItemCollection = myTasks.Items
Dim myItem As SPListItem
For Each myItem In myItems
    Response.Write(SPEncode.HtmlEncode(myItem(
"Title").ToString()) + " :: " _
        
& SPEncode.HtmlEncode(myItem("Status").ToString()) + "<BR>")
Next myItem

C#

SPWeb mySite = SPContext.Current.Web;
SPList myTasks 
= mySite.Lists["Tasks"];
SPListItemCollection myItems
=myTasks.Items;
foreach(SPListItem myItem in myItems)
{
    Response.Write(SPEncode.HtmlEncode(myItem[
"Title"].ToString()) + " :: " + 
        SPEncode.HtmlEncode(myItem[
"Status"].ToString()) + "<BR>");
}

 

注意:

在此之前,我们需要一个using引用(VB中为Import)指定Microsoft.SharePoint命名空间,前面的例子需要指定Microsoft.SharePoint.Utilities命名空间。

我们还可以使用索引器来修改列表中的值。下面的示例中,将添加一个新的列表项到集合中并为其URL字段指定一个值:

VB

Dim myNewItem As SPListItem = myList.Items.Add()
myNewItem(
"URL_Field_Name"= "URL, Field_Description"
myNewItem.Update()

C#

SPListItem myNewItem = myList.Items.Add();
myNewItem[
"URL_Field_Name"="URL, Field_Description";
myNewItem.Update();

注意:

URL字段类型比较独特,因为它包括两个值(通过一个逗号和一个空格分隔开)。在上面的例子里,这样的值同样可以通过该新建项的一个索引器来指定。

下面的例子设置了某列表项的状态和标题值。

VB

Dim myItem As SPListItem = myItems(0)
myItem(
"Status"= "Task_Status"
myItem(
"Title"= "Task_Title"
myItem.Update()

C#

SPListItem myItem = myItems[0];
myItem[
"Status"]="Task_Status";
myItem[
"Title"]="Task_Title";
myItem.Update();

注意

如果没有找到指定的项目,索引器会抛出一个ArgumentOutOfRange异常。

更多关于WSS列表项中使用的特定数据格式的信息,可以查看SPListItem类。

posted @ 2008-06-17 18:41  Sunmoonfire  阅读(950)  评论(0编辑  收藏  举报