全部 -
我使用WSS 3.0。 目前,HR会上传员工的公司内部简历到我们的网站上的文档库,但出于隐私原因,我们必须然后限制访问该文档库,强制用户再通过人力资源,他们要更新自己的简历每次都去。
我的想法是创建一个列表带有附件的启用,使用户只能查看/编辑自己的物品,然后给HR管理权限的所有条目。 这适用于不同的是HR需要创建初始列表项和附加的简历,这意味着和列表项将“由{}人力资源创造的”不可见/编辑通过其简历附终端用户。
我如何可以让HR修改上载“创建者”字段,以便最终用户将可以查看和修改自己的简历,或去这个以不同的方式任何想法?
谢谢!
创建一个文档库来保存恢复的。 然后给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();
为什么不直接使用简历文档库? (而不是一个列表瓦特/附件)。你可以给HR完全读/写中的所有文件,以及简历的主人将有利于权限只有他们自己的简历。
我找到了一种方法来改变使用SharePoint Designer创建工作流的创建领域。
- 具有易于地点名称,如XYZZY创建您列表中的空场。 使它成为一个“个人或组”字段。
- 在SharePoint Designer中,创建列表的工作流。 允许手动启动,并创建新的项目时自动启动。
- 操作 - >设置场当前项目 - >设置XYZZY到列表中包含要投入到创建用户帐户的领域。
- 单击Finish
- 现在,打开您的工作流程.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;
}
我曾在那里我不得不添加一个文件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();