我对 Sharepoint 还很陌生,我想做的是创建一个包含所有员工的庞大主列表,然后根据人员组对该人员做出不同的“查看”
例如:
新员工可能会有
- 薪资信息
- 安全信息
- 人事信息
- 合同信息
我希望将所有这些放在一行中(每个员工),但当人力资源组中的某个人登录时,他们只能看到人员和薪水或类似的内容。
如果这不是一个选项,有没有办法链接不同列表之间的表格?
答案1
简单。1 个列表。该列表有几种不同的视图,基于元数据 - 部门、建筑等等。您可以在每个视图中显示不同的列。例如...对于人力资源,您可以显示薪水列以及姓名列。对于普通人,另一个视图不显示薪水。
现在我们制作几个 Web 部件页面。在每个 Web 部件页面上,放置一个显示列表的 Web 部件。但它只显示一该列表的视图,没有实际方法可以访问任何其他列表。
现在我们将每个 Web 部件页面的权限仅限于您希望查看它的组。
因此 - Web 部件页显示同一列表的不同视图,并且这些 Web 部件页上有权限限制。
答案2
无需 asp 代码的解决方案:
您将需要两个 javascript 库:
- Jquery
- SPServices -http://spservices.codeplex.com/
在 SharePoint 中,创建一个名为“Jquery 库”的非公共库,并将您的 jquery 和 SPServices 上传到其中。
在 SharePoint 设计器中,创建 AllItems.aspx 的副本。
在 SharePoint Designer 中,编辑文件 AllItems.aspx。清除所有代码并插入此 javascript 代码。
<script language="javascript" type="text/javascript" src="PATH-TO-YOUR-JQUERY-FILE"></script>
<script language="javascript" type="text/javascript" src="PATH-TO-YOUR-SPSERVICES-FILE"></script>
<script type="text/javascript">
$(document).ready(function() {
//Get current username
userName = $().SPServices.SPGetCurrentUser({
fieldName: "Name",
debug: false
});
//get user's group
$().SPServices({
operation: "GetGroupCollectionFromUser",
userLoginName: userName,
async: false,
completefunc: function(xData, status){
$(xData.responseXML).find("Group").each(function(){
if(status == "success"){
var nomeGrupo = $(this).attr('Name');
//if user is in group 1 redirect to page 1. If user is in group 2 redirect to page 2 etc...
if(nomeGrupo=="Grupo sergio"){
window.location.replace("PATH-TO-PAGE-1/SomeItems.aspx");
}else{
window.location.replace("/PATH-TO-PAGE-2/ViewAll.aspx");
}
}else{
alert("Falha na comunicação com o Sharepoint");
}
});
}
});
});
</script>
此代码会将用户重定向到包含自定义 web-parts-view 的其他页面。
在 SharePoint 设计中,将 AllItems.aspx 重命名为 SomeItems.aspx(例如)。
您可以创建该文件的多个副本,然后按照下一步对其进行自定义。
编辑此文件并删除位于 PlaceHolderMain 的主 Web 部件。(提示:如果您在 SharePoint 设计器中处于拆分视图(编码设计)中,则可以单击并删除)。
然后,您可以为列表插入自定义 Web 部件视图。在此自定义视图中,您可以过滤数据或不显示某些列。
答案3
您好,我设法通过编程隐藏了一个字段(见下文)。“批准”字段现在隐藏在列表的编辑屏幕中
SPField Appprove = bdcList.Fields.GetField("Approved");
Appprove.ShowInEditForm = false;
Appprove.ShowInDisplayForm = true;
Appprove.ShowInNewForm = false;
Appprove.Update();