Question 77
You have a SharePoint list named Announcements.
You have an event receiver that contains the following code segment. (Line numbers are included for reference only.)
01 public override void ItemAdding(SPItemEventProperties properties)
02 {
03 if (properties.ListItem["Title"].ToString().Contains("secret"))
04 {
05
06 }
07 }
You need to prevent users from adding items that contain the word "secret" in the title to the list.
Which code segment should you add at line 05?
A. properties.Cancel = false;
B. properties.Cancel = true;
C. properties.Status = SPEventReceiverStatus.Continue;
D. return;
解析:
本题是想在ItemAdding这个Event中操控添加的Item,如果新添加的Item的Title Field的值包含了” secret”单词,则取消添加操作。
如果看了Question 75的解析,你就应该能判断本题的正确答案了。因为SPItemEventProperties与SPListEventProperties 均使用Cancel属性来获取或设置是否取消当前的Event。 而Status属性则用于获取或设置当前俘获的Event的状态值。
选项D: return则是用于终止它出现在其中的方法的执行并将控制返回给调用方法。与仅中止当前的Event事件没有关系。
所以本题目正确选项应该是B
参考:
SPItemEventProperties Class
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventproperties.aspx
Question 78
You have a timer job that has the following constructors. (Line numbers are included for reference only.)
01 public TimerJob1 () : base() { }
02 public TimerJob1(SPWebApplication wApp)
You need to ensure that the timer job runs on the first available timer server only.
Which base class constructor should you use at line 02?
A. public TimerJob1(SPWebApplication wApp) : base
(null, wApp, null, SPJobLockType.ContentDatabase) { }
B. public TimerJob1(SPWebApplication wApp): base
(null, wApp, null, SPJobLockType.Job){ }
C. public TimerJob1(SPWebApplication wApp):base
(null, wApp, null, SPJobLockType.None) { }
D. public TimerJob1(SPWebApplication wApp):base
("TimerJob1", wApp, null, SPJobLockType.None) { }
解析:
本题是想要实现只在第一个可用的timer server上运行。通过在外层来封装了一个TimerJob1函数来隐藏SPJobLockType知识点。
本题的核心就在于了解SPJobLockType的备选值:
1.SPJobLockType.None :可确保在运行 Microsoft SharePoint Foundation Web 应用程序服务的所有服务器上运行此作业。
2. SPJobLockType.Job : 可确保仅在运行 Microsoft SharePoint Foundation Web 应用程序服务的第一台可用服务器上运行此作业
3. SPJobLockType.ContentDatabase:在处理作业时,锁定内容数据库
所以只有选项B采用了SPJobLockType.Job,即可确保仅在运行 Microsoft SharePoint Foundation Web 应用程序服务的第一台可用服务器上运行此作业。
所以本题目正确选项应该是B
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjoblocktype.aspx
http://msdn.microsoft.com/zh-cn/library/ff464297(v=office.14).aspx
Question 79
You create a client application that remotely calls the Business Connectivity Services (BCS) object model.
You need to create the context that will be used to request a cache refresh.
Which code segment should you use?
A. BdcService cCtx = SPFarm.Local.Services.GetValue<BdcService>(string.Empty);
B. ClientContext cCtx = new ClientContext(string.Empty);
C. RemoteOfflineRuntime cCtx = new RemoteOfflineRuntime();
D. RemoteSharedFileBackedMetadataCatalog cCtx = new RemoteSharedFileBackedMetadataCatalog();
解析:
本题是想以编程方式从一个客户端应用程序中执行缓存刷新。 这属于BCS的应用模型。
下面我们就先来了解一下其大致的背景知识。
首先什么是BCS: Microsoft Business Connectivity Services (BCS) 是 Microsoft Office 2010 和 SharePoint 2010 中的一项功能,旨在帮助开发人员和用户将数据放入 SharePoint。 在 SharePoint 中呈现外部数据能让用户构建复合应用程序,以便更好地访问关键信息,更方便地与这些信息交互。也就是说:BCS是Sharepoint用来与外部打交道的。
通过 BCS,您可以开发自己的外部应用程序,或使用诸如 Office 应用程序(Excel、Outlook、InfoPath、Word 等)和 SharePoint 处理后端系统中的数据。 Office 2010 和 SharePoint 2010 都提供 BCS 组件,因此,该组件在客户端计算机和服务器计算机上均可用。
在设计支持 BCS 的解决方案时,首先是定义一个实体模型,该实体模型可以连接到外部系统,并将来自这些外部数据结构的数据映射到 BCS 数据结构中。 该实体模型称为“外部内容类型”(ECT)。 通过 SharePoint Designer 或 Visual Studio,可以根据需要为解决方案创建任意多的 ECT。ECT 元数据(包括用于定义实体模型的代码)将发布和存储在一个 SharePoint 元数据存储中。 通过 SharePoint 工作区或 BCS 提供的独立打包工具,可以将发布的 ECT 模型下载并安装在用户客户端计算机上。
在运行时,客户端或服务器上的 BCS 运行时组件调用该 ECT 模型来与外部系统通信。
在客户端上,来自外部系统的数据缓存在用户计算机上的 SQL Server Compact Edition (SQL CE) 数据库之中。 缓存的数据随后可通过 BCS API 在 Office 应用程序中进行显示和操作。 由用户对缓存数据所做的更改将在用户计算机上的同一 SQL CE 数据库中进行排队。 随后,BCS 运行时组件负责通过 ECT 模型将这些更改更新到外部系统。
大部分时候,由BCS运行时来负责缓存与数据实体的同步,但有些时候,用户希望从外部系统明确刷新其本地缓存。这就是本题产生的背景。
Microsoft Business Connectivity Services (BCS) 提供了丰富且可扩展的对象模型,您可以利用这些模型创建基于现有 Business Connectivity Services 功能构建的自定义解决方案。
1.BDC 对象模型:包括(i.服务器和客户端上的 BDC 运行时对象模型。ii.服务器上的 BDC 管理对象模型和客户端上的 BDC 管理客户端对象模型)
2.客户端上的 BCS 缓存对象模型【这就是本题需要用到的对象模型】
3.运行 SharePoint Server 2010 的服务器上的 BCS 解决方案包对象模型(此对象模型在 SharePoint Foundation 2010 中不可用)
来看看本题用到的客户端上的 BCS 缓存对象模型:
Microsoft Business Connectivity Services (BCS) 提供了一个公共对象模型(即 Microsoft.BusinessData.Offlining 命名空间)以便以编程方式刷新 BCS 客户端缓存、修改缓存订阅和查找并纠正错误。
在 BDC 运行时对象模型中的方法实例级别,可利用 Business Connectivity Services 传入一个操作模式,该模式告知运行时是否要使用缓存以及如何使用缓存。Business Connectivity Services 支持两类缓存使用模式,如下所示:
1.联机 如果将应用程序设置为联机模式,则不使用缓存。对外部系统的所有调用(例如,Read 和 Update)将通过 Business Data Connectivity (BDC) Service 运行时直接传送到外部系统。
2.缓存 如果将应用程序设置为缓存模式,则使用缓存。在部署时,使用外部系统中的实体实例填充缓存,并按指定间隔刷新外部系统中的数据。不会立即将操作传送到外部系统,而是将其传送到缓存。缓存会将这些操作放入操作队列,并逐个执行它们。
由上可知,本题要用到的功能存在于Microsoft.BusinessData.Offlining 命名空间中。当我们以编程方式请求客户端上的缓存刷新时,我们需要用到RemoteOfflineRuntime对象,下面就是一段示例代码(此代码在运行时将启动 BCSSync 服务(如果该服务尚未运行)并在 BDC 客户端缓存中请求刷新。):
RemoteOfflineRuntime offlineRuntime = new RemoteOfflineRuntime();
ISubscriptionManager subManager = offlineRuntime.GetSubscriptionManager();
ISubscription sub = subManager.GetSubscription("<EntityNameSpace>", "<EntityName>", "<ViewName>", "<SubscriptionName>");
sub.RequestRefresh(true);
有了上述示例代码,我们很快就能定位本题的答案即:选项C
选项A:定义了一个BDCServie对象并试图获取BCS服务的引用。Business Data Connectivity (BDC) Service 是新版本的业务数据目录,它之前是在 Microsoft Office SharePoint Server 2007 中提供的,现在在 Microsoft SharePoint Foundation 2010 中提供。BDC 作为 Microsoft SharePoint Foundation 2010 中的共享服务实现,并且它仍依赖于元数据存储。利用 BDC 服务,您能以声明方式对外部系统进行建模,以便您能公开 SharePoint Server 2010 中的外部数据(对于 具有企业版客户端访问许可证的 Microsoft SharePoint Server 2010,也可在 Microsoft Office 2010 应用程序中执行此操作)。BDC 填补了 SharePoint 网站和业务应用程序之间的间隙,使您能够将各种外部系统中的关键数据引入 SharePoint 列表(通过新的外部列表功能和外部数据列)、Web 部件、搜索、用户配置文件和自定义应用程序。本选项就试图获取BCS服务的引用。
选项B:试图创建一个ClientContext对象,ClientContext对象是Sharepoint客户端对象模型的重要组成。可以使用它来返回当前WebApplication,Site,Site Collection或者Server version等的上下文相关信息。
选项D:也属于BCS的编程范畴,RemoteSharedFileBackedMetadataCatalog用于获取元数据目录。若要通过 Office 2010 加载项使用 BDC,则您的代码必须先获取对元数据目录的访问权。若要访问 BCS 客户端缓存,则应获取 RemoteFileBackedMetadataCatalog。
所以本题目正确选项应该是C
参考:
http://msdn.microsoft.com/zh-cn/library/ee559351.aspx
http://msdn.microsoft.com/zh-cn/library/ff464331(v=office.14).aspx
http://msdn.microsoft.com/zh-cn/library/ee556378(v=office.14).aspx
http://msdn.microsoft.com/zh-cn/library/ff464395(v=office.14).aspx
Question 80
You need to programmatically add a user named User1 to a group named Group1.
You write the following code segment. (Line numbers are included for reference only.)
01 string login = "User1";
02 string grpName = "Group1";
03 SPUser user = SPContext.Current.Web.EnsureUser(login);
04 SPGroup group = SPContext.Current.Web.Groups[grpName];
05
06 group.Update();
Which code segment should you add at line 05?
A. group.AddUser(user);
B. group.Owner = user;
C. user.AllowBrowseUserInfo = true;
D. user.Update();
解析:
本题想要向一个Group中添加一个User。
本题即使凭感觉也应该能找准答案,因为操作是针对SPGroup对象的,添加的参数是SPUser对象,所以应该用SPGroup对象的AddUser方法来添加一个SPUser对象,答案是A。
选项B. group.Owner = user;设置这个Group的所有者为此用户。
选项C. user.AllowBrowseUserInfo = true; 标志此用户是否有权获取Web site的其它用户的信息。
选项D. user.Update();更新此用户信息到数据库中。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spgroup.adduser.aspx
http://msdn.microsoft.com/en-us/library/ms456617.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spgroup.aspx