2010-09-10 5 views
1

J'ai essayé:Comment renommer par programme un répertoire Sharepoint (SPFolder ou SPListItem)?

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

Et il se comporte mystérieusement. Si je le lance, il lance une exception:

SPException: Cannot complete this action. 

Cependant, si je l'arrête dans le débogueur après la nouvelle affectation de nom et avant la mise à jour(), et regarde les propriétés de folder.Item, puis continuer , ça marche à chaque fois. Ce n'est pas une question de timing, j'ai essayé de l'arrêter dans le débogueur sans le regarder dans la fenêtre Locals, mais il a lancé une exception à ce moment-là.

Cette question indique une solution similaire, mais en utilisant SystemUpdate(), est-ce important? Programmatically changing name of SPFolder

Répondre

1

Vous n'avez pas besoin de changer le nom, mais le titre. Alors :

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

La différence entre mise à jour et SystemUpdate est que mise à jour changera modifié/modifié par des informations et si versioning est activé, il augmentera le numéro de version. SystemUpdate ne les met pas à jour.

Notez également que j'utilise SPBuiltInFieldId.Title. C'est mieux que d'utiliser "Title", car "Title" peut causer des problèmes dans les sites qui ne sont pas en anglais.

+0

Désolé, je ne vois pas qu'il était pour SharePoint 2003. Je n'ai pas d'expérience en 2003, seulement 2007 et 2010. Il peut travailler comme ça, mais Je ne suis pas sûr. –

0

Vous pouvez essayer d'utiliser la méthode MoveTo

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

Dans un Document Library le champ Name d'un élément (dossier) a StaticName = FileLeafRef. Alors qu'est-ce vraiment travaillé pour moi est

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

Essayez d'ajouter avant l'action « folder.ParentWeb.AllowUnsafeUpdates = true » et après ramener les AllowUnsafeUpdates à sa valeur précédente.

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

cette fourche pour moi

Questions connexes