您的位置:首页 > 其它

Sharepoint 2007 Sdk常用基础操作

2008-04-30 13:41 411 查看
SPSite的使用

SPSite作为网站集对应的对象模型,其主要的用处是获取某个特定的网站,它最常用的几个功能如下:

„ 构造函数

SPSite的构造函数有两种,分别以Site的url和Guid作为参数。

在SharePoint对象模型中,大部分对象都拥有一个Guid作为它唯一的标识符,通过这个Guid可以获取该对象的实例,例如Site(SPSite)、Web(SPWeb)、列表(SPList)、视图(SPView)以及SPS中的区域(Area)、门户列表(AreaListing)等。但也有一些是采用整型作为标识符的,例如列表项(SPListItem)、角色(SPRole)和用户(SPUser)等。

„ AllWebs属性

该属性是一个SPWebCollection类型的变量,通过这个属性,便可以获取到该网站集中的所有网站,包括一个顶级网站和它下面的所有子网站。然后通过以下三种形式之一,便可以得到某个特定的SPWeb的对象:

· webs[int index]:根据在该集合中的下标获取一个Web;

· webs[string url]:根据Web的相对url(相对于包含该网站的Site)获取Web;

· webs[Guid guid]:根据唯一标识该Web的guid获取。

在WSS对象模型中,集合(Collection)是一个比较重要的概念,它实际上是一种对象的存储方式(即.NET框架中集合的概念)。一般来说SPxxxCollection便是SPxxx这个类所对应的集合类,例如SPWebCollection、SPListCollection和SPFileCollection等。但是应该注意到的是,SPSiteCollection并不是包含在Microsoft.SharePoint命名空间中的类,而是在Microsoft.SharePoint.Administration这一命名空间中的,这也说明了Site的主要意义在于网站本身的管理,而非网站内容的管理。

„ RootWeb属性

该属性是一个SPWeb类型的变量,它所对应的对象是该网站集中的顶级网站,通过它可以逐步获得该网站级中的层级结构。(关于顶级网站和子网站的概念,请参考本书中“2.1.2Windows SharePoint 站点架构简介”部分。)

„ OpenWeb函数

该函数返回一个SPWeb类型的变量,通过该函数可以获得该网站集中一个特定的网站。它有以下三种使用形式:

· OpenWeb():在命令行模式中,该方法返回网站级中的顶级网站对象;但是在网络环境中使用该方法会有不同的效果,详见第11章11.3小节“WebPart编程中的对象模型”;

· OpenWeb(Guid guid):返回该guid所对应的网站对象;

· OpenWeb(string url):返回该url所对应的网站对象,注意该url为相对地址(相对于服务器根路径或者网站集根路径)。

SPSite的基本使用。

在这个示例中,展示了SPSite的基本用法,包括上面所提到的几个重要功能:

using System;

using Microsoft.SharePoint;

namespace WSSModelObject

