【发布时间】:2009-06-26 08:13:58
【问题描述】:
我正在尝试将 SPListItem(带文件)从一个网站集复制到另一个网站集。我通过创建这样的文件来做到这一点:
var archiveFile = newsArchive.Lists[listName].RootFolder.Files.Add(originalItem.File.Name, originalItem.File.OpenBinary());
var archiveItem = archiveFile.Item;
通过我编写的实用方法,然后将新项目的所有字段值设置为与原始项目相对应
Utilities.PopulateListItemMetadata(....)
问题是,这不会保留作者字段。
我尝试以各种可以想象的方式明确设置作者字段,例如:
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user.ID + ";#" + user.LoginName;
archiveItem.Update();
就这样
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user;
archiveItem.Update();
但只要调用 SPListItem.Update() 方法,archiveItem["Author"] 字段就会恢复为 sharepoint\system。我在这里有点不知所措,这应该可以工作..
P.S. SPListItem.GetUser 方法是一个扩展方法
P.P.S.代码正在从计时器作业中运行...
编辑:通过向内容类型添加一个新字段然后设置该字段以反映原始项目的作者进行了更多挖掘,但这也没有设置。但是, web.EnsureUser(username) 确实返回了正确的用户。这是奇怪还是什么!?!
【问题讨论】:
标签: sharepoint copy splistitem sitecollection