Sharepoint学习笔记—习题系列--70-573习题解析 -(Q100-Q103)

Question 100
You create a Web Part.
You need to display the number of visits to a SharePoint site collection in a label named LblVisits.
You write the following code segment. (Line numbers are included for reference only.)
01 SPSecurity.RunWithElevatedPrivileges(delegate()
02 {
03   try
04   {
05    
06     LblVisits.Text = site.Usage.Visits.ToString();
07   }
08   finally
09   {
10    
11   }
12 });
Which code segment should you add at line 05?
 A. SPSite site = new SPSite(SPContext.Current.Site.ID);
B. SPSite site = SPContext.Current.Site;
C. SPSite site = SPContext.GetContext(HttpContext.Current).Site;
D. SPSite site = SPControl.GetContextSite(HttpContext.Current);

解析:
  本题是想要获取访问当前网站集的所有来访者的数量。
  考点还是对RunWithElevatedPrivileges的理解。如Question99的描述,当我们通过调用RunWithElevatedPrivileges提升在SharePoint上下文中的权限后,我们必须接着创建一个SPSite和SPWeb类的实例。
  本题所有选项中只有选项A另外创建了一个SPSite类。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges(v=office.14).aspx

 

Question 101
You add a delegate control to the <head> section of a custom master page. You reference a default script file by using the delegate control.
You need to ensure that the delegate control meets the following requirements:
 Prevents other developers from deleting the default script reference
 Provides developers with the ability to add additional script references
 Provides developers with the ability to change the order of the script references
Which property should you use?
A. AllowMultipleControls
B. BindingContainer
C. Scope
D. Template_Controls
解析:
  本题的题意是你在母板页上添加了一个Delegate Control,通过它引用了一个默认的外部Script 文件。同时你还想要达到如下目的:
 阻止其它开发人员删除默认的Script文件引用
 可以另外添加Script引用
 如果有多个Script引用,则允许修改它们的引用顺序
 下面分析各属性
选项A. AllowMultipleControls 此属性用于获取或设置Boolean值,表示是否允许在运行时添加所有的备选子控件(all child candidate controls)到页面上。 子控件在页面上的添加顺序是由控件的Sequence属性决定的。 本题是要添加对外部Script File的引用,所以就可以在这里实现,因为默认引用Script的实现的位置是母板页,而母板页的编辑修改是受控的,所以就可以阻止其它开发人员删除默认的Script文件引用,而由于Delegate Control的特性,开发人员可以加入自己的Script文件引用 ,并允许多个子控件加载,而加载顺序由Sequence确定。所以选项A是本题答案。
选项B. BindingContainer 获取包含此控件数据绑定的控件,此属性不能在你的代码中直接使用。
选项C. Scope 获取或设置此Delegate Control控件作用域范围。 允许的范围值有 Farm, WebApplication, Site, or Web.  如果你不说明,则默认作用于所有 范围。
选项D. Template_Controls 获取或设置影响此Delegate Control创建行为的Template。如下面示例代码 (使用了Template_Controls 属性以包含供顶部导航条使用的数据源Control):

<SharePoint:DelegateControl
    runat="server"
    ControlId="MyTopNavigationDataSource">
    <Template_Controls>
        <asp:SiteMapDataSource
            ShowStartingNode="False"
            SiteMapProvider="MyTopNavigationProvider"
            id="TopSiteMap"
            runat="server"/>
    </Template_Controls>
</SharePoint:DelegateControl>

所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.delegatecontrol.allowmultiplecontrols.aspx
http://msdn.microsoft.com/zh-cn/library/ms458778(v=office.12).aspx


Question 102
You create a list named List1.
You create two workflows named WF1 and WF2 for List1.
You need to ensure that when a new item is created in List1, WF1 starts automatically. WF2 must start automatically after WF1 completes.
What should you do?
A. Add a Replicator activity to WF2.
B. Add a SendActivity activity to WF2.
C. Create a SPWebEventReceiver event receiver.
D. Create a SPWorkflowEventReceiver event receiver.

