SharePoint 2010 状态机工作流,带自定义任务表单(InfoPath),使用 VS 2010 - 第 3 部分,共 3 部分





5.00/5 (2投票s)
使用 InfoPath 任务表单构建自定义 SharePoint 2010 工作流。
第 1 部分: 构建自定义 SharePoint 2010 工作流
第 2 部分: 配置和部署自定义 InfoPath 任务窗体
第 3 部分: 从 SharePoint 工作流发送数据到 InfoPath 窗体
介绍
在本教程的第 3 部分中,我将解释从工作流发送数据到任务窗体 (InfoPath) 的过程。在本教程的第 2 部分中,我解释了如何通过使用任务属性的扩展属性从 InfoPath 窗体中检索工作流中的数据。我们将使用任务属性对象将数据从工作流发送到 InfoPath 窗体。
实施
要将数据发送到 InfoPath 窗体,我们需要一个名为 ItemMetadata.xml 的 XML 文件。 ItemMetadata.xml 文件区分大小写,因此请确保文件名完全相同。此文件定义了任务架构。
SharePoint 在窗体的加载事件时将任务数据推送到编辑窗体。 我们会将 ItemMetadata.xml 作为辅助数据源添加到我们的 InfoPath 窗体。 无论是否使用 ItemMetadata.xml,都应始终将此文件添加为辅助数据源。
创建 ItemMetadata.xml
要创建 ItemMetadata.xml,请在任务编辑器中添加以下 XML 元素。
<z:row xmlns:z="#RowsetSchema"/>
要从 SharePoint 工作流推送到 InfoPath 窗体的每个属性都将添加到上面的 XML 元素中。
要添加属性,请添加一个以 ows 开头的属性,然后添加一个“_”,后跟任务元素的名称。 我已将 ItemMetadata.xml 的内容定义如下。
<z:row xmlns:z="#RowsetSchema"
ows_title=""
ows_technology=""
ows_experience=""
/>
将文件添加为辅助数据源
在设计模式下打开 InfoPath 窗体。 在数据选项卡中,单击数据连接菜单。 在“数据连接”对话框中,单击添加以配置辅助数据源。
向导的下一步骤将获取有关连接类型的信息。 选择接收数据单选按钮,然后单击下一步。
在下一个窗口中,选择 XML 文档单选按钮,然后单击下一步。
现在,在文件系统中浏览 ItemMetadata.xml 文件,然后单击下一步。
在下一步中,选择将数据作为资源文件包含在表单模板中,然后单击下一步。
数据连接应命名为 ItemMetadata。 选中打开窗体时自动检索数据复选框,然后单击“完成”。 现在,ItemMetadata.xml 文件已作为资源文件嵌入到 InfoPath 窗体中。 因此,不需要将 ItemMetadata.xml 与工作流一起部署。 我只是为了参考将文件添加到工作流的 Forms 文件夹中。
将控件绑定到任务架构
在 InfoPath 窗体上,放置要绑定到任务架构的控件。 在示例中,我使用了文本框控件来绑定数据。 为了确保任务数据不会更改,我将其设置为只读,并将文本框控件的背景颜色更改为灰色。
右键单击控件,然后单击文本框属性。 在对话框中,选择数据选项卡,然后单击默认值文本框旁边的公式按钮。
在插入公式对话框中,单击插入字段或组。 在选择字段或组对话框中,在字段下拉列表中选择 ItemMetadata 连接。 现在选择您要将控件数据绑定的数据连接中的字段,然后单击确定。 单击确定关闭所有对话框。
配置 Visual Studio 工作流
在工作流中,我们必须在任务的 MethodInvoking 事件中,即在我们创建任务时,将数据传递给 InfoPath 窗体。 我们将使用 ExtendedProperties 字典将数据上传到 InfoPath 窗体。 使用以下代码将值添加到 ExtendedProperties。
if (listItem != null) { this.createTaskInitialClearanceTaskProperties.ExtendedProperties["ows_title"] = listItem["Title"].ToString(); this.createTaskInitialClearanceTaskProperties.ExtendedProperties["ows_technology"] = listItem["Technology"].ToString(); this.createTaskInitialClearanceTaskProperties.ExtendedProperties["ows_experience"] = listItem["Experience"].ToString(); }
部署工作流程。