Sharepoint学习笔记—习题系列--70-573习题解析 -(Q121-Q124)
Question 121
You develop a custom approval workflow. The workflow uses the CreateTask class to assign tasks to a user named User1.
A list called Tasks stores the tasks. Other workflows and users use the Tasks list.
You need to ensure that the tasks assigned to User1 can only be viewed by User1.
What should you do?
A. Set the CreateTask.TaskProperties property.
B. Set the CreateTask.SpecialPermissions property.
C. Break the permission inheritance for the Tasks list.
D. Assign a custom permission level to a group that contains User1.
解析:
本题是想让用户USER1只能在一个共享的Task列表中仅看到属于分配给他的工作流相关的List items。
下面分析各选项
选项A. Set the CreateTask.TaskProperties property. 此属性用于获取或设置SPWorkflowTaskProperties 对象,此对象在设创建一个WorkFlow Task时要用到,它代表WorkFlow Task的各属性。所以此处的CreateTask.TaskProperties主要针对创建Workflow Task本身,而不是针对与之相关的TaskList的。
选项B. Set the CreateTask.SpecialPermissions property.此属性用于获取或设置特定的针对新创建的Task List Item的访问权限。 这正是本题所要的。
选项C. Break the permission inheritance for the Tasks list. 打破此TaskList所继承的Permission。显然这种做法无法满足本题的要求,原因是此方法一般用于预先设置相关权限。它无法在工作流运行时动态感知工作流分配给了哪个用户,并为之分配权限。
选项D. Assign a custom permission level to a group that contains User1. 向包含了User1的组分配Custom Permission,此做法也无法达到本题的需求,原因除了选项C的描述外,它还同时对此组内的其它成员开放了对应的访问权限。
所以本题目正确选项应该是B
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.createtask.specialpermissions.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.shell.task_properties(v=vs.90).aspx
Question 122
You need to create a Web Part that displays all of the permission levels of the current subsite.
Which collection should you use?
A. SPContext.Current.Web.Permissions
B. SPContext.Current.Web.Properties
C. SPContext.Current.Web.RoleAssignments
D. SPContext.Current.Web.RoleDefinitions
解析:
本题想要获取当前子网站上的所有Permission Level信息。
Sharepoint支持网站、列表、列表文件夹或库文件夹和项等级别上的用户访问安全性。所有级别上的安全管理均基于角色【此句就基本确定了本题的选项所属的范围,即:角色Role】,这样可为跨 Windows SharePoint Services 平台的统一安全管理提供基于角色的一致用户界面和对象模型,从而为对象分配权限。
角色由两部分组成:角色定义(RoleDefinitions)和角色分配(RoleAssignments)。
角色定义(或权限级别)是与角色关联的权限列表。权限是 SharePoint 网站中唯一可控制的操作。例如,具有“读取”角色的用户可以浏览网站中的页面并查看列表中的项目。不能直接使用权限来管理用户权限,这一点与 Windows SharePoint Services 2.0 不同。所有用户权限和组权限都通过角色来管理。角色定义是与特定对象绑定的权限集合。角色定义(例如,“完全控制”、“读取”、“参与讨论”、“设计”或“受限访问”)界定于网站范围内,并且在网站内的各个位置具有相同的含义,但其在同一网站集内各网站之间的含义可能有所不同。角色定义也可以从父网站继承,就像可以继承权限一样。
角色分配是角色定义、用户和组以及范围之间的关系(例如,某用户可能是列表 1 的读者,而另一个用户是列表 2 的读者)。通过角色分配表示的关系是使 Microsoft SharePoint Foundation 安全管理基于角色的关键。所有权限都通过角色来管理;您始终不能向用户直接分配权限,而只分配定义完善、一致且有意义的权限集合(角色定义)。通过角色分配向角色定义中添加或从中移除用户和组,以此来管理独有权限。
网站管理员可以使用“管理角色”页来自定义默认角色定义和创建其他自定义角色,该页列出了网站中可用的角色定义。
本题要是提取关于子网站的Permission Level的信息,其实质是获取关于此子网站的Role的定义信息,选项D: SPContext.Current.Web.RoleDefinitions符合要求。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/en-us/library/ms414036.aspx
http://msdn.microsoft.com/zh-cn/library/ms469194(v=office.14).aspx
Question 123
You plan to create a custom Web Part that displays items from a custom SharePoint list named Project.
You need to ensure that you can access the list by using strongly-typed objects in Microsoft Visual Studio 2010.
What should you do first?
A. Run spmetal.exe.
B. Run ecmangen.exe.
C. Edit the web.config file.
D. Edit the Manifest.xml file.
解析:
本题是想要在VS2010中通过强类型方式去访问特定的列表对象。
使用 LINQ to SharePoint 提供程序是从 Microsoft SharePoint 2010 列表添加和读取项目的一种方法。此直观操作方法中描述的方法要求运行 SPMetal 实用工具来创建一个自定义数据上下文类和实体类。通过使用这些类,您可通过强类型方式访问 SharePoint 列表数据。
若要使用 LINQ to SharePoint 提供程序访问 SharePoint 2010 列表中的数据,您必须使用一个名为 SPMetal 的命令行工具 (SPMetal.exe) 来生成实体类。在从命令提示符处运行 SPMetal 实体工具时,您必须传递三个参数:包含列表的网站的 URL、用于创建实体类的命名空间和输出文件的名称。(将整个命令输入为一个行。下面的示例中的换行符仅用于提高可读性。)
SPMETAL.EXE /web:http://intranet.wingtip.com
/namespace:WingtipIntranet
/code:WingtipIntranet.cs
再来看其它选项:
选项B. Run ecmangen.exe. 它是一个进程来自Microsoft Corporation。 它可以被发现在C:\WINDOWS\system32\drivers\這是一个潜在在的安全风险,它能被病毒恶意修改。 ecmangen.exe病毒應該被禁用和删除 它可能會引起windows xp/vista/7錯誤。
选项C. Edit the web.config file. 修改配置文件并不能在VS2010中产生什么强类型支持。
选项D. Edit the Manifest.xml file. 解决方案清单文件 Manifest.xml,存储在解决方案文件的根部。该文件定义要处理的功能、网站定义、资源文件、Web 部件文件和程序集的列表。它未定义文件结构;如果在解决方案中包括文件但未在清单 XML 文件中列出这些文件,则不会以任何方式处理这些文件。很显然,此文件也与创建强类型支持无关。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/ff798478.aspx
http://msdn.microsoft.com/zh-cn/library/hh135094(v=office.14).aspx
Question 124
You have a SharePoint site collection that contains 100 sites. Each site contains 100 lists.
You need to retrieve the data from all of the lists. The data must be retrieved in the minimum amount of time.
Which access method should you use?
A. ListData.svc
B. SPListItemCollection.GetDataTable
C. SPList.Items
D. SPSiteDataQuery
解析:
本题题意是想要访问跨诸多Site的多个List,并且要用最少时间获取到数据。
分别分析各选项提供的访问方式:
选项A. ListData.svc :ListData.svc是SharePoint 2010中自带的一个ADO.NET Data Services服务。ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的扩充功能,这个功能和概念在以前的.NET 1.0-.NET3.5 技术中都没有出现的新概念,它主要用途是可以很容易的将数据库服务公开在网络上,然后透过URL网址就可以对数据库进行CRUD的操作。ADO.NET Data Services能通过一个REST化的方式将数据以Web上的数据服务展示。使得应用可以以数据服务的方式展现数据,然后被应用在企业网络和互联网上的Web客户端中。
使用 ADO.NET Data Services 框架从客户端应用程序查询 SharePoint Foundation 数据的主要优点是,查询列表数据为强类型。在 SharePoint Foundation 客户端对象模型中,任意两个 ListItem 对象是同一个类型,即使它们代表完全不同种类的列表中的项。但 ADO.NET Data Services 使用的是为目标数据上下文(网站)中的每个列表创建一个类型的对象关系映射。例如,通知列表中的项的类型称为 AnnouncementsItem,而任务列表中的项的类型称为 TasksItem。
使用 ADO.NET Data Services 框架从客户端应用程序中查询 SharePoint Foundation 数据的主要缺点是,您只能检索列表数据并写入列表。而无法通过 ADO.NET Data Services 访问其他类型的 SharePoint 数据。微软创造 ADO.NET Data Services技术和 REST 的观念,是为了「简化」程序员的工作,在分布式环境或异质平台上做数据交换时,只要透过既有的 HTTP protocol 和 URIs 网址,就能提供比 Web Service 更简易的远程程序调用能力。
所以ADO.NET Data Services主要用于分布式环境或异质平台,既然如此,其执行效率必然不会很高。
选项B. SPListItemCollection.GetDataTable 与选项C. SPList.Items 是利用Sharepoint的服务器对象模型提供的方法或属性获取列表项数据,它们都无法跨Site进行操作。
选项D. SPSiteDataQuery。在 LINQ to SharePoint 问世之前,SPQuery 和 SPSiteDataQuery 类是对 SharePoint 列表执行数据操作的主流方法。在很多方案中,这些类仍然能提供最有效的数据访问方法,并且在某些情况下,也是唯一可行的方法。
SPQuery 类和 SPSiteDataQuery 类都允许您使用协作应用程序标记语言 (CAML) 构造查询。随后可以使用 SPList 对象模型,对一个或多个 SharePoint 列表执行查询。
一、关于使用 SPSiteDataQuery类
SPSiteDataQuery 类用于从网站集内不同网站中的多个列表查询数据。SPSiteDataQuery 常用于列表聚合方案。在此类方案中,需要整理来自团队网站或其他子网站的列表数据,并将其呈现到单一界面中。与 SPQuery 类不同,不能将 join 谓词或投影字段与 SPSiteDataQuery 类结合使用。SPSiteDataQuery 实例只能从 SharePoint 列表聚合数据,并且会忽略来自外部列表的数据。
就效率而言,在以下方案中,SPSiteDataQuery 类可以提供最佳的数据访问方法【此处的描述就是本题答案的依据】:
1.当您需要从同一网站集内的多个列表中查询相同内容时
2.当您需要跨越未通过查找列建立关系的两个或更多列表进行查询时
3.您应该避免使用 LINQ to SharePoint 跨网站聚合列表数据。LINQ to SharePoint 的设计目的是跨越由查找列定义的列表关系来聚合数据。试图在 LINQ to SharePoint 中执行跨网站操作,通常需要在内存中执行查询后联接操作,而该操作需要占用大量资源。相反,SPSiteDataQuery 类针对在网站集内的多个网站中查询列表数据以及在单一网站内跨多个列表查询列表数据进行了优化。
附带了解SPQuery类访问:
二、对一般的 SharePoint 列表使用 SPQuery
在以下方案中,您应该考虑使用 SPQuery 类
1.当列表中的查找列指向网站集内(Site Collection)另一个网站中的列表时。在这种情况下,SPQuery 允许您使用跨越这两个网站的 join 谓词。尽管通过一些附加配置,您可以使用 LINQ to SharePoint 来进行跨网站查询,但是生成实体类所需的过程会更复杂。默认情况下,LINQ to SharePoint 只会返回目标列表的 ID 字段,在这种情况下,您就需要运行更多查询,以便从目标列表中检索相关的字段值。
2.当性能是首要考虑事项时。使用 LINQ to SharePoint 会带来一些额外的开销,因为 LINQ 查询必须在运行时动态转换为 CAML。如果您要运行具有时效性的操作并且性能非常重要,可能需要考虑自行创建 CAML 并使用 SPQuery 直接执行查询。一般来说,只有在极端情况下才需要使用这种方法。
对外部列表使用 SPQuery
若要查询外部列表,唯一支持的方法是使用 SPQuery 类。使用此方法,您可以完全按照查询一般 SharePoint 列表的方式来查询外部列表。但是,从外部列表访问数据时,还有一些其他的注意事项:
1.不能跨外部列表进行联接,即使在 BDC 模型中定义了实体关联也是如此。
2.可以通过向外部内容类型分配权限来指定身份验证规则。大部分 Web 服务和数据库都会实施身份验证和授权功能。您需要使用 Secure Store Service 或配置自己的安全机制,以便实施安全架构。
3.限制机制和限值与针对一般 SharePoint 列表的限值机制和限值不同。当您查询外部列表时,将应用针对 BDC 运行时的限制设置。
4.若要从沙盒应用程序中访问外部数据,如果不使用完全信任代理,就必须使用外部列表。沙盒环境禁止使用 BDC 对象模型或直接访问外部系统。因此,如果要在沙盒中运行您的解决方案,那么将 SPQuery 类和 SPList 对象模型与外部列表结合使用,就是访问外部数据的唯一选择。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.splist.items(v=office.12).aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.splistitemcollection.getdatatable(v=office.12).aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spsitedataquery.aspx