zoukankan      html  css  js  c++  java
  • 用Javascript获取SharePoint当前登录用户的用户名及Group信息

    在开发一个要部署到SharePoint里的程序的时候,遇到一个需求,要求用纯Javascript的方式获取当前登录到SharePoint的用户信息。

          这里关键的一个问题是如何获取当前登录的用户名,有了用户名以后,就可以用WebService查询该用户名所属的组。

          由于SharePoint的页面中,每个页面右上头都有一个Welcome信息(例如Welcome Domain\Logoned User Name), 所以开始想到的一个比较不正统的办法就是用JavaScript遍历页面的<a></a>元素,如果遇到<a>元素 里面的内容是以Welcome开头的,则认为Welcome后面紧跟着的就是当前登录用户的用户名。

          function getCurrentUser()
          {
                 var tags = document.getElementsByTagName('a');
                 for (var i=0; i < tags.length; i++)
                {
                      if(tags[i].innerText.substr(0,7) == 'Welcome')                
                              return tags[i].innerText.substr(8,tags[i].innerText.length);
                       return null;
                  }
            }
          后来在看了一篇文章《WSS 3.0: getting the current user login name via javascript》后,发现有个更合理的方法来获取当前的登录用户信息。

           在SharePoint页面,Welcome control都给出了一个_spUserId变量并保存了当前登录用户的ID,有此,我们就可以根据这个ID通过WebService获取该用户的信 息。以下帖了示例代码,其中SPAPI_Core.js、SPAPI_Lists.js和SPAPI_UserGroup.js文件上传到 SharePoint的适当的library里,并对应好路径。这三个文件是SPAPI_Javascript的一部份,SPAPI是对 javascript调用webservice的一系列方法的封装,整个文件可以从http://darrenjohnstone.net/网站的DownLoads下下载

    <script language="javascript" src="Shared%20Documents/SPAPI_Core.js"></script>
    <script language="javascript" src="Shared%20Documents/SPAPI_Lists.js"></script>
    <script language="javascript" src="Shared%20Documents/SPAPI_UserGroup.js"></script>

    <script language="JavaScript">

        function getCurrentUserName()   
        {   
            var curUserName = null;
            var lists = new SPAPI_Lists('')   
            var items = lists.getListItems(   
                'User Information List',   
                '',   
                '<Query><Where><Eq><FieldRef Name="ID"/><Value Type="Counter">' + _spUserId + '</Value></Eq></Where></Query>', // query   
                '<ViewFields><FieldRef Name="Name"/></ViewFields>',   
                1, // rowLimit   
                '' // queryOptions   
            );   
          
            if (items.status == 200)   
            {   
                var rows = items.responseXML.getElementsByTagName('z:row');   
          
                if (rows.length == 1)                  
                    curUserName = rows[0].getAttribute('ows_Name');                         
            }
               
            return curUserName;
        }  
        
        function getGroupCollection( userName )
        {
            var arrGroup = new Array();
            var userGroup = new SPAPI_UserGroup( '' )
            var groupItems = userGroup.getGroupCollectionFromUser( userName )
            
            if( groupItems.status == 200 )
            {
                var groupTags = groupItems.responseXML.getElementsByTagName( 'Group' );
                for( var i=0; i < groupTags.length; i++ )           
                    arrGroup.push( groupTags[i].getAttribute("Name") )          
            }
            return arrGroup;
        }
              
        // Test code   
        var userName = getCurrentUserName();
        var groups = getGroupCollection( userName )
        
        document.writeln( "UserName: " + userName + "<p />" )
        document.write( "Groups:" + groups );

    </script>
            将上述代码部署到SharePoint对应页面的Editor Content Web Part 的内容里即可。


    转载自:http://hi.baidu.com/mr_indigo/blog/item/a9196b59e634f688810a1855.html

  • 相关阅读:
    hdu 5171(矩阵快速幂,递推)
    hdu 1316(大整数)
    hdu 5170(数学)
    hdu 5167(dfs)
    hdu 5166(水题)
    hdu 5720(贪心+区间合并)
    BestCoder 2nd Anniversary的前两题
    hdu 3065(AC自动机)
    2.3绘制构造线与射线
    查找ARP攻击源
  • 原文地址:https://www.cnblogs.com/KingStar/p/1603401.html
Copyright © 2011-2022 走看看