如何以编程方式重命名 Sharepoint 目录(SPFolder 或 SPListItem)?

发布于 2024-09-18 13:47:03 字数 512 浏览 7 评论 0原文

我已经尝试过这个:

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

它的行为很神秘。如果我运行它,它会抛出异常:

 SPException: Cannot complete this action.

但是,如果我在新名称分配之后和 Update() 之前在调试器中停止它,并查看folder.Item的属性,然后继续,它每次都会起作用。这不是一个计时问题,我尝试在调试器中停止它,而不在“本地”窗口中查看它,但当时它引发了异常。

这个问题表明了类似的解决方案,但使用 SystemUpdate(),这有关系吗? 以编程方式更改 SPFolder 的名称

I have tried this:

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

And it behaves mysteriously. If I run it, it throws an exception:

 SPException: Cannot complete this action.

HOWEVER, if I stop it in the debugger after the new Name assignment and before the Update(), and look at the properties of folder.Item, then continue, it works every time. It's not a timing thing, I tried stopping it in the debugger without looking at it in the Locals window, but it threw an exception that time.

This question indicates a similar solution but using SystemUpdate(), does that matter? Programmatically changing name of SPFolder

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

残月升风 2024-09-25 13:47:03

文档库中,项目(文件夹)的Name字段具有StaticName = FileLeafRef。所以真正对我有用的是

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

In a Document Library the field Name of an item (folder) has StaticName = FileLeafRef. So what really worked for me is

folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name";
folder.Item.Update();
风吹雪碎 2024-09-25 13:47:03

您不需要更改名称,但需要更改标题。
所以:

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

Update 和 SystemUpdate 之间的区别在于 Update 会更改修改/修改的信息,如果启用版本控制,则会增加版本号。 SystemUpdate 不会更新这些。

另请注意,我使用 SPBuiltInFieldId.Title。这比使用“标题”更好,因为“标题”可能会导致非英文网站出现问题。

You do not need to change the name, but te title.
So:

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

The difference between Update and SystemUpdate is that Update will change modified / modified by information and if versioning is enabled it will increase the version number. SystemUpdate does not update these.

Also note that I use SPBuiltInFieldId.Title. This is better than using "Title", because "Title" may cause issues in sites that are not in English.

面如桃花 2024-09-25 13:47:03
 SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
            //rename guid to new item id
            attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
            attachfolder.Update();
 SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
            //rename guid to new item id
            attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
            attachfolder.Update();
究竟谁懂我的在乎 2024-09-25 13:47:03

尝试在操作“folder.ParentWeb.AllowUnsafeUpdates = true”之前添加
然后将AllowUnsafeUpdates恢复到之前的值。

Try to add before the action "folder.ParentWeb.AllowUnsafeUpdates = true"
and after it bring back the AllowUnsafeUpdates to it's previous value.

微暖i 2024-09-25 13:47:03

您可以尝试使用 MoveTo 方法

You can try using the MoveTo method

深巷少女 2024-09-25 13:47:03
folder.Item["Name"] = newName;
folder.ParentWeb.AllowUnsafeUpdates = true;
folder.Item.Update();
folder.ParentWeb.AllowUnsafeUpdates = false;

这把叉子给我

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

this fork for me

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文