Sharepoint学习笔记—习题系列--70-573习题解析 -(Q104-Q106)
Question 104
You plan to create a workflow that has the following three activities:
CreateTask
OnTaskChanged
CompleteTask
You need to ensure that each time the workflow starts, the three activities are linked to a single task.
What should you do?
A. Configure all activities to use the same TaskId.
B. Configure all activities to use the same correlation token.
C. Create an SPItemEventReceiver event receiver for the SharePoint Tasks list.
D. Create an SPWorkflowEventReceiver event receiver for the SharePoint Tasks list.
解析:
本题的实质是要问如何知道某些Activities是属于同一个工作流任务?
如同部队有番号,识别哪些战士属于哪个部队就要看他所在部队的番号。Sharepoint当然也采用了类似的机制,即:令牌
Sharepoint将相关令牌(Correlation Token) 作为唯一标识符,以便在工作流中的对象与承载 Windows Workflow Foundation (WF) 工作流运行时的环境之间进行映射。Windows Workflow Foundation必须为工作流提供某种与其他软件进行通信的方式。Windows Workflow Foundation运行时充当与所有工作流之间的所有通信的中间媒介。传入请求到达时,运行时会接收该请求,然后确定将该请求发送到哪个工作流实例。之后运行时会将请求传递到目标实例。实际上,Windows Workflow Foundation充当了与工作流之外的软件进行通信的代理。
对于下列每一项,您都将拥有单独的相关令牌:
1.工作流本身
2,需要在工作流中引用的各项任务 (即本题所说的情况)
不要为工作流任务和工作流本身分配相同的相关令牌。
为 OnWorkflowActivated 活动中的工作流声明相关令牌。然后,针对影响整个工作流的每个活动,将该活动的相关令牌绑定到 OnWorkflowActivated 活动的相关令牌。
工作流中的每个特定任务都应有其自己的相关令牌,每个相关活动都可以使用该相关令牌访问特定于任务的相同信息。例如,如果想在工作流中引用 CreateTask、CompleteTask 和 OnTaskChanged 活动中的相同任务,应将这些活动中的每个活动的 CorrelationToken 属性绑定到相同的相关令牌变量【这就是本题的答案】
再来看其它选项:
选项A. Configure all activities to use the same TaskId. TaskID就是用来标识WorkFlowTask的,既然如此为什么不能像令牌一样用来作为活动的标识呢?问题在于在TaskCreated Acitivity执行完成前,你是得不到TaskID的,原因是此时工作流任务创建的信息还没有被Sharepoint工作流捕获。 由此以来你又如何为CreateTask Activity分配TaskID?
选项C. Create an SPItemEventReceiver event receiver for the SharePoint Tasks list. 这里的SPItemEventReceiver类是用来捕获发生在Item上的事件的,它并不能用来标识工作流任务内部的各个活动。
选项D. Create an SPWorkflowEventReceiver event receiver for the SharePoint Tasks list.这里的 SPWorkflowEventReceiver类不可被实例化,它只是一个基类,主要用来创建捕获工作流事件的相关类的,也不能用来标识工作流任务内部的各个活动。
所以本题目正确选项应该是B
参考:
http://msdn.microsoft.com/en-us/library/ms475438.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spitemeventreceiver.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkfloweventreceiver.aspx
Question 105
You create a custom workflow by using Microsoft Visual Studio 2010.
You need to specify a custom InfoPath workflow initiation form in the workflow element manifest file.
Which attribute should you configure?
A. Association_FormURN
B. Instantiation_FieldML
C. Instantiation_FormURN
D. InstantiationUrl
解析:
本题使用VS2010创建用户自定义工作流,想给此工作流指派一个InfoPath初始化表单,在工作流模板定义 XML 中如何实现?
我们知道,在开始工作流之前,可以向用户显示关联和初始表单,以便他们可以提前为工作流设置参数和其他信息。当工作流应用于特定的列表、库或内容类型时,关联表单处理工作流;当工作流应用于特定的 SharePoint 项目时,初始表单处理工作流。
我们还可以在工作流模板定义中包含预关联数据。例如,您可能希望使用默认值预先填充关联表单上的字段。
下面我们来看看如何在工作流模板定义 XML 中分别指定关联表单和初始化表单
1.指定关联表单:
对于所有工作流表单,可以在工作流模板定义 XML 中指定工作流的关联表单。为此,请编辑两个 XML 元素。
i.将 Workflow 元素的 AssociationURL 属性的值设置为“_layouts/CstWrkflIP.aspx”。这是随 Microsoft SharePoint Server 2010 提供的 .aspx 页面;此页面包含用于承载 Microsoft InfoPath 2010 工作流关联表单的 InfoPath Forms Services Web 部件:
ii. 将 Association_FormURN 元素添加到工作流模板定义中的 Metadata 元素。使用此元素可以指定您要用于工作流关联的 Office InfoPath 2007 表单的 URN。
2.指定初始化表单
若要指定 InfoPath 2010 工作流初始表单,您必须编辑工作流模板定义中的两个元素。
i. 将 Workflow 元素的 InstantiationURL 属性的值设置为“_layouts/IniWrkflIP.aspx”。这是随 SharePoint Server 2010 提供的 .aspx 页面;此页面包含用于承载 InfoPath 2010 工作流初始表单的 Office InfoPath Forms Services Web 部件
ii.将 Instantiation_FormURN 元素添加到工作流模板定义中的 Metadata 元素。使用此元素可以指定您要用于工作流启动的 InfoPath 2010 表单的 URN。
所以,根据上面的描述就解决了选项A,选项C与选项D。且选项C就是本题的答案。
至于选项 B. Instantiation_FieldML,从以下工作流模板Workflow的Element元素描述可以看出,没有Instantiation_FieldML这个属性。
<Workflow Title="Text" Name="Text" CodeBesideAssembly="Text" CodeBesideClass="Text" Description="Text" Id="Text" EngineClass="Text" EngineAssembly="Text" AssociationUrl="Text" InstantiationUrl="Text" ModificationUrl="Text" StatusUrl="Text" TaskListContentTypeId="Text" > </Workflow>
所以本题目正确选项应该是C
参考:
http://msdn.microsoft.com/en-us/library/aa672715.aspx
http://msdn.microsoft.com/zh-cn/library/ms563325(v=office.14).aspx
http://msdn.microsoft.com/zh-cn/library/ms481192(v=office.14).aspx
Question 106
You are creating a custom workflow action to be used in Microsoft SharePoint Designer reusable workflows.
The action programmatically creates a SharePoint site named Site1 at a specific URL. The workflow actions schema file contains the following code segment.
<WorkflowInfo>
<Actions Sequential="then" Parallel="and">
<Action Name="Create Site"
ClassName="SPDActivityDemo.CreateSite"
Assembly="SPDActivityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1a4a7a2c3215a71b"
AppliesTo="all"
Category="Test">
<Parameters>
<Parameter Name="Url" Type="System.String, mscorlib" Direction="In" />
<Parameters>
</Action>
</Actions>
</WorkflowInfo>
You need to ensure that users can specify the URL property of the action in SharePoint Designer.
What should you add to the schema of the action?
A. <xml version="1.0" encoding="utf-8">
B. <Option Name="equals" Value="Equal"/>
C. <Parameter Name="Url" Type="System.String, mscorlib" Direction="Out" />
D. <RuleDesigner Sentence="Create site at Url %1.">
<FieldBind Field="Url" Text="Url of site" Id="1" DesignerType="TextArea" />
</RuleDesigner>
解析:
本题是讲你创建了一个自定义工作流活动以用于Sharepoint Designer,此活动所作的工作就是按给定的URL创建Sharepoint Site,其中URL可由Sharepoint Designer的设计者确定,如何完善本题题干中的代码?
SharePoint2010提供了很多有用的开箱即用的Activity(活动action),我们可以在SharePoint Designer 2010 中看到这些自带的操作(actions).但有时当这些需求不能满足我的需求,但是我又想用开箱即用的Activity(活动action)来设计工作流,这时我们就需要开发自己的Workflow Activity(action),即本题的目的。
通常我们在VS2010中开发Custom Workflow Action的过程中,在我们完成了Action的后台逻辑代码之后,我们就需要添加一个xml配置文件,其后缀名为Actions,此Action文件会被SharePoint Desginer 2010识别。
下面就是一个Action代码
<WorkflowInfo> <Conditions>…</Conditions> <Actions Sequential="then" Parallel="and"> <Action Name="Update my custom SharePoint list" ClassName="CustomActivities.OrderListFunctions" Assembly="CustomActivities, PublicKeyToken=b03f5f7f11d50a3a, Version=1.0.0.0, Culture=neutral" Category="My Custom Actions" CreatesTask="true" CreatesInList="UpdateList" AppliesTo="all" ListModeration="false" UsesCurrentItem="true"> <RuleDesigner Sentence="Update %1"> <FieldBind Field="UpdateList" Function="UpdateOrderList" DesignerType="ChooseListItem" ID="1" Text="My Custom List"> </FieldBind> </RuleDesigner> <Parameters> <Parameter Type="System.String, mscorlib" Direction="In" Name="UpdateList" </Parameters> </Action> </Actions> </WorkflowInfo>
从代码中我们知道,<Action>节下只有两个子元素:
1.RuleDesigner: 此元素用于描述工作流设计界面上对添加此Action的参数。这也是本题需要的,即向Sharepoint Designer这个设计器提供本Action的参数输入。它又包含两个子元素:
i.FieldBind: FieldBind 元素是 RuleDesigner 元素的子级。这些元素共同用于创建一个易读的语句,此语句用于描述需要计算的条件或必须执行的活动。如果这些元素构造正确,则它们还可用于在语句中插入变量(如超链接),以便无代码工作流编辑器可以在运行工作流时将动态值替换到工作流中。FieldBind 元素将工作流创建者输入的内容映射到参数,这些参数然后传递给 Microsoft SharePoint Foundation 2010。
<RuleDesigner> <FieldBind> <Option/> </FieldBind> </RuleDesigner>
ii.Option: 用于填充非数据绑定的 DesignerType 下拉列表框控件。Option 元素包含可用于构建工作流语句的文本和值对。它们还包含有关其 .NET 数据类型的信息。【本题的选项B】
而RuleDesigner 的属性:Sentence指定了设计时显示的提示信息,其中的占位符号%与RuleDesigner中的FieldBind的ID属性配置。
2.Parameters: 用作所有 Parameter 元素的容器,它不包含任何可定义属性,但包括某个条件或操作方法签名中的参数的说明。Parameters 元素是一类复杂的元素类型,它可与 Actions 和 Conditions 元素一起使用以定义其参数。
本文将介绍如何开发一个自定义的Workflow Activity(action),并在SharePoint Designer 2010 使用该自定义的Workflow Activity。
所以,综上所述,只有选项D是比较完整的对于Action的参数的定义。选项B.C都只是其中的局部描述。
而至于选项A <xml version="1.0" encoding="utf-8">:这只是在XML标记语言文件中用于声明XML的版本和编码方式的声明语句,与本题无关。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/en-us/library/bb897951.aspx
http://msdn.microsoft.com/zh-cn/library/bb897917.aspx
http://msdn.microsoft.com/zh-cn/library/bb897971.aspx
http://msdn.microsoft.com/zh-cn/library/bb897931(v=office.14).aspx