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