的SharePoint / WSS:修改场“创建者”?(SharePoint/WSS: Modify

2019-09-16 13:13发布

全部 -

我使用WSS 3.0。 目前,HR会上传员工的公司内部简历到我们的网站上的文档库,但出于隐私原因,我们必须然后限制访问该文档库,强制用户再通过人力资源,他们要更新自己的简历每次都去。

我的想法是创建一个列表带有附件的启用,使用户只能查看/编辑自己的物品,然后给HR管理权限的所有条目。 这适用于不同的是HR需要创建初始列表项和附加的简历,这意味着和列表项将“由{}人力资源创造的”不可见/编辑通过其简历附终端用户。

我如何可以让HR修改上载“创建者”字段,以便最终用户将可以查看和修改自己的简历,或去这个以不同的方式任何想法?

谢谢!

Answer 1:

创建一个文档库来保存恢复的。 然后给HR部门(SharePoint用户组)“读/写所有的”关于库权限,在给其他人的读/写自己的”权利。创建一个名为内容类型‘的基础上外的the-简历’箱文档内容类型,然后添加包含员工(SPUser场)人简历的关注内容类型(以及任何其他领域的,即姓名,地址等)的字段。这在有正确填写HR创建列表项时(使所需的字段)。

然后,写必将给您刚刚创建的内容类型itemeventreceiver并覆盖ItemUpdated事件。

该代码将类似如下:

public override void ItemUpdated(SPItemEventProperties properties)
{
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    using (SPWeb web = properties.OpenWeb())
    {
       web.AllowUnsafeUpdates = true; 
       var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
       if (item != null)
       {
         if (item.Fields.ContainsField("Employee"))
         {
           item["Author"] = item["Employee"]; 
           // Author is the internal name of the Created by field, 
           // always use Internal Names!
           DisableEventFiring();
           item.SystemUpdate();
           EnableEventFiring();
         }
       }
     }
   });
}

您可以使用FeatureReceiver内容类型,像这样绑定ItemEventReceiver:

SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();


Answer 2:

为什么不直接使用简历文档库? (而不是一个列表瓦特/附件)。你可以给HR完全读/写中的所有文件,以及简历的主人将有利于权限只有他们自己的简历。



Answer 3:

我找到了一种方法来改变使用SharePoint Designer创建工作流的创建领域。

  1. 具有易于地点名称,如XYZZY创建您列表中的空场。 使它成为一个“个人或组”字段。
  2. 在SharePoint Designer中,创建列表的工作流。 允许手动启动,并创建新的项目时自动启动。
  3. 操作 - >设置场当前项目 - >设置XYZZY到列表中包含要投入到创建用户帐户的领域。
  4. 单击Finish
  5. 现在,打开您的工作流程.xoml用记事本文件。 替换“XYZZY”与“作者”。 保存.xoml文件。
  6. 在Designer中打开工作流程。 单击完成,使之与新的代码重新处理。
  7. 从列表中删除虚拟场。
  8. 在你的名单上运行的每个现有项目的工作流程。 新项目将自自动更正。


Answer 4:

通过自定义上传画面,你可以做上传前更改当前用户的上下文。 它需要查询使用类似下面的用户令牌(这些都是错误处理和其他的东西删除工作代码片段)。 需要注意的是EnsureUser将要求当前用户主要是管理员/所有者。

using (SPSite site = GetImpersonatedSite(runAsUser))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do stuff here
    }
}

private SPSite GetImpersonatedSite(string username)
{
    user = SPContext.Current.Web.EnsureUser(username);
    SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
    return site;
}


Answer 5:

我曾在那里我不得不添加一个文件admin用户的文档库,然后“变”的网友有类似的情况(迁移到SharePoint)。 我做了这个样子,可能会有点帮助你:

using (var root = site.RootWeb)
 {
   var users = root.SiteUsers;
   var user = users["domain\username"];
   file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
   file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
   file.Item.UpdateOverwriteVersion();


文章来源: SharePoint/WSS: Modify “created by” field?