[SharePoint 2010 的那些事儿-客户端对象模型]初识SharePoint客户端对象模型
一直以来SharePoint都为我们提供了丰富的服务器端对象模型,利用这些服务器端对象模型Developer们可以对MOSS做出各种扩展,并以此来实现最终用户的各种要求。但在今天各种RIA技术大行其道的时代,传统的Web应用程序有时已经不能很好的满足用户的需求了。在MOSS 2007时,要想开发一个可以连接到SharePoint的客户端应用程序我们只能选择利用SharePoint Web Service或是自己开发的Web Service来完成,个人感觉这种方法真的是很不方便。不过现在好了,利用SharePoint 2010 新加入的客户端对象模型可以使我们更简单的完成这一工作。简而言之,客户端对象模型拥有服务器端对象模型的大部分功能(注意,不是全部功能),不论是在传统的基于.Net Framework的客户端应用程序中,还是在WPF或Silverlight应用程序中,又或者是在JavaScript中,都可以通过客户端对象模型与SharePoint 2010进行交互。
SharePoint 2010中的客户端对象模型可以分为两类:一类为托管客户端对象模型,主要被用于WinForm、WPF、Silverlight等技术开发的客户端应用程序中;另一类为ECMAScript对象模型,这一类则主要是在JavaScript等脚本语言中被使用。
下表列出了服务器端、托管客户端、ECMAScript中的几个主要对象模型。其实不难看出不管是托管客户端对象模型还是ECMAScript对象模型,它们都与服务器端的对象模型具有极大的相似度,对于拥有SharePoint开发经验的Developer们来说,可以非常快速的掌握SharePoint客户端对象模型的使用。不过有相似就有不同,事物永远是两面的,客户端对象模型毕竟不是服务器端对象模型,它能实现的功能也仅仅是服务器端对象模型所能实现的功能的一个子集。例如,客户端对象模型就没有提供任何高于网站集范围的对象,与管理相关的对象模型也不会出现在客户端对象模型中。
服务器端对象模型 |
托管客户端对象模型 |
ECMAScript对象模型 |
Microsoft.SharePoint.SPContext |
Microsoft.SharePoint.Client.ClientContext |
SP.ClientContext |
Microsoft.SharePoint.SPSite |
Microsoft.SharePoint.Client.Site |
SP.Site |
Microsoft.SharePoint.SPWeb |
Microsoft.SharePoint.Client.Web |
SP.Web |
Microsoft.SharePoint.SPList |
Microsoft.SharePoint.Client.List |
SP.List |
Microsoft.SharePoint.SPListItem |
Microsoft.SharePoint.Client.ListItem |
SP.ListItem |
在使用客户端对象模型时一般分为四个主要步骤:
-
使用ClientContext对象获得某个SharePoint站点的引用。ClientContext是客户端对象模型中的核心对象,在与某个SharePoint网站进行交互或是查询某个列表中的数据是,首先要做的就是实例化一个特定网站集的上下文对象。
ClientContext clientContext = new ClientContext("http://win-hc230s1mtnr/sites/personal/sharepoint");
或
需要注意的是在使用托管客户端对象模型的ClientContext构造函数时其参数必须为某个特定网站的绝对URL,而在使用ECMAScript对象模型时ClinetContext构造函数可以使用某个网站的相对地址或者不使用参数。
var clientContext = new SP.ClientContext(' /sites/personal/sharepoint ');
-
第二步就是指定我们要具体查询或操作的对象了。
Web oWebsite = clientContext.Web;
或
this.oWebsite = clientContext.get_web();
-
使用Load()方法或是LoadQuery()方法来定义一个查询以执行特定操作并返回特定对象或属性。
clientContext.Load(oWebsite);
或
clientContext.load(oWebsite);
-
在加载过查询后,对于托管客户端对象模型可以调用ExecuteQuery()或ExcuteQueryAsync()方法来执行查询,对于ECMAScript对象模型则只支持executeQueryAsync()异步查询的方法。需要注意的是只有在执行了查询操作之后,在第二步中所定义的那些对象才能使用,否则它们只能返回null。
clientContext.ExecuteQuery();
或
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
以上这四步就是使用客户端对象模型的基本步骤,在下一篇文章中将对如何使用客户端对象模型查询SharePoint数据进行更详尽的说明,希望各位看官可以继续关注小弟的博客,多谢~~