工作流关联表单和初始表单 (Sharepoint Foundation)
上次修改时间: 2010年4月8日
适用范围: SharePoint Foundation 2010
本文内容
指定关联表单
关联表单处理
指定初始表单
初始表单处理
在实际启动任何工作流之前,即可显示关联表单和初始表单让用户填写。您可以使用这些表单让用户能够提前设置工作流的参数和其他信息。关联表单说明工作流如何应用于特定列表、库或内容类型;初始表单说明工作流如何应用于特定的 SharePoint 项目。
当管理员首次决定添加工作流或将其与特定列表、文档库或内容类型关联时,即可向管理员显示关联表单。在工作流应用于管理员将其关联到的列表、库或内容类型上的项目时,可以使用关联表单让管理员指定该工作流的参数、默认值和其他信息。
当用户在特定 SharePoint 项目上启动工作流时,即可向用户显示初始表单。在工作流应用于特定的 SharePoint 项目时,可以使用初始表单让用户替代或追加由管理员设置的关联参数,或者指定有关工作流的其他参数或信息。并非所有工作流都需要初始表单。
初始表单和关联表单可以是相同的表单。例如,通过对每个工作流表单使用相同的表单,可以让管理员在工作流关联期间设置某些默认参数,然后让实际在特定的项目上启动工作流实例的用户查看和替代这些默认参数。
指定关联表单
在工作流模板定义 XML 中指定工作流的关联表单。若要执行此操作,请将 Workflow 元素的 AssociationURL 属性的值设置为要用于工作流关联的自定义表单页。例如:
AssociationURL="MyWkflAssociationPage.aspx"
备注
Windows SharePoint Services 3.0 支持工作流模板定义中的绝对路径或相对于服务器的路径。必须用这些格式之一表示所有表单路径 URL。例如,您可以使用绝对路径(如 "http://site/library/page.aspx"),也可以使用相对于服务器的路径(如 "/layouts/page.aspx")。SharePoint Foundation 不支持工作流模板定义中的链接地址。
有关工作流定义的详细信息,请参阅工作流定义。
关联表单处理
当管理员选择将工作流与给定的列表、库或内容类型关联时,SharePoint Foundation 显示"添加工作流"页面。管理员可以使用此页来指定所有工作流共有的设置,例如工作流定义和启动条件,以及工作流是在项目上、文件夹上还是同时在两者上运行。
当管理员单击此页上的"下一步"按钮时,SharePoint Foundation 在工作流模板定义中检查 Workflow 元素的 AssociationURL 属性,以确定要加载的正确表单。
若要向关联表单提供自定义数据,可以将此信息存储在 AssocationData 元素中。例如,您可以使用此元素来存储要在关联表单显示时传递给关联表单的默认值。AssocationData 元素可以包含任何有效的 XML。然后您的表单可以从工作流模板中加载该关联数据。
由于必须提交自定义关联表单后才可以创建工作流关联,因此 SharePoint Foundation 还会将以下查询参数传递给自定义关联表单:
<input type="hidden" name="WorkflowDefinition" value=<% _STSWriteHTML(Request.Form["WorkflowDefinition"]); %>>
<input type="hidden" name="WorkflowName" value=<% _STSWriteHTML(Request.Form["WorkflowName"]); %>>
<input type="hidden" name="AddToStatusMenu" value=<% _STSWriteHTML(Request.Form["AddToStatusMenu"]); %>>
<input type="hidden" name="AllowManual" value=<% _STSWriteHTML(Request.Form["AllowManual"]); %>>
<input type="hidden" name="RoleSelect" value=<% _STSWriteHTML(Request.Form["RoleSelect"]); %>>
<input type="hidden" name="AutoStartCreate" value=<% _STSWriteHTML(Request.Form["AutoStartCreate"]); %>>
<input type="hidden" name="AutoStartChange" value=<% _STSWriteHTML(Request.Form["AutoStartChange"]); %>>
<input type="hidden" name="GuidAssoc" value=<% _STSWriteHTML(Request.Form["GuidAssoc"]); %>>
工作流开发人员必须对管理员提交对表单所作更改时要执行的操作进行编程。通常,自定义工作流关联表单必须执行下列操作:
检查 GuidAssoc 参数的值,以确定用户是在添加新的工作流关联,还是在编辑现有的工作流关联。
如果用户正在添加新的工作流关联,则调用 AddWorkflowAssociation 方法来创建一个新的工作流关联。
如果用户正在编辑现有的工作流关联,则调用 Update() 方法来更新该工作流关联。
如果工作流还没有任务列表,则为其创建一个。
根据需要,使用从用户处收集的数据设置 SPWorkflowAssociation 对象的属性。
如有必要,创建工作流历史记录列表。
指定初始表单
如果希望工作流具有初始表单,则必须设置工作流模板定义中的 Workflow 元素的 InstantiationURL 属性。将此元素设置为要用来收集工作流初始数据的表单,如下面的示例所示。
InstantiationURL="MyWkflInitiationPage.aspx"
备注
Windows SharePoint Services 3.0 支持工作流模板定义中的绝对路径或相对于服务器的路径。必须用这些格式之一表示所有表单路径 URL。例如,您可以设置绝对路径(如 "http://site/library/page.aspx"),也可以设置相对于服务器的路径(如 "/layouts/page.aspx")。SharePoint Foundation 不支持工作流模板定义中的链接地址。
有关工作流定义的详细信息,请参阅工作流定义。
初始表单处理
当用户在特定的项目上启动工作流时,SharePoint Foundation 在工作流模板定义中检查 Workflow 元素的 InstantiationURL 属性,以确定要加载的正确表单。
SharePoint Foundation 加载指定的表单,并向其传递 URL 中的下列查询参数:
List 项目所属的列表的 GUID。
ID 在其上启动工作流的列表项的 ID。
Source 用户从中启动工作流的页面。
TemplateID 工作流关联的 GUID。
此外,您可以对表单进行编程,以便为此工作流关联加载关联表单数据。此信息包含在表示工作流关联的 SPWorkflowAssociation 对象的 AssociationData 属性中。
工作流开发人员必须对在用户提交对页面所作更改时要执行的操作进行编程。通常,表单必须执行下列操作:
找到当前站点的 SPWorkflowManager 对象。
使用 SPWorkflowManager 对象来调用 StartWorkflow 方法,并传递相应的 SPListItem 和 SPWorkflowAssociation 对象。使用 eventData 参数来传递字符串格式的初始表单数据。
使用户返回到其从中启动工作流的源页面。
当调用 M:Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.Workflow.SPWorkflowAssociation,System.String) 方法时,工作流管理器在 SharePoint 项目上创建工作流实例。然后,工作流管理器将使用初始表单收集的数据传递给工作流自身的 OnWorkflowActivated 事件。
任何 SharePoint Foundation 工作流都必须以 OnWorkflowActivated 活动开头。OnWorkflowActivated 活动包含一个 WorkflowProperties 属性,该属性返回一个 SPWorkflowActivationProperties 对象。此对象表示工作流在启动时的初始属性,例如添加工作流的用户以及将工作流添加到的列表和项目。此外,AssociationData 属性返回一个 System.Collections.Hashtable 对象,该对象表示由工作流初始表单提供的自定义数据。