2012-06-20 263 views
6

SharePoint 2010是否將當前用戶的帳戶名存儲在全局可訪問的JS對象中的某個位置?SharePoint獲取當前用戶帳戶名?

我能找到的每個解決方案都涉及ajax Web服務調用的一些變體,這看起來像是一個非常繁重的解決方案,以訪問應該是一個微不足道的信息。刮色帶的HTML

  • __spUserId
  • 獲取當前用戶ID獲取當前用戶名:

    事情,我可以很容易地訪問(如:$('#zz17_Menu').text()

但這些都不是帳號名稱。

事情我寧願不做:

  • 獲取與SOAP調用當前用戶信息,以GetUserProfileByName
  • 通過調用Ajax的../_layouts/userdisp.aspx獲取當前用戶信息

回答

5

對於其他人誰碰到這個失蹄,一年後我想出如何。

到您的母版頁register SPSWC(如果您使用Randy Drisgill的starter master它將已經在那裏)。

<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 

然後,之前您要訪問的屬性(如:用戶名)拉數據

<SPSWC:ProfilePropertyLoader runat="server"/> 

接下來,屬性訪問一個,我會建議使用TitleMode將它嵌入在<script>元素。

<script> 
    var username = '<SPSWC:ProfilePropertyValue PropertyName="UserName" TitleMode="true" runat="server"/>'; 
</script> 

我們現在用它作爲顯示在此PasteBin demo填充全局與像姓,名,用戶名,個人資料圖片,狀態的一些屬性。

+0

好主意,以及對SharePoint服務進行異步調用的好選擇。角度也很好,因爲您可以在應用程序引導時使用用戶數據定義角度值,而不是使用角度服務來「延遲加載」用戶信息。 – SPArchaeologist

1

你真的需要做一個web服務調用來可靠地做到這一點。謝天謝地,SPServices使它快速而輕鬆地這樣做。

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

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

不幸的是,對我來說「快速和無痛」並不意味着我的應用程序快速和無痛。 SPServices使用我提到的第二條路線,它帶來了一個完整的../_layouts/userdisp.aspx副本,在我的環境中是22KB的數據,它接管第二個數據來檢索,然後獲取jQuery將整個響應初始化爲文檔片段,並最終鑽取以獲取您的信息。這與我建造房屋類似,等待你在郵箱上寫下你的名字。 – Sinetheta

+2

如果性能是您的目標,那麼我建議編寫一個自定義REST服務,該服務採用用戶標識並返回用戶名。這樣,所有繁重的工作都可以在服務器端完成。 –