{

class Example1_1

{

[STAThread]

static void Main(string[] args)

{

// 使用构造函数创建网站集对象

SPSite site = new SPSite("http://localhost");

// 获取根网站信息

Console.WriteLine("Root:" + site.RootWeb);

// 遍历网站集中的所有网站

Console.WriteLine("All Webs in site:");

foreach(SPWeb web in site.AllWebs)

{

Console.WriteLine(web);

}

// 打开某个特定的网站

try

{

SPWeb web = site.OpenWeb("subweb1");

Console.WriteLine(web);

}

catch(Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

在编写程序的过程中,合理地使用try-catch语句是一种良好的编程习惯。SharePoint是一套相对庞大的对象模型体系,在编写程序的过程中,难免会出现预料之外的问题,因此应该尽可能对所有可能出错的语句进行try-catch,如果有必要,捕获每种特定的异常,并提供更加友好的出错信息,使得程序更加人性化。在本书中,为了节省篇幅,除非特殊的需要和说明,在后面的示例程序中一般不进行try-catch处理,请读者注意。

编写SharePoint的程序需要在引用中添加Microsoft.SharePoint.dll,如果是在安装了WSS的机器上,在VS.NET中添加引用界面选择Windows SharePoint Services即可,也可以将dll复制到其他的机器上再引用(但是仍然需要在装有WSS的机器上才能运行),该dll的默认安装路径为:C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\ISAPI。在本书后续章节中除非特殊情况,不再使用完整的代码,而使用代码片段作为示例。Gmail中国ZR]'P?$P*UG ZS4m
Gmail中国h _3nK }'[['P

SPWeb的使用
在一般的应用场景下,SPWeb是使用最多的一个对象模型,因为几乎所有的WSS的内容都是依附于SPWeb对象的,在编程中也是使用SPWeb来获取其他的对象模型。而获取SPWeb对象的方法在本章9.2.2小节“SPSite的使用”中已经有所提及,就不在这里重复了。

大多数和WSS相关的内容都是通过使用SPWeb的一些成员变量来获取的,这些成员变量主要有:

· AllUsers网站内的所有成员,以及通过域组(domain group)来浏览网站的用户;

· Files:网站下的所有文件;

· Folders:网站下的所有目录;

· Groups:所有跨网站用户组;

· Lists:网站下的所有列表;

· ListTemplates:网站下的所有列表模板;

· Permissions:网站下的权限;

· Roles:网站下的所有角色;

· Users:属于该网站的所有用户;

· Webs:该网站的所有子网站。

通过使用这些成员变量,就可以获取到相应内容的对象集合(Collection),进而获取需要的内容。

此外,SPWeb的某些成员变量对应于该网站的一些属性,例如:

· AllowAnonymousAccess:网站是否允许匿名访问(只读);

· Author:网站的创建者(只读);

· Created:网站的创建时间(只读);

· CurrentUser:当前的用户(只读);

· ID:唯一标识该网站的Guid(只读);

· IsRootWeb:该网站是否为顶级网站(只读);

· ParentWeb:该网站的父网站(只读);

· Site:该网站所属的网站集(只读);

· Title:该网站的标题;

· Url:该网站的url(绝对路径)(只读);

· WebTemplate:该网站的模板(只读)。

SPWeb对象还提供了一些方法,例如:

· GetFile:通过url获取一个文件的对象(SPFile);

· GetFolder:通过url获取一个目录的对象(SPFolder);

· GetListOfType:获取特定类型的列表的集合;

· GetSubwebsForCurrentUser:获取该网站的子网站(可以指定模板);

· GetViewFromUrl:通过url获取一个列表的视图(SPView);

· SaveAsTemplate:将网站保存为模板;

· SearchDocuments:搜索网站的文档库(需要开启全文检索功能);

· SearchListItems:搜索列表条目;

· Update:使网站属性的修改生效。

在SharePoint的对象模型中,一些比较重要的对象都会拥有Update方法(例如SPWeb、SPList、SPField和SPListItem),在修改这些对象的属性时,只有在调用Update方法之后,这些修改才会真正生效。仅限普通属性,不包括集合类的属性,比如SPWeb.Lists中添加或删除一个列表,不需要调用SPWeb.Update方法。这一点需要特别引起注意 。

得到一个网站集中的所有网站,并输出它们的标题、url、父网站及子网站。

SPSite site = new SPSite("http://localhost");

foreach(SPWeb web in site.AllWebs)

{

Console.WriteLine("Title: " + web.Title);

Console.WriteLine("Url: " + url);

Console.WriteLine("ParentWeb: " + web.ParentWeb);

Console.Write("SubWebs: ");

foreach(SPWeb subweb in web.Webs)

Console.Write(subweb.ToString() + " ");

Console.WriteLine();

}

一个小技巧:在.NET对象模型中,每个类都会有ToString函数(继承自Object类),一般来说每个类也都会对这个方法进行重写。SPWeb的ToString方法一般情况下就是返回了SPWeb.Title这个属性。在大多数字符串操作过程中,一个对象的ToString方法是可以被隐式调用的(例如示例9-1中就使用了这个特性),在不知道该对象是否为空(null)的时候,如果显式调用ToString方法会造成一个异常(NullReferenceException),但是在隐式调用的时候便不会产生这个异常,如果仅是作为输出的需要,隐式的调用要比显式的调用更加方便。

在示例中,输出每个网站的父网站,但是对于顶级网站来说,其父网站为空,如果显示调用的话,便会出现异常,采用隐式调用就可以避开这个问题,只显示一个空的字符串。

示例使用了三种输出网站标题的方法:SPWeb.Title属性,隐式调用SPWeb.ToString方法,显式调用SPWeb.ToString方法。
stsadm.exe的一些不同用法:

addpath
addtemplate
adduser
addwppack
backup
binddrservice
createadminvs
createsite
createsiteinnewdb
createweb
deleteadminvs
deleteconfigdb
deletepath
deletesite
deletetemplate
deleteuser
deleteweb
deletewppack
disablessc
disablestsisapis
email
enablessc
enablestsisapis
enumroles
enumsites
enumsubwebs
enumtemplates
enumusers
enumwppacks
extendvs
extendvsinwebfarm
getadminport
getproperty
removedrservice
renameweb
restore
setadminport
setconfigdb
setproperty
siteowner
unextendvs
uninstall
upgrade
userrole
============================================
using Microsoft.SharePoint;

SPWeb site = SPControl.GetContextWeb(Context);
SPListItemCollection items = site.Lists["ListName"].Items;

SPListItem item = items.Add();

item["Field_1"] = OneValue;

item["Field_2"] = TwoValue;

item.Update();

删除sharepoint list数据
=============================================
using Microsoft.SharePoint;

SPWeb site = SPControl.GetContextWeb(Context);

SPListItemCollection items = site.Lists["ListName"].Items;

items[0].Delete();

上传文件到sharepoint
=============================================
using System.IO;

using Microsoft.SharePoint;

if( htmlInputFile1.PostedFile != null )

查询记录及更新数据
===============================================
using Microsoft.SharePoint;

SPWeb web = new SPSite("http://nick").OpenWeb("test"); //Open website

web.AllowUnsafeUpdates = true;

SPList list = web.Lists["ListName"];

SPQuery query = new SPQuery();

query.Query = "<Where>"+
"<And><And>"+
"<Eq><FieldRef Name=\"Filed_1\"/><Value Type=\"Text\">Test</Value></Eq>" +
"<Eq><FieldRef Name=\"Filed_2\"/><Value Type=\"Text\">" + (string)OneValue + "</Value></Eq>" +
"</And>"+
"<Eq><FieldRef Name=\"Filed_3\"/><Value Type=\"Text\">" + (string)TwoValue + "</Value></Eq>" +
"</And>"+
"</Where>";

query.RowLimit = 10;

//查询
SPListItemCollection items = list.GetItems(query);
try
catch
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: