2010-09-10 53 views
1

我已經試過這樣:如何以編程方式重命名Sharepoint目錄(SPFolder或SPListItem)?

SPFolder folder = ...; 
folder.Item["Name"] = newName; 
folder.Item.Update(); 

而且它神祕的行爲。如果我運行它,它拋出一個異常:

SPException: Cannot complete this action. 

不過,如果我停止它在調試器中新的名稱分配之後的更新()之前,看folder.Item的屬性,然後繼續,它每次都有效。這不是一個計時的事情,我試圖在調試器中停止它,而沒有在Locals窗口中查看它,但是它在那個時候拋出了一個異常。

這個問題表明類似的解決方案,但使用SystemUpdate(),這有什麼關係? Programmatically changing name of SPFolder

回答

1

您不需要更改名稱,但是標題。 所以:

folder.Item[SPBuiltInFieldId.Title] = newName; 
folder.Item.Update(); // or SystemUpdate(false) 

更新和SystemUpdate之間的區別是,更新將改變修改/通過信息修改,如果版本啓用將增加版本號。 SystemUpdate不會更新這些。

另請注意,我使用SPBuiltInFieldId.Title。這比使用「標題」要好,因爲「標題」可能會導致非英文網站出現問題。

+0

對不起,我沒有看到,這是爲SharePoint 2003。我沒有任何經驗,在2003年,只有2007年和2010年。它可以這樣工作,但我不確定。 – 2010-09-10 19:49:44

0

您可以嘗試使用MoveTo方法

1
SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid]; 
      //rename guid to new item id 
      attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID; 
      attachfolder.Update(); 
7

Document Library的項目(文件夾)領域NameStaticName = FileLeafRef。所以,真正的工作對我來說是

folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name"; 
folder.Item.Update(); 
1

嘗試行動「folder.ParentWeb.AllowUnsafeUpdates =真」 前添加和後帶回AllowUnsafeUpdates到它的前值。

0
folder.Item["Name"] = newName; 
folder.ParentWeb.AllowUnsafeUpdates = true; 
folder.Item.Update(); 
folder.ParentWeb.AllowUnsafeUpdates = false; 

這個叉我

相關問題