在一个传统的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)的更多相关文章

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

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

  2. SharePoint服务器端对象模型 之 使用CAML进展数据查询

    SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...

  3. SharePoint服务器端对象模型 之 序言

    对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...

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

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

  5. 开启貌似已经过时很久的新坑:SharePoint服务器端对象模型

    5年前(嗯,是5年前),SharePoint 2010刚发布的时候,曾经和kaneboy试图一起写一本关于SharePoint 2010开发的书,名字叫<SharePoint 2010 应用开发 ...

  6. SharePoint服务器端对象模型 完结

    整个系列已完结,大概看了一眼,平均阅读量不到200.估计也没什么人看了,而且服务器端对象模型除了在某些企业开发中会用到,从2013时代开始其实已经不是SharePoint开发的最佳选择了.不过既然已经 ...

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

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

  8. SharePoint服务器端对象模型 之 使用CAML进行数据查询

    (一)概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大 ...

  9. SharePoint 服务器端对象模型 之 使用LINQ进行数据访问操作(Part 2)

    (四)使用LINQ进行列表查询 在生成实体类之后,就可以利用LINQ的强大查询能力进行SharePoint列表数据的查询了.在传统SharePoint对象模型编程中,需要首先获取网站对象,再进行其他操 ...

随机推荐

  1. IOS Exception2 this class is not key value coding-compliant for the key Click

    2015-06-16 23:00:53.706 MyIOSPackage[823:280049] *** Terminating app due to uncaught exception 'NSUn ...

  2. ActiveMQ简述

    概述 ActiveMQ是Apache所提供的一个开源的消息系统,全然採用Java来实现.因此.它能非常好地支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范. ...

  3. win10 VS code 编译运行 C/C++的方法

    具体配置过程如下链接: https://zhuanlan.zhihu.com/p/35178331 但中间出了点问题:CTRL+ALT+n 运行后: PS D:\C++> cd "d: ...

  4. TFTP 与 FTP的区别

    FTP(File Transfer Protocol,文件传输协议)协议在TCP/IP协议族中属于应用层协议,用于在远端服务器和本地客户端之间传输文件,使用TCP端口20和21进行传输.端口20用于传 ...

  5. sublime text3 修改左边栏背景颜色为编辑栏颜色

    用Package Control安装Theme-Afterglow插件: Ctrl+Shift+P -> install ,如图 点击Install Package,在弹出框中输入Theme-A ...

  6. xcode,不要将.a文件拖到xcode里

    如果将.a文件拖到xcode里,它自动生成的search path是错的.导致奇怪的编译错误,非常坑.这是xcode的一个bug. 或者为了省事直接将.a拖进xcode也行,但记着去Library S ...

  7. useradd命令

    ◆useradd 1.作用 useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] ...

  8. 项目实践中--Git服务器的搭建与使用指南

    一.前言 Git是一款免费.开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.在平时的项目开发中,我们会使用到Git来进行版本控制. Git的功能特性: 从一般开发者的角度来 ...

  9. Atitit.研发管理---api版本号策略与版本控制

    Atitit.研发管理---api版本号策略与版本控制 1. 1.2.1版本概述1 2. 3主版本号策略2 3. 1PATCH版本策略2 3.1. 1.2.2.1次版本号策略2 表3-1 APR中支持 ...

  10. Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows

    创建基于对话框的Windows应用程序(三) —— Checkbox的应用.窗体置顶.设置图标 上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件.这一节中我们将学习使 ...