解析:
  这是一道基于列表的工作流的题。
  题目要求在WF1在添加Item时自动激活,而WF2则在WF1之后自动启动。如何实现?
  分别分析各选项:
选项A. Add a Replicator activity to WF2. 此选项的replicator Activity用于在顺序工作流中复制相同子活动。如果在WF2中使用replicator Activity并不能解决WF2在WF1之后自动启动的目的,也不可能实现添加Item时自动激活WF1的目的。
选项B. Add a SendActivity activity to WF2. SendActivity activity是一种服务使用 Windows Communication Foundation (WCF),该服务实现一个协定,根据这个协定又定义一种客户端同步操作调用,SendActivity 活动就是用于对这种调用进行建模。也即:它是用来与WCF的Service相关联的,但本题是想要在Sharepoint内部的两个Workflow上建立关联,所以此选项也被排除。
选项C. Create a SPWebEventReceiver event receiver. 用来捕获发生在Web Site上的相关事件,操作对象是Web Site而不是List。
选项D. Create a SPWorkflowEventReceiver event receiver. 本选项的SPWorkflowEventReceiver 类处理工作流生命周期中的各种事件,它提供了下面4个虚方法
 Starting: 当工作流正启动的时候发生
 Started: 当工作流启动起来时发生
 Postponed: 当工作流被延迟的时候发生
 Completed: 当工作流完成的发生
 (请注意:它没有 WorkflowLoading 和 WorkflowUnloading)
若要创建工作流事件接收器,开发人员可重写 SPWorkflowEventReceiver 类,并实现要捕获的事件。开发人员可使用标准的 SharePoint 事件接收器模型来注册工作流事件的接收器。该模型使用 SharePoint 功能解决方案来打包和安装事件接收器,或通过使用对象模型来注册事件接收器。
  工作流可以对其周围的事件进行响应,但本身不能为其他事件接收器发出事件以进行侦听。这种情况意味着一个工作流无法侦听其他工作流,而其他事件也无法侦听工作流错误。然而,在许多情况下,这种行为却非常有用。例如,如果某个工作流能够启动另一个工作流,则开发人员可以在审批工作流的末尾添加一个步骤。通过这一功能,可以使工作流模块化,并允许重用现有代码。此外,向工作流事件添加预事件处理程序可帮助开发人员添加验证,以防止发生架构或序列化错误,并提供一种在出现错误时能够与管理员进行沟通的方法。除了事件数量增加之外,开发人员现在还可以创建自定义事件和事件接收器来处理特殊情况。
   在 Microsoft SharePoint Foundation 2010 中,开发人员通过使用用于其他 SharePoint 事件的相同模型,可以为工作流编写事件处理程序。
开发人员可以编写能够调用其他工作流并等待它们完成的工作流。
开发人员通过在现有工作流中注入其他代码,从而将现有代码转成新代码,可以快速升级工作流实例
与任何事件接收器一样,可以通过使用 SPWeb(侦听在网站中运行的任何工作流的事件,包括网站工作流的事件)、SPList(侦听针对此列表中的某个项运行的任何工作流的工作流事件)或 SPContentType 来注册工作流事件接收器。(仅当从针对相应的内容类型的文档运行的工作流中触发工作流事件时,内容类型事件接收器才应触发。)此外,通过使用 SharePoint Foundation 2010,开发人员可以将接收器添加到 SPSite 中。
   由上可知,创建一个工作流事件接收器就是解决本题需求的途径。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/zh-cn/library/bb628577(v=vs.90).aspx
http://www.russellmccloy.com/2008/04/sendactivity-with-workflow-wcf-and.html http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spwebeventreceiver.aspx
http://msdn.microsoft.com/en-au/library/ee535710(v=office.14).aspx

 

Question 103
You plan to create a custom approval workflow. The workflow approvers will enter their employee number in the edit task form.
You need to ensure that the onTaskChanged1_Invoked method of the workflow retrieves the value of the employee number.
Which object should you use?
A. SPWorkflowActivationProperties.Item
B. SPWorkflowActivationProperties.TaskListId
C. SPWorkflowTaskProperties.ExtendedProperties
D. SPWorkflowTaskProperties.Properties

