【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)

 

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

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

  

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

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

SPSite 对应的是站点集 (sitecollection),站点集只能总管理中心创建, 从某种程度上来说,也可以理解为根站点;
SPWeb对应的是站点(Site), 站点是从当前站点创建的,站点下面还可以包括站点;
如果你是学习开发,那么这段代码是你常用的:
using(SPSite oSiteCollection = new SPSite("http://Server_Name"))
{
    using(SPWeb oWebsite = oSiteCollection.OpenWeb("Website_URL"))
    {
        SPList list=oWebsite.Lists["mylist"];
  ...
    }
}
更多的内容请参考 SDK:http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spsite.aspx

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运行时会自动控制这两个对象的生命周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode - 1047】删除字符串中的所有相邻重复项(栈)

https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/ 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复…

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

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

【LeetCode - 227】基本计算器 II(栈)

https://leetcode-cn.com/problems/basic-calculator-ii/ 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s "32*2" 输出:7 示例 2: 输入…

Team Foundation Server的回滚操作

VSTF Rollback 操作 最近遇到要把有些项目需要做回滚操作,发现TFS的UI上没有回滚的操作。 经过百度,查到一个CSDN上的博主发了一种方法,经过验证,那种方法是错误的: 他通过先获取指定变更集-》签出-》签回去&#xff…

【LeetCode - 141142】环形链表(i和ii)(快慢指针,链表)

https://leetcode-cn.com/problems/linked-list-cycle/ 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾…

sharepoint的文件是怎样存放的及存放的表是哪个

主要有两个表,一个是AllDocs,另一个是AllDocStreams,在AllDocstreams有一个content字段,这个字段是用来保存文件内容的,这个字段最大只能放2G,这也就是SharePoint上传文件最大不能超过2G的原因。 表 AllDoc…

【LeetCode - 556】下一个更大元素 III(贪心,思维)

https://leetcode-cn.com/problems/next-greater-element-iii/ 给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。 注意 ,…

SharePoint Pages(1)之SharePoint页面体系架构

[开篇]最近一段时间在研究SharePoint技术,在内网建设了一个门户的原型,做一些尝试。由于一些需求要新建一些功能页。开始使用SharePoint制作页面,搞了半天才明白原来内容页不支持内联代码,在Visual Studio里面捣鼓了半夜&#xff…

逆序数问题,用归并排序而非树状数组求解

逆序数,结合归并排序。 之前一直用树状数组写的,今天发现归并排序也很好写。 https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tabanswerKey class Solution { public:int a[200005] {0}, tmp[200005] {0};int sort(int left…

SharePoint安全 - SharePoint网站常用页面URL索引

一. 主要网站内容 首页 /default.aspx /Pages/default.aspx 网站设置 /_layouts/settings.aspx 所有网站内容 /_layouts/viewlsts.aspx 移动端所有网站内容 /_layouts/mobile/mbllists.aspx 共享文档 /shared documents/forms/allitems.aspx 管理网站内容结构 /_l…

docker安装与学习

安装Docker 系统环境:macOS Catalina 10.15.7 通过brew安装docker brew install --cask --appdir/Applications docker 直接brew install docker装上的好像不是,好像是当成了formula了。如下图 brew cask install docker直接提示命令不对&#xff0c…

集群、分布式、负载均衡区别与联系

1、Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 集群是一个统称,他分为好几种,如:高性能科学群集、负载均衡群集、高可用性群集等。 科学群集 、高性能集群(High performance clus…

Mac下使用brew的常用步骤

以docker为例: 第一步: 先 brew search 软件名 然后发现在Formulae和Casks中都有docker包。 第二步: 分别查看info brew info dockerbrew info homebrew/cask/docker 从详情中可以看出,cask下的才是Docker Desktop for Mac&a…

End User 访问SharePoint URL获取数据流程

当一个User用一个独立的URL请求一个Page页的时候,Client端要创建一个Http请求数据包。然后,Client通过解析DNS去获取HostName来确定IP地址:比如Intranet.contoso.com 客户端在数据包的HostHeader Field添加HostName —>客户端然后通过默…

【MOSS】快速调试Sharepoint站点

1、打开网站根目录下的web.config 1.将<SafeMode ... CallStack"false" ...... AllowPageLevelTrace"false">中的CallStack和AllowPageLevelTrace的属性设置为“true”。 2、 将<customErrors mode"On" />的mode改为"Off&quo…

【机器学习】 - keras中的模型可视化plot_model模块(含依赖包pydot和graphviz的详细安装过程与注意事项)

运行环境&#xff1a; win10 anaconda3-spyder python3.7.4 tensorflow2.0.0 首先需要安装两个包pydot和graphviz&#xff0c;不然会报错&#xff1a; Failed to import pydot. You must install pydot and graphviz for pydotprint to work. 然后去anaconda prompt 里去…

Sharepoint域账户,运行Power Shell报错

以其他域账户登陆Sharepoint 2013 服务器&#xff0c;并以管理员权限运行SharePoint 2013 Management Shell时&#xff0c;出现如下错误&#xff1a; The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered. 同时&#xff0c;所有SharePoin…

【Linux学习】常用指令-sortunique

假设当前文件叫file.txt sort将文件的每一行作为一个单位&#xff0c;相互比较&#xff0c;比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 sort的-u选项 它的作用很简单&#xff0c;就是在输出行中去除重复行。 sort的-r选项…

【Linux学习】强大的文本分析工具AWK

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&#xff0c;Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 调用AWK&#xff1a; 1.命令行方式&#xff08;常用&#xff09; awk [-F field-separator] commands input-file(s) 其中&#xff0c;comman…

【Knockout】二、监控属性Observables

MVVM和viewModel Knockout是建立在以下三大核心功能之上的&#xff1a; 监控属性和依赖跟踪&#xff08;Observables and dependency tracking&#xff09;声明式绑定&#xff08;Declarative bindings&#xff09;模板&#xff08;Templating&#xff09; 首先让我们先来了解…