您的位置:首页 > Web前端 > JavaScript

用Javascript获取SharePoint当前登录用户的用户名及Group信息

2008-10-24 09:47 1266 查看
在开发一个要部署到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 的内容里即可。最后,要感谢Avrin Song的支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: