根据SharePoint组中当前用户的成员身份隐藏NewForm.aspx和EditForm.aspx上的字段(2007)

时间:2013-05-01 19:26:33

标签: jquery sharepoint-2007 spservices

我在博客中找到了许多推荐方法,希望能够解答如何执行此操作,并且未能使用SharePoint MOSS 2007和SharePoint Designer 2007成功地使其中任何一个工作。

我已经隐藏了我不希望任何用户在网站内容类型中看到的字段(这些字段由SharePoint Designer工作流设置)。

我正在尝试根据当前用户是否在特定SharePoint组中隐藏NewForm.aspx和EditForm.aspx上的特定字段。我的列表包含我创建的网站内容类型和网站列。

当我在Designer中查看NewForm.aspx时,设计视图为我提供了通用字段1,2,3,而不是我的特定内容类型。如果我创建一个新的aspx页面并插入SharePoint控件>自定义列表表单,然后我的字段显示。如果你有它,我会采取方法在设计师编辑,但我需要有人检查下面的解决方案,并帮助我找出我搞砸的地方。

使用选项指示使用jquery(1.9.0.js)和SPServices(0.7.2.min.js)。

  1. 我将这两个文件上传到我网站上的文档库。

  2. 然后我在NewForm.aspx页面上创建了一个CEWP(不是通过设计师而是通过将“shared& ToolPaneView = 2”附加到网址的前端。

  3. 将以下代码粘贴到CEWP中:

  4. ”     

    <script type="text/javascript" language="javascript" src="/Style%20Library/JavaScript%20Utilities/jquery.SPServices-0.7.2.min.js"></script>
    
    <script language="javascript" type="text/javascript">
    
    $(document).ready(function() {
    
      $().SPServices({
    
        operation: "GetGroupCollectionFromUser",
        userLoginName: $().SPServices.SPGetCurrentUser(),
        async: false,
           completefunc: function (xData, Status) {
           var xml = xData.responseXML.xml;
           if (xml.search('MyGroupName') != -1)
    
    function hidefields() {
    
             var control = findacontrol("MyColumnName");
             control.parentnode.parentnode.style.display="none";
      }
         }
      });
    });
    </script>
    

    当我在“源编辑器”对话框中单击“保存”时,它会关闭,在我的主浏览器状态下,我收到一条消息“请等待脚本加载...”然后没有任何反应。我可以单击“确定”修改共享Web部件菜单并关闭Web部件。获取相同的等待消息...

    目标是,如果当前用户不是MyGroupName的一部分,那么MyColumnName的字段将不会在页面上显示。不是开发者,而是试图在现实生活中玩一个。

    如果你还在读书,谢谢!

2 个答案:

答案 0 :(得分:0)

您提供的脚本不起作用。只是检查一下,你是否包含了jQuery和SPServices的<script />声明?浏览器是否显示页面加载期间发生的任何脚本错误?我偶尔会得到404,因为我没有正确引用脚本文件。

此外,如果您的xml.search('MyGroupName')成功,则声明一个新功能。我怀疑你想要调用函数而不是只是声明它。但是,jQuery为您尝试执行的操作类型提供了一些有用的缩写。例如,如果“MyColumnName”是列的id,则可以执行以下操作:

<script type="text/javascript" language="javascript" src="/Style%20Library/JavaScript%20Utilities/jquery.SPServices-0.7.2.min.js"></script>

<script language="javascript" type="text/javascript">

$(document).ready(function() {

  $().SPServices({

    operation: "GetGroupCollectionFromUser",
    userLoginName: $().SPServices.SPGetCurrentUser(),
    async: false,
    completefunc: function (xData, Status) {
      var xml = xData.responseXML.xml;
      if (xml.search('MyGroupName') != -1) {
        $("#MyColumnName").parent().parent().hide();
      }
    }
  });
});
</script>

如果'MyColumnName'不是您要查找的元素的id,则可以使用其他方法匹配您要隐藏的元素。请查看jQuery.com,特别是jQuery selectors了解替代方案。

答案 1 :(得分:0)

使用:if (xml.search('Group Name') == -1) { //Hide the controls }

请参阅:Hide SharePoint List Columns based on User Permissions

上的完整实施