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

时间:2022-04-20 11:14:38

Question 107
You are creating a custom workflow action that will be used in Microsoft SharePoint Designer reusable workflows.
The action will programmatically create a SharePoint site named Site1 at a specific URL.
You need to ensure that users can specify the URL of Site1 in the action.
What should you use?
A. the DependencyProperty class
B. the OnWorkflowActivated.WorkflowProperties property
C. the SPPersistedObject class
D. the SPWorkflowActivationProperties.InitiationData property

解析:
  还是与Question106相同的背景描述,只不过本题从Action元素下的RuleDesigner转向了Property相关的部分。
  我们知道,若要创建基本的自定义活动,可以从 Activity 类或派生类型继承。 若要创建自定义复合活动,可以从 CompositeActivity 类或派生类型继承。而所谓的创建自定义活动就是定义自定义活动的属性、事件和执行逻辑的过程。
  其中,关于执行逻辑:创建自定义活动时,必须通过 Execute 方法显式处理活动的执行逻辑。 可以在活动中根据需要重写其他 Activity 方法。
  关于属性, 我们可以使用各种属性修饰自定义活动以指示各种情况,例如:应加载哪个活动设计器,验证活动时应使用什么验证程序等。对于本题的在创建Site时使用什么URL也自然地要通过属性这个概念来解决,它用于指示我们创建Site的活动将基于什么URL来进行。
在自定义活动中可以使用两种活动属性:元属性和实例属性。
元属性在运行时不可变,因此该属性必须在设计时设置为文本值。
实例属性可以在设计时设置,也可以绑定到实例数据,在后一种情况下要到运行时才能确定实际值。 也可以直接在工作流执行过程中修改实例属性。
   实现实例属性时,可以按通常的 .NET Framework 类属性的实现方式来实现,也可以使用依赖项属性来实现。 只有选择使用依赖项属性(DependencyProperty)来实现时,才可以将其值设置为 ActivityBind,以便绑定到运行时访问的实际值。 
   依赖项属性(DependencyProperty)提供了一个集中的工作流状态存储库。 DependencyObject 实质上是一个哈希表,其中存储了曾经应用于它的任何 DependencyProperty 的当前值。
依赖项属性的实例类型可以绑定到实例数据,在此情况下,实际值要到运行时才能确定。 可以将此类型的依赖项属性的值设置为 ActivityBind,以绑定到在运行时访问的实际值。
ActivityBind 将活动属性绑定到下列任一对象:
.其他活动属性
.字段
.属性
.方法 
   读到这里,你已经能判断选项A是本题想要的答案了。
 那么我们来继续看看其它选项:
选项B. the OnWorkflowActivated.WorkflowProperties property  任何 SharePoint Foundation 工作流都必须以 OnWorkflowActivated 活动开头。OnWorkflowActivated 活动包含一个 WorkflowProperties 属性,该属性返回一个 SPWorkflowActivationProperties 对象。此对象表示工作流在启动时的初始属性,例如添加工作流的用户以及将工作流添加到的列表和项目。当调用 M:Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.Workflow.SPWorkflowAssociation,System.String) 方法时,工作流管理器在 SharePoint 项目上创建工作流实例。然后,工作流管理器将使用初始表单收集的数据传递给工作流自身的 OnWorkflowActivated 事件。
  所以,此属性 1.主要用在启动一个工作流时使用。2.是通过初始表单收集初始化信息。因此,不论是使用时机还是使用方式都不适合本题的要求,因此,选项B排除。

