重新发布同一 InfoPath 表单模板时,将重新创建从 InfoPath 字段发布的列

原始 KB 编号: 2554288

症状

请考虑以下情况:

  • 创建 Office InfoPath 表单模板并将其发布到 SharePoint 中的文档库。 在发布期间,选择要作为文档库中的列发布的某些 InfoPath 字段。 发布表单模板后,您决定将同一表单模板和相同的字段发布到同一 SharePoint 网站上的不同文档库。

  • 稍后,在 InfoPath 表单模板中实现更改,并按照首次发布期间相同的顺序将表单模板重新发布到两个文档库。

在此方案中,将重新创建从 InfoPath 字段发布的文档库中的所有列。

在此过程中,SharePoint 文档库中重新创建的列的内部名称也会更新,即,以 0 开头的数字后缀为旧列名。 例如,名为 LastName 的列将更改为 LastName0

列的重新创建过程分为两步:

  1. 再次将列添加到 SharePoint 库中。
  2. 将删除未与 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 库列或网站栏