用Javascript擷取SharePoint當前登入使用者的使用者名稱及Group資訊

來源:互聯網
上載者:User

在開發一個要部署到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

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.