2.2 SPSite对象和SPWeb对象
SPSite对象和SPWeb对象基本上是同时被使用的,SPSite对象代表SharePoint的网站集对象,SPWeb对象代表SharePoint网站集下面的网站对象。开发人员在进行开发工作时总会最先写到这两个类。
2.2.1 SPSite
在介绍SPSite对象之前,先介绍一下SPFarm和SPWebApplication这两个不常用对象,以方便读者下面的理解。SPFarm表示SharePoint的场对象,SPWebApplication表示SharePoint中的Web应用程序对象,可以通过SPFarm的SPWebApplications属性获得SharePoint中Web应用程序对象的集合,进而通过索引获得单一的Web应用程序对象,也可以通过SPWebApplication的Lookup方法直接获取单一的Web应用程序对象。
SPSite对象可获取一个Web应用程序中的某个网站集,网站集包括一个顶层网站和顶层网站下面的所有子网站。由SPSite对象构成的集合代表某个Web应用程序下的网站集的集合,叫做SPSiteCollection对象。
如何构建一个SPSite对象呢?使用SPSite的构造方法如下:
using (SPSite site = new SPSite("http://<mysiteurl>")){}
如果想遍历某个Web应用程序下面的网站集对象,可以使用SPWebApplication对象下的Sites属性,该属性返回指定Web应用程序下的网站集的集合;在集合对象后面加上索引可以返回单一的网站集SPSite对象。
当然,利用SPWebApplication对象来进行网站集的添加、修改、删除操作也是可以的。
2.2.2 SPWeb
SPWeb对象可获取一个网站集下的某个网站。由SPWeb对象构成的集合代表某个网站集下面所有SharePoint网站的集合,叫做SPWebCollection对象。
SharePoint的网站是具有层次结构关系的,网站的下面可以有子网站,子网站下面还可以有子网站。获得一个SPWeb对象有很多种途径。
通过URL获取一个指定的网站对象:
using (SPSite site = new SPSite("http://<mysiteurl>/subsite")) { using (SPWeb web = site.OpenWeb()) { //todo } }
通过网站集对象的网站集合获取:
using (SPSite site = new SPSite("http://<mysiteurl>/subsite")) { using (SPWeb web = site.AllWebs'0') { //todo } }
借助以上提到的两个对象模型,我们可以写几行代码实现一些简单的操作。
获取网站的信息:
string webTitle = string.Empty; string webDescription = string.Empty; using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { webTitle = web.Title; webDescription = web.Description; } }
修改网站的信息:
using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { web.Title = web.Title + "_M"; web.Description = web.Description + "_M"; web.Update(); } }
添加一个网站:
using (SPSite site = new SPSite("http://<mysiteurl>")) { using (SPWeb web = site.AllWebs.Add("subSite1", "添加的网站标题", "添加的网站描述", 2052, SPWebTemplate.WebTemplateSTS, false, false)) { } }
删除一个网站:
using (SPSite site = new SPSite("http://<mysiteurl>/subSite1")) { using (SPWeb web = site.OpenWeb()) { web.Delete(); } }
2.2.3 SPContext对象
SPContext代表当前HTTP请求中的上下文信息,在SharePoint环境中,可以通过SPContext对象取到非常有用的信息。
SPSite currentSite = SPContext.Current.Site; SPWeb currentWeb = SPContext.Current.Web; SPUser currentUser = SPContext.Current.Web.CurrentUser;
从这里面获取到的对象具有当前请求用户的权限,如果想提权使代码运行在系统账户下,可以用下面的代码段:
SPSecurity.RunWithElevatedPrivileges(delegate() { //这个方法将提升权限执行 });
初学者在这里要注意一下,不要将外部声明的SPSite、SPWeb对象拿到这里面直接使用,这样的提权是没有效果的,提权一定要在上面的语句块中重新构造SPSite、SPWeb对象。
需要注意的是,只有处在某个HTTP请求中时才可以使用该对象获取SharePoint对象的信息,在本章中的控制台应用程序中是无法应用此对象的。