【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)

在一个传统的ASP.NET开发过程中,我们往往会把开发分为界面展现层、逻辑业务层和数据访问层这三个层面。作为一个应用开发平台,SharePoint是微软在直观的开发能力和自由的扩展能力之间,取到的一个平衡点,其对象模型的设计理念也反映了这两者之间的平衡。做一个并不太准确地比喻,在SharePoint中对象模型的地位就相当于传统的数据访问层,只不过我们所面对的既不是具体的和实际业务需求相关的对象实体(直观开发),也不是底层的数据库表(自由扩展),而是在SharePoint平台中诸如网站、列表、文件、用户这样的“对象”。这是SharePoint开发与传统的ASP.NET开发区别最大的一点,带着这样的思路去理解SharePoint开发,必然会事半功倍。

 

(一)SharePoint对象模型的命名特点

SharePoint常用对象模型基本上可以从名字直接看出其对应的内容,对象命名一般以“SP”开头(SharePoint的缩写),后面为所描述的内容。例如SPWeb(网站)、SPList(列表)、SPField(列表栏)、SPListItem(列表条目,注意SharePoint中也有SPItem,但是并非完全是用于描述列表条目的)、SPFile(文件)、SPFolder(文件夹)等等。

从对象属性中,也大都可以了解其所对应的内容以及相应的对象,如SPList.ParentWeb(列表所在网站,SPWeb类型)等。

在方法的参数表中,其名称也大都可以看出所表示的内容和对应类型,不过也有例外(比如一些叫做strSiteName的参数以及SPWeb的Name属性,指的并非是网站名称,而是网站的Url)。

 

(二)集合和其相关操作

在SharePoint的对象模型中,集合是一个非常重要的概念,很多类都拥有与之对应的集合类,其命名都是在类的名称后面加上“Collection”,例如SPWebCollection、SPListCollection、SPFieldCollection、SPListItemCollection等等。(但也有例外,比如SPAttachmentCollection类描述列表附件的集合,但是并没有SPAttachment类,后文会有关于此类的介绍)

在类的属性中,集合也有比较明显的体现,一般都是以相应对象的复数形式出现,例如spWeb.Lists(对应SPListCollection)、spList.Fields(对应SPFieldCollection)等等。(不过也有例外,例如spList.Folders,对应的是SPListItemCollection,而不是SPFolderCollection,其原因在后文会有详细解释)

 

1、集合中的操作

在集合中涉及到对其中对象的增、删、查、改四种操作,都有一些规律性的方法存在。在大部分常用对象模型中,基本上都包含这些操作方式,因此本章后面在介绍具体对象使用的时候,除特别声明的方法之外,将不再介绍相应对象的添加、删除和修改操作,请读者自行按照这些方法名称阅读SDK中的相关内容。