选项C. the SPPersistedObject class。the SPPersistedObject 类用于为对象提供自动序列化其状态值并持久保存以及在需要时获取前面所保存的值并反序列化的相关方法。也即,它属于定义自定义管理设置方面的类。
在 Windows SharePoint Services 平台上构建应用程序时,您可能需要创建一个类以定义应用程序的自定义属性设置并提供用于存储这些设置的方法。Windows SharePoint Services 3.0 中的 Microsoft.SharePoint.Administration 命名空间引入了对象持久性,使用它可将派生自基础 SPPersistedObject 类的类保留到 Windows SharePoint Services 数据库中。若要创建保留的对象,您可以创建一个类,该类从 SPPersistedObject 或派生自 SPPersistedObject 的 Microsoft.SharePoint.Administration 命名空间中的某个类继承。此类可以定义一个用于存储 Windows SharePoint Services 数据库中的自定义属性设置的对象模型。例如,您可以创建通过某种方式使用 Windows SharePoint Services 的 Windows 服务,这将需要创建一个继承自 SPWindowsService 类的类,以便存储特定于 Windows 服务的设置。已编译的 DLL 将为客户提供一个可用于检索或保存属性的对象模型。Windows SharePoint Services 提供用于存储设置的方法和位置,并管理它们对服务器场中的所有服务器和过程(包括缓存刷新)的可用性。
   在实际使用中,我们也可用它来保存用户的某些配置信息。它并不用来完成从Sharepoint Designer中获取参数值并传递给自定义工作流活动的,因为它不提供这种机制来完成这个工作。我们只能寻找捆绑到Action自身的属性来完成本题的要求。
  
选项D. the SPWorkflowActivationProperties.InitiationData property。用来把初始化数据传递进工作流实例。该选项其实是选项B的延续。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/ms734499(v=vs.90).aspx
http://msdn.microsoft.com/zh-cn/library/ms481192.aspx

Question 108
You create a custom workflow action named WF1 that copies the content of a document library to another document library.
WF1 is used in a Microsoft SharePoint Designer reusable workflow. You need to ensure that the workflow action is deployed as a sandboxed solution.
Where should you define the workflow action?
A. the Elements.xml file
B. the ReplicatorActivity activity
C. the SPPersistedObject object
D. the WF1.actions file

解析:
 本题的中心意思是以Sandbox Solution方式部署一个工作流活动,此工作流活动要完成从一个文档列表拷贝内容到另一个文档列表。
   在Sharepoint中我们通常使用解决方案包 (.wsp) 文件将 SharePoint 解决方案部署到 SharePoint Server。 可以使用 Visual Studio 将 SharePoint 项目项组织到功能中,并创建一个包来部署 SharePoint 功能
可以使用 Visual Studio 将相关的 SharePoint 元素组合到功能中。 例如,“联系人”列表定义的功能可以包括列表实例和列表定义。 可以将这两个元素合并到单个功能中以进行部署。  接下来,您可以创建一个 SharePoint 解决方案包 (.wsp) 以将多个功能、网站定义、程序集和其他文件捆绑到单个包中,此包会使用 SharePoint 所需的格式来存储文件以将文件部署到服务器。
我们可以利用功能设计器来创建功能、设置作用域以及将其他功能标记为依赖项。 该设计器会显示用于描述每项功能的最后一个 XML 文件(Element.xml)。 而这就是选项A的想法,通过把工作流活动以功能方式打包到Sandbox Solution的解决方案包中进行部署。
我们进一步分析其它选项:
选项B. the ReplicatorActivity activity  ReplicatorActivity用于运行子活动的多个实例,与本题毫不相关。
选项C. the SPPersistedObject object 用于为对象提供自动序列化其状态值并持久保存以及在需要时获取前面所保存的值并反序列化的相关方法。也即,它属于定义自定义管理设置方面的类,也与本题毫不相关。
选项D. the WF1.actions file: 一个工作流活动的Actions文件(.actions)是一个XML格式的文件,它主要用来描述你的工作流活动如何与Sharepoint Designer交互。它与Sandbox Solution的部署没什么关联。
所以本题目正确选项应该是A
参考:
http://www.wictorwilen.se/Post/Sandboxed-workflow-activities-in-SharePoint-2010.aspx
http://msdn.microsoft.com/zh-cn/library/ff798323.aspx

