本节将会介绍SharePoint中最为常用的一些对象模型,以及如何使用这些对象模型来访问和操作网站中的数据。几乎所有的SharePoint服务器端开发都会涉及到这些内容,因此应着重掌握本节中所介绍的基本对象模型的使用方法。由于篇幅所限,在介绍每种对象的时候只能阐述一些最为常用和重要的属性及方法,以及一些容易混淆或出错的内容。更加完整的属性、方法的定义、介绍和代码示例片段,请参考SDK中类库索引中相关章节。

网站中一些常用对象的结构大概如下图所示(从SharePoint 2003起,这部分内容在结构上未曾发生根本性的变动):

 

 

(一)网站集(SPSite)和网站(SPWeb)

网站是SharePoint基本对象模型之一,由于SharePoint的数据基本上全部都容纳在网站中,因此绝大多数的SharePoint程序都要先从获取网站开始。

 

1、网站集和网站的关系

网站集(Site Collection)顾名思义,是网站的集合,每个网站集中必须有一个顶级网站(或称为首要网站),而每个网站可以有0至多个子网站,从而构成一棵网站结构树,在这棵树上的所有网站构成了整个网站集。在SharePoint中,网站集几乎只是一个被架空的概念,其作用只是将一个相对完整的整体性应用集中组织起来,控制应用中的母版页、Web部件、网站集功能等配置。网站集这个本身不储存任何数据,诸如Web部件、母版页、列表模板、网站模板、网站集解决方案等均存储在网站集的顶级网站中。在SharePoint对象模型中,网站集使用SPSite对象表示,SPSiteCollection(SPSiteCollection包含在Microsoft.SharePoint.Administration这个命名空间中,而本节涉及到的其他类均包含在Microsoft.SharePoint命名空间中)表示网站集的集合。

网站是SharePoint中最经常使用到的对象模型之一,网站中包含的列表、文档库、文件等内容都是在SharePoint开发过程中最经常涉及到的对象。网站使用SPWeb对象表示,SPWebCollection表示网站的集合。请注意在对象模型中“网站的集合”(SPWebCollection)与“网站集”(SPSite)这几个概念的关系和区别。

 

2、网站集的获取

在控制台程序等运行在服务器上的客户端程序中,由于没有IIS的上下文(Context)环境,必须要通过绝对路径获取网站集对象,再获得其中的网站对象。

