重新发布同一 InfoPath 表单模板时,将重新创建从 InfoPath 字段发布的列
原始 KB 编号: 2554288
症状
请考虑以下情况:
创建 Office InfoPath 表单模板并将其发布到 SharePoint 中的文档库。 在发布期间,选择要作为文档库中的列发布的某些 InfoPath 字段。 发布表单模板后,您决定将同一表单模板和相同的字段发布到同一 SharePoint 网站上的不同文档库。
稍后,在 InfoPath 表单模板中实现更改,并按照首次发布期间相同的顺序将表单模板重新发布到两个文档库。
在此方案中,将重新创建从 InfoPath 字段发布的文档库中的所有列。
在此过程中,SharePoint 文档库中重新创建的列的内部名称也会更新,即,以 0 开头的数字后缀为旧列名。 例如,名为 LastName 的列将更改为 LastName0。
列的重新创建过程分为两步:
- 再次将列添加到 SharePoint 库中。
- 将删除未与 InfoPath 字段关联的列。
原因
InfoPath 将发布到 SharePoint 文档库的字段列表存储在本地清单中,以及这些字段关联的列。 这是通过在 SharePoint 中引用列 ID 来实现的, (具有 InfoPath 字段的唯一 GUID 值) 。
第二次将更新的 InfoPath 表单模板发布到 SharePoint 文档库时,InfoPath 会检查具有关联 ID 的列是否已存在。 如果找不到相应的列,则会在文档库中创建新列。 未与任何 InfoPath 字段关联的任何列将从文档库中删除。
将同一表单模板发布到多个 SharePoint 库时,会在后台执行以下操作:
首次将表单模板发布到第一个库时,将创建每个已发布的列,并与相应的 InfoPath 字段相关联。
首次将表单模板发布到第二个库时,InfoPath 找不到具有存储 ID 的关联列,因此会创建新列。 然后,它将新列 ID 与相应的 InfoPath 字段相关联。
第二次将表单模板发布到第一个库时,InfoPath 找不到具有存储 ID 的关联列,因为第二个库中的 GUID 当前与字段相关联。 因此,InfoPath 会创建新列,这些列反过来又会获取新 ID 并与 InfoPath 字段相关联。
在此过程中,会创建许多列,这些列不与任何 InfoPath 字段相关联,并且会从文档库中删除。
第二次将表单模板发布到第二个库时,会重复此行为。
注意
如果 InfoPath 表单模板作为网站内容类型发布或 InfoPath 字段在 SharePoint 中作为网站栏发布,则不会出现此问题。
解决方案
可通过以下几种方法防止这种情况发生:
为要在 SharePoint 网站上发布的每个 InfoPath 字段创建一个网站栏,并在将 InfoPath 表单模板发布到这两个库时选择预创建的网站栏。
由于网站栏的 ID 不会更改,因此 InfoPath 不必重新创建现有列。
创建 InfoPath 表单模板的单独副本,为每个 SharePoint 文档库创建一个副本。 这将确保 InfoPath 不会重新创建现有列,因为列 ID 不会更改。
此方法的缺点是,需要在正在使用的所有表单模板副本中实现所有更改。
注意
通常,建议的方法是将表单模板发布为网站内容类型,并将网站内容类型与两个 SharePoint 文档库相关联,而不是发布两次 InfoPath 表单模板。
更多信息
有关详细信息,请参阅 添加、删除或修改 SharePoint 库列或网站栏。