【问题标题】:Changing "Created By" in Sharepoint 2007在 Sharepoint 2007 中更改“创建者”
【发布时间】:2012-01-28 04:01:59
【问题描述】:

我会允许用户在共享点列表中创建项目时选择更改“创建者”值。似乎默认隐藏此值并自动填充当前用户。我想在创建或修改项目并使用当前用户预填充时为用户提供此选项,但也为用户提供更改此字段的选项..

任何人有任何建议或谁能指出我正确的方向?

非常感谢

【问题讨论】:

    标签: sharepoint


    【解决方案1】:

    “创建者”列的internal name 是作者。

    编写一个 ItemEventReceiver 并覆盖 ItemUpdated 方法:

    //USER_NAME is user account name that you want to set.
    
    public override void ItemUpdated(SPItemEventProperties properties) { 
        SPSecurity.RunWithElevatedPrivileges(delegate   
        {     
            using (SPWeb web = properties.OpenWeb())     
            {
                web.AllowUnsafeUpdates = true;
    
                // Insert any other updates here
    
                SPUser spUser = web.EnsureUser("USER_NAME");
                string strUserId = spUser.ID + ";#" + spUser.Name;
                spListItem["Author"] = strUserId;
                spListItem.Update();
    
                // if you do not want to change the Modified or Modified By fields,
                // use spListItem.SystemUpdate() instead
    
            }
        });
    }
    

    编辑:更新代码;删除了迭代更新。

    【讨论】:

    • spList.Update 和 web.Update 在这里是多余的,你不需要它们。也不确定为什么在单个项目的事件下运行时要更新所有项目,这没有多大意义。无论如何,在使用此类代码之前我会三思而后行,因为它会降低存储在 SharePoint 中的信息的可靠性,因为您不知道谁实际创建了该项目。
    • +1。 @Vladi Gubler 也提高了可靠性点。确实很厉害。我修改了盲更新。我个人的偏好也不会更新 sharepoint 内部 coumns。我将选择自定义列;但是OP就是这样。
    • 不需要创建strUserId 变量。您可以使用 SPUser 对象直接设置用户字段。所以你可以使用spListItem["Author"] = spUser;
    【解决方案2】:

    谢谢,伙计们,但我应该提到我没有为此使用任何代码。

    我的解决方案是将 Created By 字段重命名为 Created By (unused),创建一个新的 Created By 字段并使用一些自定义Javascript 在页面加载时填充字段。

    【讨论】:

    • 这是一种变通方法,而不是解决方案(您实际上并没有更新 created by 字段)。 @ukhardy 提供了一个示例解决方案,可以回答您的原始问题并应标记为答案。
    • 只有当用户使用网络浏览器创建项目时,使用 javascript 更新字段才有效。在这种情况下,任何使用 Web 服务或对象模型的第三方应用程序都不会这样做。
    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多