SharePoint如何获取当前用户的账户名?

6

SharePoint 2010是否在全局可访问的JS对象中存储了当前用户的帐户名?

我找到的每一个解决方案都涉及一些变体的ajax Web服务调用,这似乎是访问应该是微不足道的信息所采取的极为复杂的解决方案。

我可以轻松访问的内容:

  • __spUserId获取当前用户ID
  • 通过分析功能区的HTML来获取当前用户名(例如:$('#zz17_Menu').text()

但是这两者都不是帐户名。

我不想做的事情:

  • 使用SOAP调用GetUserProfileByName来获取当前用户信息
  • 通过进行../_layouts/userdisp.aspx的Ajax调用来获取当前用户信息
2个回答

5
对于其他遇到同样问题的人,我在一年后找到了解决方法。
在您的母版页中注册SPSWC(如果您使用Randy Drisgill的起始版,它已经存在)。
<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

在访问属性(例如:UserName)之前,先获取数据。

<SPSWC:ProfilePropertyLoader runat="server"/>

接下来,访问其中一个属性,我建议使用TitleMode将其嵌入到<script>元素中。
<script>
  var username = '<SPSWC:ProfilePropertyValue PropertyName="UserName" TitleMode="true" runat="server"/>';
</script>

现在我们使用这个PasteBin演示来填充一个全局变量,该变量包含一些属性,如名字、姓氏、用户名、个人资料图片和状态。


这是一个非常好的想法,也是不必求助于异步调用SharePoint服务的良好替代方案。它还可以与Angular很好地配合使用,因为您可以在应用程序引导时定义带有用户数据的Angular值,而不是使用Angular服务来“延迟加载”用户信息。 - SPArcheon

1

你真的需要进行网络服务调用才能可靠地完成它。幸运的是,SPServices使这一过程变得快速和无痛。

http://spservices.codeplex.com/wikipage?title=$%28%29.SPServices.SPGetCurrentUser

$().SPServices.SPGetCurrentUser({
    fieldName: "Name",
    debug: false
});

不幸的是,“快速而无痛苦”对我来说并不意味着我的应用程序也是如此。SPServices使用我提到的第二种路线,它会带来一个完整的../_layouts/userdisp.aspx副本,在我的环境中,这是22KB的数据,需要超过一秒钟才能检索,然后让jQuery将整个响应初始化为文档片段,并最终深入获取您的信息。这就像我建造一座房子,等待你在邮箱上写下你的名字一样。 - Sinetheta
2
如果性能是你的目标,那么我建议编写一个自定义的REST服务,该服务接收用户ID并返回用户名。这样,所有的繁重工作都可以在服务器端完成。 - Rob Windsor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接