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的集合对象中有一个特点,就是当返回一个集合的时候,出于性能考虑并非会立刻返回集合中的所有对象;而在调用集合索引器的时候,才会真正创建相应的对象并返回,因此如下的程序写法是有问题的(虽然我们尚未介绍到具体对象模型的使用,但是通过望文生义,也能理解这段程序的功能):
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();
SharePoint服务器端对象模型 之 对象模型概述(Part 1)的更多相关文章
- SharePoint服务器端对象模型 之 对象模型概述(Part 2)
(三)Url 作为一个B/S体系,在SharePoint的属性.方法参数和返回值中,大量的涉及到了Url,总的来说,涉及到的Url可以分为如下四类: 绝对路径:完整的Url,包含了协议头(http或h ...
- SharePoint服务器端对象模型 之 使用CAML进展数据查询
SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...
- SharePoint服务器端对象模型 之 序言
对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...
- SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)
本节将会介绍SharePoint中最为常用的一些对象模型,以及如何使用这些对象模型来访问和操作网站中的数据.几乎所有的SharePoint服务器端开发都会涉及到这些内容,因此应着重掌握本节中所介绍的基 ...
- 开启貌似已经过时很久的新坑:SharePoint服务器端对象模型
5年前(嗯,是5年前),SharePoint 2010刚发布的时候,曾经和kaneboy试图一起写一本关于SharePoint 2010开发的书,名字叫<SharePoint 2010 应用开发 ...
- SharePoint服务器端对象模型 完结
整个系列已完结,大概看了一眼,平均阅读量不到200.估计也没什么人看了,而且服务器端对象模型除了在某些企业开发中会用到,从2013时代开始其实已经不是SharePoint开发的最佳选择了.不过既然已经 ...
- SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 1)
(一)概述 SharePoint权限系统是整个SharePoint体系中一个比较重要的部分,权限系统主要分成两大部分:认证和授权. 认证主要解决的问题是判断登陆者是否合法,以及他究竟是哪一个用户,Sh ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询
(一)概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大 ...
- SharePoint 服务器端对象模型 之 使用LINQ进行数据访问操作(Part 2)
(四)使用LINQ进行列表查询 在生成实体类之后,就可以利用LINQ的强大查询能力进行SharePoint列表数据的查询了.在传统SharePoint对象模型编程中,需要首先获取网站对象,再进行其他操 ...
随机推荐
- .NET--百度百科
.NET是 Microsoft XML Web services 平台.XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统.设备或编 ...
- CHAPTER ONE LOAD-BALANCING
1.1 Synopsis In this part, we will explain how to create a load-balancer withnginxfor a lot of OpenE ...
- Eclipse githup
1:选择对应eclipse版本的githup组件版本,详见网址: http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of ...
- jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...
- MvcPager帮助文档 - MvcAjaxOptions 类
表示用于 MvcPager 在 Ajax 分页模式下的选项设置,该类继承自 AjaxOptions. 公共属性: 名称 说明 默认值 AllowCache 获取或设置一个值,该值指示是否在Ajax分页 ...
- nginx 根据域名反向代理
#nginx 反向代理域名,会根据启动时候解析出来的ip,加载到内存中,后面不会改变可以绑定hosts或者指定resolve服务器来固定ip #注意proxy最后的斜杠,如果不加会将请求过来的目录带到 ...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException v2 q31
atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerExceptionv2 q31 1. #--现象 java.lang. ...
- RapidIOIP核的验证方法研究_王玉欢
RapidIOIP核的验证方法研究_王玉欢 https://wenku.baidu.com/view/0fd3c925d4d8d15abf234e73.html
- 用JWT技术为SpringBoot的API增加授权保护(转),需要自己实现userdetailservice接口
转自:https://blog.csdn.net/haiyan_qi/article/details/77373900 概述 示例 https://github.com/qihaiyan/jwt-bo ...
- POJ 2528 Mayor's posters 离散化+线段树
题目大意:给出一些海报和贴在墙上的区间.问这些海报依照顺序贴完之后,最后能后看到多少种海报. 思路:区间的范围太大,然而最多仅仅会有10000张海报,所以要离散化. 之后用线段树随便搞搞就能过. 关键 ...