Как программно переименовать каталог Sharepoint (SPFolder или SPListItem)?
Я попробовал это:
SPFolder folder = ...;
folder.Item["Name"] = newName;
folder.Item.Update();
И это ведет себя таинственно. Если я запускаю его, он выдает исключение:
SPException: Cannot complete this action.
ОДНАКО, если я остановлю его в отладчике после нового назначения имени и перед Update(), и посмотрю на свойства folder.Item, затем продолжу, он работает каждый раз. Это не время, я попытался остановить его в отладчике, не глядя на него в окне Locals, но в тот раз он выдал исключение.
Этот вопрос указывает на подобное решение, но с помощью SystemUpdate(), имеет ли это значение? Программно меняющееся имя SPFolder
6 ответов
В Document Library
поле Name
элемента (папки) имеет StaticName = FileLeafRef
, Так что действительно работает для меня
folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name";
folder.Item.Update();
Попробуйте добавить перед действием "folder.ParentWeb.AllowUnsafeUpdates = true" и после этого вернуть AllowUnsafeUpdates к его предыдущему значению.
SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
//rename guid to new item id
attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
attachfolder.Update();
Вам не нужно менять имя, но название. Так:
folder.Item[SPBuiltInFieldId.Title] = newName;
folder.Item.Update(); // or SystemUpdate(false)
Разница между Update и SystemUpdate заключается в том, что Update будет изменяться или изменяться в зависимости от информации, а если включено управление версиями, будет увеличиваться номер версии. SystemUpdate не обновляет их.
Также обратите внимание, что я использую SPBuiltInFieldId.Title. Это лучше, чем использование "Заголовка", потому что "Заголовок" может вызвать проблемы на сайтах, которые не на английском языке.
folder.Item["Name"] = newName;
folder.ParentWeb.AllowUnsafeUpdates = true;
folder.Item.Update();
folder.ParentWeb.AllowUnsafeUpdates = false;
эта вилка для меня