网站集的获取使用SPSite的构造函数进行,一般来说,经常使用的一个重载如下(假设我们的网站地址为:http://sp2010/book,一个子网站):

   1: SPSite site = new SPSite("http://sp2010/book");

在该构造函数中,必须要使用完整的绝对Url路径,但该Url不一定要限制为网站的根路径,可以为该网站下的任何一个路径(甚至是不存在的文件地址),例如使用Url:“http://sp2010/book/chapters/part1/ch02.docx”作为参数,同样可以返回同一个网站集,即使后面的文档库、文件夹或文件都不存在也没有关系(但并不建议这样使用)。

 

3、网站的获取

当获取到一个网站集的SPSite对象之后,有三种方式获取到其中的网站:(1)RootWeb属性;(2)AllWebs属性;(3)OpenWeb方法。

(1)RootWeb属性返回网站集中的根网站,即顶级网站。

(2)AllWebs属性是SPWebCollection类型,返回网站集中的所有网站。当要获取到其中某一个网站的时候,可以使用3种索引器:

  • AllWebs[idx]:int型索引器,根据下标顺序获取,几乎很少使用这种方式;
  • AllWebs[id]:Guid型索引器,根据网站Guid获取;
  • AllWebs[url]:string型索引器,根据网站的相对路径(相对根网站的路径)获取。

(3)OpenWeb方法按照参数类型不同的重载,也有如下的使用方式:

  • OpenWeb():无参数。返回构造SPSite时所使用的Url所对应的网站,这是一种比较常用的方法,如果使用的是顶级网站的Url构造SPSite,则该方法返回的就是顶级网站;如果使用的是子网站的Url构造SPSite,则该方法返回的就是相应的子网站。
  • OpenWeb(Guid id):使用网站的Guid返回网站。
  • OpenWeb(string url):使用网站的相对路径(相对服务器路径或相对顶级网站的路径)返回网站。

例如,可以使用如下的方法来获取网站:

   1: SPSite site1 = new SPSite("http://sp2010/book");

   2: SPWeb web1 = site1.OpenWeb(),

   3:       theSameAsWeb1 = site1.AllWebs["book"];

   4:  

   5: SPSite site2 = new SPSite("http://sp2010");

   6: SPWeb web2 = site2.OpenWeb(),

   7:       theSameAsWeb2 = site1.RootWeb,

   8:       anotherWeb1 = site2.OpenWeb("book");

(这部分代码并不完整,详见后面的说明)

 

4、特殊的网站和网站集获取方法

之前所介绍的一些获取方法可以随时使用,但是当程序运行在IIS进程中时(比如Web页面、Web部件、一些类型的事件处理程序、工作流等),由于有上下文(Context)的存在,可以很方便的获取到程序所在的当前网站集和当前网站:

   1: SPSite currentSite = SPContext.Current.Site;

   2: SPWeb currentWeb = SPContext.Current.Web;

 

5、网站集和网站的常用属性

SPSite的常用属性:

名称

类型

说明

AllWebs

SPWebCollection

网站集中的所有网站

RootWeb

SPWeb

网站集的根网站(顶级网站)

Url

string

网站集的绝对路径(实际上就是顶级网站的绝对路径)

 

SPWeb的常用属性:

名称

类型

说明

RootFolder

SPFolder

网站的根目录

Site

SPSite

网站所在的网站

Title

string

网站标题

Name

string

相对父网站的Url(不是网站名称,不要被这个属性的名字迷惑)

Url

string

网站的绝对路径

Webs

SPWebCollection

网站的子网站(不包含孙网站)

 

由于几乎所有常用的对象模型都是依附于网站的,这些对象的访问也基本都以SPWeb作为起点,因此涉及到SPWeb中包含的其他对象操作访问的属性和方法,将在后文具体介绍到相应对象的时候再做详细说明。

 

6、网站集和网站的释放

由于SPSite和SPWeb的一些内部属性中,使用到了非托管资源,而这些非托管资源不受.NET的垃圾回收机制控制,因此在使用完SPSite和SPWeb对象之后,一个良好的习惯是手动将其释放掉,释放的方法是调用其Dispose方法。例如:

   1: SPSite site = new SPSite("http://sp2010/book");

   2: SPWeb web = site.OpenWeb();

   3: // use the web and site

   4: web.Dispose(); 

   5: site.Dispose();

当然,更方便的一种方式是使用C#中的using关键字,从而在使用完之后自动调用其Dispose方法。因此,一般而言,常用的写法是下面这种形式:

   1: using(SPSite site = new SPSite("http://sp2010/book"))

   2: {

   3:   using(SPWeb web = site.OpenWeb())

   4:   {

   5:     // use the web and site

   6:   }

   7: }

在SharePoint应用中,几乎所有返回的SPSite和SPWeb对象都需要上述释放过程。但是使用SPContext.Current方式获取的SPSite和SPWeb不可以释放!否则会触发一些意外情况,SharePoint运行时会自动控制这两个对象的生命周期。

SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)的更多相关文章

  1. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

    (五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打 ...

  2. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)

    (二)列表(SPList) 列表是SharePoint中最为重要的数据容器,我们一般保存在SharePoint中的所有数据,都是保存在列表中(文档库也是一种列表),因此列表对象在SharePoint的 ...

  3. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)

    (三)视图 与传统意义上的数据视图类似,SharePoint中的列表视图指定了列表中数据的筛选条件.排序条件.分组条件.显示栏/字段.显示条目数.显示样式等内容.在SharePoint中,使用SPVi ...

  4. SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

    (四)栏/字段 SharePoint中的字段(中文版中叫做"栏")与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字.日期和时间 ...

  5. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

    (三)遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库.列表的文件夹和列表条目.遍历主要有三种方式:(1)直接使用文件系统对象模型进行遍历:(2)使用SPDocumentLibrary进行遍历: ...

  6. SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 1)

    (一)概述 SharePoint权限系统是整个SharePoint体系中一个比较重要的部分,权限系统主要分成两大部分:认证和授权. 认证主要解决的问题是判断登陆者是否合法,以及他究竟是哪一个用户,Sh ...

  7. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 1)

    本节中所阐述的内容,主要适用于SharePoint文档库中的文件和文件夹,以及列表中的文件夹.系统中的其他文件(如_layouts中的文件.配置文件.程序文件等)不在本章节的讨论范围之内.   (一) ...

  8. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)

    4.添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同. 在文档库中,与一般的集合操作相同,直接使用SPFolderCollection的Add(string name)方法即可添加文件夹,例如 ...

  9. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)

    (四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似.   1.附件的读取 一个列表条目的附件可以使用SPL ...

随机推荐

  1. 【CI】系列一:总体环境规划

    上周花了点时间把CI环境再次给搞起来了,但是觉得在实体机中总觉得不是很安心,安全性不足,另外没有做备份,安全性.扩展性等都不足,且不好迁移. 因为目前只给了我一台PC及,配置其实也不怎么样.但是却需要 ...

  2. Unity 配置静态excel 工作流程

    TP:FCEE652B cause how improvement cause 在游戏开发的过程中,很多时候需要策划填的一些静态数据表(比如英雄表,技能表等等),而策划一般都习惯使用excel. ex ...

  3. RAID详解[RAID0/RAID1/RAID10/RAID5] (转)

    一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘 ...

  4. 金典 SQL笔记(2)

    由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了.

  5. 使用history.pushState()和popstate事件实现AJAX的前进、后退功能

    上一篇文章中.我们使用location.hash来模拟ajax的前进后退功能.使用location.hash存在以下几个问题: 1.使用location.hash会导致地址栏的url发生变化.用户体验 ...

  6. 服务器上使用matplotlib.pyplot绘图

    在linux服务器端执行python脚本,有时候需要画图,但是linux没有GUI界面,因此需要在导入matplotlib.pyplot库之前先执行 import matplotlib as mpl ...

  7. MySQL 使用 比较函数 INTERVAL() 函数 实现数据按区间分组

    首先看一下它的定义: INTERVAL(N,N1,N2,N3,..........) INTERVAL()函数进行比较列表(N1,N2,N3等等)中的N值.该函数如果N<N1返回0,如果N< ...

  8. CentOS 7中mariadb编译安装教程systemctl启动

    mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 跟上篇一样只是启动方式改为systemd 安装一些库 yum install gcc gcc-c++ wge ...

  9. SPOJ QTREE3 lct

    题目链接 题意: 给定n个点 q个询问 以下n-1行给出树边,点有黑或白色.初始化为白色 以下q行: 询问有2种: 1. 0 x 把x点黑变白,白变黑 2.1 x 询问Path(1,x)路径上第一个黑 ...

  10. Angularjs学习笔记2_添加删除DOM元素

    1.调用element方法     angular.element(html) 把字符串或dom对象转化成一JQuery对象, angular.element(document.getElementB ...