解析:
  本题是涉及工作流在某个工作流任务Invoked(调用)方法中获取用户录入的初始化参数的问题。
  在选项中涉及两个类: SPWorkflowActivationProperties与SPWorkflowTaskProperties
  1.先来看SPWorkflowActivationProperties类:
我们知道,所有 Microsoft SharePoint Foundation 工作流都必须从 OnWorkflowActivated 活动开始。此活动初始化工作流实例和相关令牌之间的关联,以便 Windows Workflow Foundation (WF) 运行时可以正确地将传入的邮件定向到此工作流实例。默认情况下,您创建的每个新的 SharePoint 工作流应用程序项目都包含一个 OnWorkflowActivated 活动作为第一个活动。
当启动 SharePoint Foundation 工作流时,OnWorkflowActivated 活动的 WorkflowProperties 属性返回一个 SPWorkflowActivationProperties 对象,该对象表示工作流在启动时的初始属性,例如启动工作流的用户以及将工作流启动到的列表和项目。需要访问工作流的初始数据(例如工作流 ID)的任何活动都可以引用在 OnWorkflowActivated 活动中指定的 SPWorkflowActivationProperties 对象变量。
您可以使用工作流中的任何其他活动的启动属性,并且这些属性在您使用 Code 活动来处理工作流在其上运行的 SharePoint Foundation 项目时尤其有用。
 SPWorkflowActivationProperties 类有众多成员,本题涉及到的有两个:
SPWorkflowActivationProperties.Item: 获取工作流关联的List上的Item.
SPWorkflowActivationProperties.TaskListId: 获取与工作流任务相关联的List的ID值
 从上面的描述来看SPWorkflowActivationProperties 类主要是用于与工作流相关的属性,选项A.B都不是本题的答案。

2.再来看SPWorkflowTaskProperties类:
 创建工作流任务时,其属性数据来自 SPWorkflowTaskProperties 对象,此对象可通过 CreateTask 活动的 TaskProperties 属性进行访问。此对象包含每个工作流任务的标准信息,以及任务架构中包含的任何自定义属性。通过初始化您为 TaskProperties 属性指定的 SPWorkflowTaskProperties 对象变量,可以使用传递给工作流的任务数据。
通过 TaskProperties 属性访问的 SPWorkflowTaskProperties 对象只是包含有关新创建的任务的初始化信息;它并未以任何方式动态绑定到任务本身。对任务所做的更改不会反映在存储于此 SPWorkflowTaskProperties 对象的数据中。
 SPWorkflowTaskProperties 对象包含 SharePoint Foundation 中每个工作流任务的标准属性集,这些属性包括 AssignedTo、DueDate、StartDate 和 TaskType 等。
此外,此对象还包含一个哈希表(由 ExtendedProperties 属性表示),用于存储自定义任务属性。可以访问特定的自定义属性,方法是将该属性的名称作为 ExtendedProperties 属性的索引传递。Microsoft SharePoint Server 2010 对哈希表中包含数据的任务字段后的每个自定义数据值进行命名。例如,如果工作流任务中有一个名为 comments 的文本字段,则该字段的数据在 ExtendedProperties 属性哈希表中具有的索引名称也为 comments。
  通常,将与任务相关的每个活动的 TaskProperties 属性绑定到您为 CreateTask 活动(创建了该特定任务)的 TaskProperties 属性定义的对象变量。此对象变量用作将数据传入任务的管道。
 SPWorkflowTaskProperties类也有众多成员,本题涉及到的有两个:
SPWorkflowTaskProperties.Properties:  SPWorkflowTaskProperties类中没有以Properties命名的属性。
SPWorkflowTaskProperties.ExtendedProperties: 如上所述,是一个哈希表,可用来传递自定义属性
  
所以本题目正确选项应该是C
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowtaskproperties_properties.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.workflow.spworkflowtaskproperties_members.aspx
http://msdn.microsoft.com/zh-cn/library/ms463007(v=office.14).aspx

posted @ 2013-08-02 15:34  wsdj  阅读(512)  评论(0编辑  收藏  举报