最近在處理SharePoint Office365的相關開發的時候發現了這樣一個奇怪的現象:
無法通過API更新Editor field,只要已更新就會throw Exception,由於是Office365的Exception,無法單單從Exception中分析出問題原因,而且奇怪的是新創建的List也存在同樣的問題。
試了半天也沒找到解決辦法,單單看field的SchemaXml也沒發現什么比較特殊的地方。
無奈之下save了一個list template,上傳到本地的SharePoint 2013環境,通過這個list template 新建了一個list,發現這樣的list也存在相同的問題,僅通過Exception也沒分析出什么問題,但是既然到本地了,我們可以看SharePoint Log啊,果然,在SharePoint Log中發現了一可疑的Error:
System.Data.SqlClient.SqlException (0x80131904): Parameter '@tp_Editor' was supplied multiple times.
經過在網上漫長的搜索,總算找到了個比較靠譜的答案:
http://help.share-gate.com/article/663-problem-with-the-sharepoint-database
通過進一步研究發現,產生該問題實際上是因為這個builtin的field被我們自己修改過,導致產生了version,進而導致在update時與默認的builtin column的SQL 更新字段即TP_Editor沖突,導致產生了這個問題。
對於SharePoint 2013來說,比較好的解決方案並不是像鏈接上所說了修改這個builtin column的schemaXML,而是應該將這個field的修改給revert回原來的狀態,即調用下面一個方法:
spField.RevertCustomizations()
將field revert回去,這樣再看field的schemaXMl就會發現燕來xml中的version attribute 就沒有了