SharePoint / WSS:修改“由”领域?
-
06-07-2019 - |
题
全部 -
我正在使用WSS 3.0。目前,人力资源部门会将员工的内部公司简历上传到我们网站上的文档库,但出于隐私原因,我们必须限制对该文档库的访问,这会强制用户在每次想要更新简历时都要通过HR。
我的想法是创建一个启用了附件的列表,允许用户只查看/编辑他们自己的项目,然后授予HR管理所有条目的权限。这适用于HR将需要创建初始列表项并附加简历的例外,这意味着列表项将“由{hr}创建”。并且附加简历的最终用户不可见/可编辑。
关于如何允许HR修改“由...创建”的任何想法上传字段,以便最终用户可以看到并可以编辑他们的简历,或以不同的方式解决这个问题?
谢谢!
解决方案
创建一个文档库来保存简历。然后给HR部门(SharePoint用户组)“读/写全部”对库的权限,让其他人读/写你自己的“权利。创建名为“恢复”的内容类型基于开箱即用的文档内容类型。然后将包含简历所关注的Employee(SPUser字段)的字段添加到内容类型(以及所需的任何其他字段,即名称,地址等)。在创建listitem时,让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();
其他提示
为什么不直接使用文档库进行简历? (而不是带有附件的列表。)您可以为其内部的所有文档提供HR完整读/写,并且简历的所有者将仅对自己的简历提供权限。
我找到了一种使用SharePoint Designer更改“创建者”字段以创建工作流的方法。
- 使用易于识别的名称在列表中创建一个虚拟字段,例如: XYZZY。使其成为“个人或团体”字段。
- 在SharePoint Designer中,为列表创建工作流。允许手动启动并在创建新项目时自动启动。
- 操作 - >在当前项目中设置字段 - >将XYZZY设置为列表中包含要放入“创建者”的用户帐户的字段。
- 点击完成
- 现在,使用记事本打开您的工作流.xoml文件。替换“XYZZY”与“作者”。保存.xoml文件。
- 在Designer中打开工作流程。单击“完成”,以便使用新代码重新处理。
- 从列表中删除虚拟字段。
- 在列表中的每个现有项目上运行工作流程。新项目会自动自行更正。 醇>
使用自定义上传屏幕,您可以在上传之前更改当前用户的上下文。它需要使用以下内容查找用户令牌(这些是工作代码的片段,其中包含错误处理和其他内容已删除)。请注意,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;
}
我有类似的情况(迁移到sharepoint),我必须将一个带有admin用户的文件添加到doc库,然后“更改”。用户。我这样做了,可能会对你有所帮助:
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();