Question 109
You have a SharePoint list named Projects and a site column named PrivateColumn.
You need to prevent users from adding PrivateColumn to the Projects list. Users must be able to add any other site column to the Projects list.
What should you do?
A. Create an event receiver that inherits SPListEventReceiver and override FieldAdded.
B. Create an event receiver that inherits SPListEventReceiver and override FieldAdding.
C. Create an event receiver that inherits SPItemEventReceiver and override ItemAdded.
D. Create an event receiver that inherits SPItemEventReceiver and override ItemAdding.

解析:
 本题大意是:你有一个网站列PrivateColumn,你要阻止它被添加到列表Projects中,但你可以添加其它网站列到此列表。
 先来看各事件的时机:
FieldAdding:  当一个Field的link正在被添加时发生
 FieldAdded:当一个Field的link被添加后发生
ItemAdding:  Item正在被添加时发生
 ItemAdded:  Item被添加后发生
  再来看事件接受器:
 SPListEventReceiver: 针对列表的事件捕获
 SPItemEventReceiver :针对列表项的事件捕获
  我们知道,添加一个Site Column到列表中是基于列表的事件,所以关于SPItemEventReceiver的选项C.D就被排除了。而阻止一个Site Column被添加一定是在它被添加成功前就必须采取的动作,所以选项A被排除。
因此本题目正确选项应该是B
参考:
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.splisteventreceiver.fieldadding(v=office.12).aspx
http://msdn.microsoft.com/zh-cn/library/ms195594(v=office.12).aspx

Question 110
You create a workflow named WF1. WF1 is attached to a list named List1.
You need to receive an e-mail notification if WF1 is postponed.
What should you do?
A. Use a ReceiveActivity activity in WF1.
B. Use a HandleExternalEvent activity in WF1.
C. Attach an SPItemEventReceiver event receiver to List1.
D. Attach an SPWorkflowEventReceiver event receiver to List1.

解析:
 本题是创建一个基于列表的工作流WF1,如果此工作流被延迟了那么就需要发送通知邮件。
 根据题意可以判断,本题的操作需要事件接收器的参与,因为是当“工作流被延迟”时需要后续处理,所以此事件接收器应该是基于工作流的。由此,直接定位在了选项D。
 进一步分析其它选项:
选项A. Use a ReceiveActivity activity in WF1. 本选项的ReceiveActivity 活动实现由 Windows Communication Foundation (WCF) 服务协定定义的操作的服务活动。即:实现工作流中的服务协定操作。在给定服务协定的情况下,ReceiveActivity 活动将一直等待,直到客户端连接到服务为止,然后运行其包含的子活动。在安排 ReceiveActivity 活动运行之后,该活动将侦听来自服务终结点上的客户端的传入连接。从其信息传向能力来看,此活动也只具有接收侦听和接收信息的能力,不具有向外发送邮件等信息的能力,所以即使对此活动不甚了了,也足够判断取舍了。
选项B. Use a HandleExternalEvent activity in WF1. 工作流中的HandleExternalEvent活动是用来接收宿主发出的事件用的。它也不具备对外发送Email的能力。

选项C. Attach an SPItemEventReceiver event receiver to List1. 关于SPItemEventReceiver类,它是常规EventHandler编写继承的基类之一,并列于:SPItemEventDataCollection、SPItemEventReceiver、SPItemEventProperties之中。该基类提供了丰富的支持列表项,文档库项【Item】的支持,支持事件包含:ItemAdded、ItemAdding、ItemAttachmentAdded、ItemAttachmentAdding、ItemAttachmentDeleted、ItemAttachmentDeleting、ItemCheckedIn、ItemCheckedOut、ItemCheckingIn、ItemCheckingOut、ItemDeleted、ItemDeleting、ItemFileConverted、ItemFileMoved、ItemFileMoving、ItemUncheckedOut、ItemUncheckingOut、ItemUpdating、ItemUpdated,我们可以在重写该事件中增加我们的逻辑,增加各种业务逻辑。不管怎样,这个类不是基于工作流事件的,所以也应该排除。
 
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/zh-cn/library/bb628503(v=vs.90).aspx
http://msdn.microsoft.com/zh-cn/magazine/ee335710.aspx