Как программно переименовать каталог 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;

эта вилка для меня

Вы можете попробовать использовать MoveTo метод

Другие вопросы по тегам