【问题标题】:Setting author field in SPListItem won't persist在 SPListItem 中设置作者字段不会持续存在
【发布时间】: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


    【解决方案1】:

    找到答案,使用

    SPFieldUserValue val = new SPFieldUserValue(newsArchive, user.ID, user.Name);
    archiveItem["Author"] = val; 
    archiveItem.SystemUpdate(false);
    

    成功了!

    【讨论】:

    • 那么创建新的 SPFieldUserValue 可能是将其正确映射到 newsArchive?有用,谢谢!
    • 看起来是这样,也许构造函数需要对 SPWeb 的显式引用?
    • SystemUpdate(false) 可以被 SystemUpdate() 缩短。
    • 我不断收到:“项目由 .... on ... 更改”并且失败
    【解决方案2】:

    我也遇到过同样的问题。看看this question

    对我有用的方法是将您在最终示例中的相同代码包装在提升的权限中。

    编辑

    你为什么不尝试替换:

    SPUser user = newsArchive.SiteUsers[userName];
    

    与:

    SPUser user = newsArchive.EnsureUser(userName);
    

    然后您将知道用户在网络中并获得对他们的引用。 SiteUsers 集合为您提供站点集合中的用户 - 他们不一定已添加到 Web。如果 SharePoint 没有找到用户,它可能会使用系统帐户。

    【讨论】:

    • 已经检查过了,尝试了 SystemUpdate 和 Update,它仍然恢复到 sytemaccount...
    • 我会试一试,虽然我之前确实尝试过。将所有内容包装在 RunWithElevatedPrivileges 中并将 AllowUnsafeUpdates 添加到代码中。附言它正在从计时器作业中运行...
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多