2012-06-20 18 views
6

Speichert SharePoint 2010 den Kontonamen des aktuellen Benutzers irgendwo in einem global zugänglichen JS-Objekt?SharePoint erhalten aktuellen Benutzerkontoname?

Jede Lösung, die ich finden kann, beinhaltet einige Variationen eines Ajax-Web-Service-Aufrufs und das scheint wie eine extrem schwere Lösung für den Zugriff auf was eine triviale Information sein soll.

Dinge, die ich einfach zugreifen:

  • aktuellen Benutzer-ID Erhalten Sie von __spUserId
  • durch Abkratzen der html des Bandes aktuellen Benutzernamen Get (zB: $('#zz17_Menu').text())

Aber keiner von diesen ist der Kontoname.

Dinge, die ich lieber nicht tun:

  • aktuelle Benutzer Info Anruf mit einem SOAP Get
  • Erhalten aktuelle Benutzer-Info für ../_layouts/userdisp.aspx, indem sie einen Ajax-Aufruf GetUserProfileByName

Antwort

5

Für alle anderen, die über diese stolpert, ein Jahr später habe ich herausgefunden, wie.

Zu Ihrer Masterseite register SPSWC (wenn Sie Randy Drisgill's starter master verwenden, wird es bereits da sein).

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

Dann, bevor Sie eine Eigenschaft zugreifen möchten (zB: Username) ziehen in den Daten

<SPSWC:ProfilePropertyLoader runat="server"/> 

Als nächstes Zugang eine der Eigenschaften, würde ich empfehlen TitleMode verwenden es in ein einzubetten <script> Element.

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

Wir verwenden es nun, wie in diesem PasteBin demo gezeigt eine globale mit einigen Eigenschaften wie Vorname aufzufüllen, Nachname, Benutzername, Profilbild, Status.

+0

großartige Idee und eine gute Alternative zu asynchronen Aufrufen von SharePoint-Diensten.Funktioniert auch ziemlich gut mit eckigen, da Sie dann einen Winkelwert mit den Benutzerdaten bei App-Bootstrap-Zeit definieren können, anstatt einen eckigen Dienst zu verwenden, um die Benutzerinformationen "lazy load" zu laden. – SPArchaeologist

1

Sie müssen wirklich einen Web-Service-Anruf machen, um es zuverlässig zu tun. Glücklicherweise macht SPServices es schnell und schmerzlos.

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

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

Leider "schnell und schmerzlos" bedeutet für mich nicht schnell und schmerzlos für meine Anwendung. SPServices verwendet diese zweite Route, die ich erwähnte, es bringt eine vollständige Kopie von ../_layouts/userdisp.aspx, die in meiner Umgebung 22 KB Daten enthält, die eine Sekunde zum Abrufen dauert, dann erhält jQuery die gesamte Antwort als ein Dokument zu initialisieren fragmentieren und schließlich nach unten bohren, um Ihre Informationen zu erhalten. Das ist vergleichbar damit, dass ich ein Haus baue und darauf warte, dass du deinen Namen auf den Briefkasten schreibst. – Sinetheta

+2

Wenn Leistung Ihr Ziel ist, empfehle ich, einen benutzerdefinierten REST-Dienst zu schreiben, der die Benutzer-ID verwendet und den Benutzernamen zurückgibt. Auf diese Weise kann das gesamte schwere Heben auf der Serverseite erfolgen. –

Verwandte Themen