重新發佈相同的 InfoPath 窗體範本時,會重新建立從 InfoPath 欄位發佈的數據行
原始 KB 編號: 2554288
徵狀
請試想下列案例:
您可以建立 Office InfoPath 窗體範本,並將其發佈至 SharePoint 中的文件庫。 在發佈期間,您會選取要在文檔庫中發佈為數據行的特定 InfoPath 字段。 發佈表單範本之後,您決定將相同的窗體範本和相同的欄位發佈至相同 SharePoint 網站上的不同文檔庫。
稍後,您會在 InfoPath 窗體範本中實作變更,並以與第一次發佈期間相同的順序,將表單範本重新發佈至這兩個文檔庫。
在此案例中,會重新建立從 InfoPath 字段發行之文檔庫中的所有數據行。
在此程式中,也會更新 SharePoint 文件庫中重新建立之數據行的內部名稱,也就是說,從 0 開始的數值會後綴為舊的數據行名稱。 例如,名為 LastName 的數據行會變更為 LastName0。
資料行的重新建立是兩個步驟的程式:
- 數據行會再次新增至 SharePoint 文件庫。
- 不會與 InfoPath 字段相關聯的數據行會被移除。
原因
InfoPath 會將發佈至 SharePoint 文件庫的欄位清單儲存在本機指令清單中,以及與這些字段相關聯的數據行。 這是藉由參考 SharePoint 中的數據行標識碼 (具有 InfoPath 欄位的唯一 GUID 值) 來完成。
當您第二次將更新的 InfoPath 窗體範本發佈至 SharePoint 文檔庫時,InfoPath 會檢查具有相關聯標識符的數據行是否已經存在。 如果找不到對應的數據行,就會在文檔庫中建立新的數據行。 任何未與任何 InfoPath 字段相關聯的數據行都會從文檔庫中刪除。
當您將相同的窗體範本發佈至多個 SharePoint 文件庫時,會在背景中執行下列作業:
當您第一次將窗體範本發佈至第一個文檔庫時,會建立每個已發佈的數據行,並與對應的 InfoPath 字段相關聯。
當您第一次將窗體範本發佈至第二個連結庫時,InfoPath 找不到與儲存標識符相關聯的數據行,因此會建立新的數據行。 然後,它會將新的數據行標識碼與對應的InfoPath字段產生關聯。
當您第二次將窗體範本發佈至第一個連結庫時,InfoPath 找不到與預存標識符相關聯的數據行,因為第二個連結庫的 GUID 目前與欄位相關聯。 因此,InfoPath 會建立新的數據行,進而取得新的標識符,並與 InfoPath 字段相關聯。
在此程式中,會建立許多與任何 InfoPath 字段無關的數據行,並從文檔庫中移除。
當您第二次將窗體範本發佈至第二個文檔庫時,會重複此行為。
注意事項
如果將 InfoPath 窗體範本發佈為網站內容類型,或 InfoPath 欄位在 SharePoint 中發佈為網站數據行,就不會發生此問題。
解決方案
有幾個方法可防止這種情況發生:
為要在 SharePoint 網站上發佈的每個 InfoPath 字段建立網站數據行,並在將 InfoPath 窗體範本發佈至這兩個文檔庫時選取預先建立的網站數據行。
由於網站數據行的標識碼不會變更,因此 InfoPath 不需要重新建立現有的數據行。
建立 InfoPath 窗體範本的個別複本,每個 SharePoint 文檔庫各一個。 這可確保 InfoPath 不會重新建立現有的數據行,因為數據行標識碼不會變更。
這種方法的缺點是,您必須實作所有使用中窗體範本複本中的所有變更。
注意事項
一般而言,建議的方法是將窗體範本發佈為網站內容類型,並將網站內容類型與兩個 SharePoint 文檔庫建立關聯,而不是發佈 InfoPath 窗體範本兩次。
其他相關資訊
如需詳細資訊,請 參閱新增、移除或修改 SharePoint 文檔庫數據行或網站數據行。