Client Object Model

Client Object Model

我们知道Microsoft SharePoint 2010 提供了三个新的客户端 API,这些 API 允许您通过在浏览器中执行的脚本、在 .NET 托管应用程序中执行的代码(Microsoft .NET Framework 3.5 或更高版本)或在 Microsoft Silverlight 2.0 应用程序中执行的代码与 SharePoint 网站进行交互。
这里我们来看看如何在Sharepoint网站中引入ECMAScript(JavaScript、JScript) 客户端对象模型。
首先是几点说明:
1、ECMAScript对象模型只能用于Sharepoint站点。也就是说你不能通过传统的Asp.net网站使用ECMAScript对象模型来跨网站访问Sharepoint网站资源。
2、与上面类似,你也不能在一个Sharepoint站点上使用ECMAScript对象模型来跨网站访问其它Sharepoint网站的资源。(如:从Sharepoint网站 url: MySite.MySharepoint.com通过ECMAScript对象模型去访问另一个Sharepoint网站 url: YourSite.YourSharepoint.com上的资源)
3、你可以把JQuery与ECMAScript对象模型直接结合使用而无需多余的其它准备工作。你只需要在你的Sharepoint项目中引用JQuery.js就行了。
4、当你在Sharepoint网站的Webpart页面或者application页面(aspx page)上使用ECMAScript对象模型时,你只需要引用SP.js就可以了。<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" Localizable="false" />
5、如果你打算通过ECMAScript对象模型来修改Sharepoint网站上的相关资源,你需要加入FormDigest标签。<SharePoint:FormDigest runat="server" />

6、 在sp.js被加载后才执行你的JavaScript代码。
有时你想要执行的Javascript代码功能会基于sp.js文件,如果sp.js没有加载,你所定义的Javascript代码就会报错。因此,我们需要人为介入,保证sp.js在我们定义的Javascript功能之前先行加载。 为达到此目的,我们需要使用ExecuteOrDelayUntilScriptLoaded功能。代码如下

ExecuteOrDelayUntilScriptLoaded(myjsfucntion, "sp.js");

7、 在ECMAScript对象模型中使用JQuery
ECMAScript对象模型与JQuery没有任何冲突,你只需要加入JQuery的引用即可,唯一需要注意的就是如果你想要在Page Load Event中执行Javascript,你必须把这个 Javascript的功能段放置到ExecuteOrDelayUntilScriptLoaded中(如上面所示)

如果添加JQuery可以参考Sharepoint学习笔记—Delegate Control--在Sharepoint页面添加jQuery

可以使用新的客户端对象模型来检索特定 SharePoint 客户端对象(ClientObject,或者 ECMAScript(JavaScript、JScript) 中的 ClientObject (该链接可能指向英文页面))的属性,或检索子对象及其关联的属性或集合中的子项。对象模型使用显式数据检索语义,在检索正常工作的数据时,必须遵循这些语义。客户端对象模型不保留在客户端上本地检索的数据。

执行数据检索涉及以下过程:

  1. 使用 ClientContext() 构造函数 (JavaScript: ClientContext(serverRelativeUrl) (该链接可能指向英文页面)) 返回客户端请求的上下文。

  2. 使用对象模型指定要检索的对象或要从中检索数据的对象。

  3. 通过就地加载或可查询加载来加载对象或集合,就地加载使用 Load<T>(T, []) (JavaScript: load(clientObject) (该链接可能指向英文页面)) 方法返回特定的对象、集合或数据;可查询加载使用 LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp) (该链接可能指向英文页面)) 方法返回对象的可枚举集合。

  4. 通过在客户端对象模型的 .NET 托管版本中调用同步 ExecuteQuery() 方法执行查询,或者在 Silverlight 版本中,当代码从不修改用户界面 (UI) 的线程执行时,执行查询。在对象模型的 JavaScript 版本中,或者当 Silverlight 版本修改 UI 时,数据检索过程将使用异步回调模型,并且您必须调用 ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) 方法 (JavaScript: executeQueryAsync(succeededCallback, failedCallback) (该链接可能指向英文页面)),该方法包括用于处理成功或失败请求的方法参数。当执行查询的方法调用返回(同步或异步)时,您可以访问从中启动查询的对象上的查询结果。

可通过两种方法对客户端对象模型使用基于 LINQ 的查询:通过就地加载和通过可查询加载。可查询加载在另一个结果数组中返回数据,而就地加载在对象本身中返回数据。

就地加载会发出加载对象及其数据的请求,并通过多个请求保留对象标识。可以通过客户端上下文的 Load<T>(T, []) 方法执行就地加载。以下示例加载当前网站的所有列表及其所有默认属性。执行查询后,代码将可以访问整个列表集合和默认的列表属性:

C#
clientContext.Load(clientContext.Web.Lists); 
clientContext.ExecuteQuery();

在可查询加载中,查询与返回的结果分隔开。与就地加载不同,在可查询加载中,不会保留对象标识,因此您的代码必须自己维护返回的对象。以下示例使用查询语法返回网站的所有列表。

C#
VB
var query = from list 
    in clientContext.Web.Lists 
    select list;

var result = clientContext.LoadQuery(query);

clientContext.ExecuteQuery();

数据检索:

http://msdn.microsoft.com/zh-cn/library/ee539350(v=office.14).aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值