Как программно переименовать каталог Sharepoint (SPFolder или SPListItem)? - PullRequest
1 голос
/ 10 сентября 2010

Я пробовал это:

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

И он ведет себя таинственно.Если я его запускаю, выдается исключение:

 SPException: Cannot complete this action.

ОДНАКО, если я остановлю его в отладчике после нового назначения имени и перед Update (), и посмотрю на свойства folder.Item,затем продолжайте, это работает каждый раз.Это не время, я попытался остановить его в отладчике, не глядя на него в окне Locals, но в тот раз он выдал исключение.

Этот вопрос указывает на подобное решение, но с помощью SystemUpdate ()иметь значение? Программно изменяемое имя SPFolder

Ответы [ 6 ]

8 голосов
/ 22 апреля 2013

В Document Library поле Name элемента (папки) имеет StaticName = FileLeafRef. Так что действительно работает для меня это

folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name";
folder.Item.Update();
1 голос
/ 22 апреля 2013

Попробуйте добавить перед действием " folder.ParentWeb.AllowUnsafeUpdates = true " и после этого верните AllowUnsafeUpdates к своему предыдущему значению.

1 голос
/ 23 марта 2012
 SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
            //rename guid to new item id
            attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
            attachfolder.Update();
1 голос
/ 10 сентября 2010

Вам не нужно менять имя, кроме названия.Итак:

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

Разница между обновлением и SystemUpdate заключается в том, что обновление будет изменено изменено / изменено информацией, и если управление версиями включено, оно увеличит номер версии.SystemUpdate не обновляет их.

Также обратите внимание, что я использую SPBuiltInFieldId.Title.Это лучше, чем использование «Заголовка», поскольку «Заголовок» может вызвать проблемы на сайтах, которые не на английском языке.

0 голосов
/ 12 ноября 2013
folder.Item["Name"] = newName;
folder.ParentWeb.AllowUnsafeUpdates = true;
folder.Item.Update();
folder.ParentWeb.AllowUnsafeUpdates = false;

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

0 голосов
/ 14 февраля 2012

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

...