添加(Add:向集合中添加对象的时候,一般都是使用xxxCollection.Add方法,针对不同的对象可能有不同的参数表,同一种集合对象也可能有不同的重载,具体可以参考各集合类的SDK。一般而言,在执行完Add方法之后,对象即被添加到了SharePoint中(一个例外是SPListItemCollection的Add方法,即添加列表条目的方法,在后文中会详细介绍)。

删除(Delete:从集合中删除某个特定对象一般是调用集合对象的Delete方法(有些对象使用的是Remove),参数一般是对象的ID等。不过更常用的方法是直接调用该对象本身的Delete方法,可以直接删除掉对象。需要注意的是,通过对象模型的Delete方法删除的内容会确实的从SharePoint中删除掉,而不经过回收站。如果需要将内容删除到回收站中,可以使用对象的Recycle方法,一般可以被删到回收站中的对象都提供了此方法,包括SPList、SPListItem、SPFile和SPFolder。

查找(Get:这里的查找指的是从集合中找到某一个对象的方法(根据指定条件进行查询的方法会在后文进行介绍)。一般而言,集合都提供了若干种索引器进行查找,形式类似于xxxCollection[xxx],集合的索引器可以通过多种方式从集合中找到相应的对象,例如下标(和数组类似,比如listItems[0])、对象的标题(比如lists[“Customers”])、对象的GUID等。除此之外,很多集合还提供了形如GetxxxByxxx的方法,即根据xxx获取xxx,例如spListItemCollection.GetItemByID、spUserCollection.GetByEmail等等。

修改(Update):在SharePoint中,对某个对象的属性进行修改之后可能不会立即生效,需要调用对象的Update方法令修改生效。但是也有一些个别的属性是临时性的,不需要调用Update方法,比如spWeb.AllowUnsafeUpdate等,需要针对具体情况具体分析。

 

2、集合的访问

SharePoint的一些常见对象大体上可以形成一种包含关系,例如网站包含了列表、列表包含了列表条目等。在对象模型中,这种包含关系体现为集合的向下和向上访问的属性。

向下访问的属性描述了获取对象中所包含内容的集合,例如spSite.AllWebs(网站集中的网站)、spWeb.Lists(网站中的列表)、spList.Views(列表中的视图)等。

向上访问的属性描述了其对象所在的父对象,例如spView.ParentList(视图所对应的列表)、spList.ParentWeb(列表所在网站)、spWeb.Site(网站所在的网站集)等。

不过需要说明的是,在一些比较特殊的情况下,可能无法直接从子对象的属性获取到父对象(相应的属性为null),这个时候需要使用其他的手段获取到父对象,但并不意味着该对象没有父对象。

 

3、从集合获取数据的一个特性

在SharePoint的集合对象中有一个特点,就是当返回一个集合的时候,出于性能考虑并非会立刻返回集合中的所有对象;而在调用集合索引器的时候,才会真正创建相应的对象并返回,因此如下的程序写法是有问题的(虽然我们尚未介绍到具体对象模型的使用,但是通过望文生义,也能理解这段程序的功能):

(简而言之:每次使用索引器的时候,都会返回一个临时对象,因此需要显示声明一个变量,来接收索引器返回的对象,并通过该Handle进行操作!!!!!!!)

   1: // A wrong example:
   2: site.AllWebs[0].Title = "New Site Title";
   3: site.AllWebs[0].Update();

 

上面这段程序的写法相当于:

   1: SPWeb web1 = site.AllWebs[0];
   2: web1.Title = "New Site Title";
   3: SPWeb web2 = site.AllWebs[0];
   4: web2.Update();

这样的程序当然是无法得到我们期望的结果的,SharePoint包括网站、列表、列表条目等在内的集合都有这样的特性,类似的代码错误曾经出现在某些实际项目的代码中,开发人员花了很长时间才了解到这一特性,希望各位读者能够引以为鉴。上述代码的正确写法应为:

   1: // Correct Code:
   2: SPWeb niceWeb = site.AllWebs[0];
   3: niceWeb.Title = "New Site Title";
   4: niceWeb.Update();

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

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

相关文章

【LeetCode - 123】买卖股票的最佳时机 III

题目链接: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票&#xf…

【转】1.2SharePoint服务器端对象模型 之 对象模型概述(Part 2)

(三)Url 作为一个B/S体系,在SharePoint的属性、方法参数和返回值中,大量的涉及到了Url,总的来说,涉及到的Url可以分为如下四类: 绝对路径:完整的Url,包含了协议头&…

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

实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。 题目链接:https://leetcode-cn.com/problems/basic-calculator/ 示例 1: 输入:s "1 1" 输出:2 示例 2: 输入:s " 2-1 …

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

本节将会介绍SharePoint中最为常用的一些对象模型,以及如何使用这些对象模型来访问和操作网站中的数据。几乎所有的SharePoint服务器端开发都会涉及到这些内容,因此应着重掌握本节中所介绍的基本对象模型的使用方法。由于篇幅所限,在介绍每种…

【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 里去…