Sharepoint学习笔记—习题系列--70-573习题解析 -(Q125-Q126)
Question 125
You are creating an application for SharePoint Server 2010.
The application will run on a remote computer.
You need to identify a data access method to query lists in the application.
Strongly-typed access to columns must be provided from within Microsoft Visual Studio 2010.
Which method should you use?
A. client object model
B. LINQ to SharePoint
C. Representational State Transfer (REST)
D. server object model
解析:
本题是想在一个远程运行的应用程序上通过强类型方式访问Sharepoint列表数据。
所以核心是:远程+强类型
我们知道REST(Representational State Transfer)不是强类型访问,REST协议的一个特点,就是可以把我们需要的操作都浓缩在一个URL中,并可以通过GET、POST、PUT、DELETE、MERGE这几种HTTP访问方式,来实现列表数据的增、删、查、改。通过这种方式访问的时候,客户端使用JSON的格式把需要的数据通过某种HTTP方法发送至服务器,服务器收到相关请求,处理后即可以返回Xml格式(Atom协议),也可以返回JSON格式(如果不特别声明的话,默认使用Atom协议,也就是Xml格式)的处理结果。和客户端对象模型相同的是,我们通过Url,可以定义所需要返回的那些字段值,从而减少客户端和服务器端的数据传递大小。所以,REST所提供的接口XML/JSON都是字符串类型(需要注意:由VS创建的用于封装你的List/Content类型的代理类[Proxy]却是强类型的)。
LINQ to SharePoint 提供程序是在 Microsoft.SharePoint.Linq 命名空间中定义的。它将 LINQ 查询转换为协作应用程序标记语言 (CAML) 查询。开发人员无需再了解如何编写 CAML 查询。LINQ 查询可在服务器代码中使用。若要从客户端应用程序中查询请使用 SharePoint 对 ADO.NET Data Services 的支持。所以LINQ to SharePoint不能在客户端(Remote Computer)使用。
server object model 就是服务器端对象模型,顾名思义,只能在服务器端使用。
server object model 即客户端对象模型。客户端对象模型包含了许多与Sharepoint对象打交道的强类型类。Microsoft SharePoint Foundation 2010 引入了三个用于从以下位置与 SharePoint 网站交互的全新客户端 API:.NET 托管应用程序(Microsoft .NET Framework 3.5 或更高版本)、Microsoft Silverlight 应用程序(Silverlight 2.0 或更高版本)或在浏览器中执行的 ECMAScript(JavaScript、JScript)。这些新的 API 可访问服务器端对象模型的 Microsoft.SharePoint 命名空间中包含的部分类型和成员。
新客户端对象模型提供了面向对象的系统,用于从远程计算机与 SharePoint 数据进行互操作,并且这些客户端对象模型在许多方面都比现有 SharePoint Foundation Web 服务更易于使用。您可以先检索代表当前请求上下文的客户端上下文对象,通过此上下文,您可以访问网站集级别或 SharePoint Foundation 层次结构中更低级别的客户端对象。客户端对象从 ClientObject 类 (JavaScript: ClientObject (该链接可能指向英文页面)) 继承,您可以使用它们检索特定 SharePoint 对象的属性、检索子对象及其属性,或检索集合中的子项。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/ee535231.aspx
http://msdn.microsoft.com/zh-cn/library/ee535491(v=office.14).aspx
Question 126
You create a custom list named Products.
You need to perform a Representational State Transfer (REST) query that returns products 30 to 39.
Which URL should you use?
A. /ListData.svc/Products(30) $skip=10
B. /ListData.svc/Products(39) $skip=30
C. /ListData.svc/Products $skip=10&$top=30
D. /ListData.svc/Products $skip=30&$top=10
解析:
本题试图通过REST方式从Sharepoint的Products列表中读取从第30到39条记录。
先了解一下REST的相关知识点:
SharePoint Foundation 2010 引入了客户端对象模型,允许开发人员通过其选择的 Web 编程技术与 SharePoint 远程交流:.NET Framework、Microsoft Silverlight 或 JavaScript。 SharePoint 2013 引入了可与客户端对象模型完全匹敌的代表性状态传输 (REST) 服务。在 SharePoint 2013 中,客户端对象模型的几乎每个 API 都将有对应的 REST 端点。现在,开发人员可以通过任何支持 REST Web 请求的技术与 SharePoint 对象模型远程交互。
SharePoint 2013 新增了使用 REST 与 SharePoint 网站远程交互的功能。现在,您可以使用任何支持标准 REST 功能的技术直接与 SharePoint 项目进行交互。
要使用内置于 SharePoint 2013 的 REST 功能,您可以根据对应于所需客户端对象模型 API 的开放数据协议 (OData) 标准构建 RESTful HTTP 请求。client.svc Web 服务可以处理 HTTP 请求并以 Atom 或 JSON(JavaScript 对象表示法)格式作出适当的响应。然后,客户端应用程序必须分析该响应。
SharePoint 2013 REST 服务中的终结点对应于 SharePoint 客户端对象模型中的类型和成员。通过 HTTP 请求,您可以使用这些 REST 端点对 SharePoint 工件(如列表和网站)执行典型的 CRUD(Create、Read、Update 和 Delete)操作。
默认情况下,通过使用 Atom 协议根据 OData 规范对 SharePoint 2013 REST 服务响应进行格式设置。此外,REST 服务支持 HTTP Accept 标题,允许您规定以 JSON 格式返回响应。
OData 查询运算符支持
SharePoint REST 服务支持多种 OData 查询字符串运算符,使用这些运算符,您可以选择、筛选及订购您请求的数据。
选择要返回的字段:使用 $select 查询选项指定针对给定列表、列表项或实体集表示的其他 SharePoint 对象返回的字段。您可以使用 $select=* 来返回所有可用字段。
通常,如果您不指定 $select 查询选项,则 REST 服务默认返回所有可用字段。但是,在少数几种情况下,某些 SharePoint 对象包含检索资源极为密集的属性;为了优化 REST 服务性能,默认查询中并不包含这些属性,必须显式请求。例如,默认情况下不返回 SPWeb.EffectiveBasePermissions 属性,必须使用 $select 查询选项显式请求。
此外,您可以指定请求从其他列表返回预计字段和查询值。为此,请在 $select 和 $expand 查询选项中指定字段名称。例如:
http://server/site/_api/web/lists('guid')/Products?$select=Title,Products/Name&$expand=Products/Name
选择要返回的项
使用 $filter 查询选项选择要返回的项。下图列出 SharePoint REST 服务支持的筛选查询比较选项和功能。
下图展示了支持的 OData 查询选项:
单个值循环字段查询:单个值循环字段由 SharePoint REST 服务中两个单独的字段表示:一个字段表示实际字段值,另一个表示字段名称。您可以像对该数据类型的任何其他字段一样对循环字段值执行查询。例如,如果查询字段值为字符串,则可以在查询中使用字符串比较选项。
用户查询:在 SharePoint REST 服务中,用户用用户的友好(显示)名称,而非其别名或域\别名组合表示。因此,您必须阵对用户的友好名称构造用户查询。它不支持基于成员类型的用户查询。不支持使用 Current 运算符查询当前用户的 ID。
多值循环字段和用户查询: 由于多值循环字段作为多值字符串返回,因此无法进行查询(例如,不支持 Includes 元素或 NotIncludes 元素的等效物)。
对返回的项进行排序:使用 $orderby 查询选项指定如何对查询返回集中的项进行排序。要对多个字段进行排序,请指定以逗号分隔的字段列表。您还可以通过将 asc 或 desc 关键字附加到查询指定是按升序还是降序对项进行排序。
翻阅返回的项:使用 $top 和 $skip 查询选项选择查询以其他方式返回的项的子集。
使用 $top 选项,您可以选择返回返回集的前 n 个项。例如,以下 URI 请求实际返回潜在返回集中的前 10 个项:
http://server/site/_api/web/lists('<guid>')/items$top=10
使用 $skip 选项,您可以跳过指定数目的项返回剩余的项。
下面是REST的URL的一般语法结构:
http://SPServer/_vti/bin/ListData.svc/{Entity}[({identifier})]/[{Property}]
对于上述的元素:
ListData.svc – wcf srevices that follows REST protocol.
Entity – 是Sharepoint的列表的名字
Identifier –可以是列表项的ID
Property –列表的字段
你也可以使用过滤功能,例如下面的示例返回列表Cites中City字段为’NJ’的列表项
/_vti/_bin/ListData.svc/{Entity}?filter=Cities/ City eq ‘NJ’
现在回到本题,本题其实就是考你使用REST方式翻阅返回的项,本题的目的是读取从第30到39条记录:
选项A. /ListData.svc/Products(30) $skip=10 找到ID的值为30的项并返回,忽略前10条记录
选项B. /ListData.svc/Products(39) $skip=30 找到ID的值为39的项并返回,忽略前30条记录
选项C. /ListData.svc/Products $skip=10&$top=30 返回从10到39条的记录
选项D. /ListData.svc/Products $skip=30&$top=10 返回从30到39条的记录
所以本题目正确选项应该是D
参考:
http://mysharepointwork.blogspot.com/2010/09/using-rest-to-get-data-form-sharepoint.html
http://msdn.microsoft.com/en-us/library/ff798339.aspx