2012-06-20 29 views
6

SharePoint 2010 memorizza l'accountname dell'utente corrente da qualche parte in un oggetto JS accessibile globalmente?SharePoint ottiene nome account utente corrente?

Ogni soluzione che riesco a trovare riguarda alcune variazioni di una chiamata al servizio web ajax e questa sembra una soluzione estremamente pesante per accedere a quella che dovrebbe essere una banale informazione.

cose che posso accedere con facilità:

  • Get corrente utente da __spUserId
  • Get nome utente corrente raschiando il codice HTML del nastro (ad esempio: $('#zz17_Menu').text())

Ma nessuno di questi è il nome dell'account.

Le cose che invece non lo farei:

  • Ricevi informazioni utente corrente con una chiamata SOAP per GetUserProfileByName
  • Ricevi informazioni utente corrente effettuando una chiamata AJAX per ../_layouts/userdisp.aspx

risposta

5

Per chiunque altro che si imbatte in questo, un anno più tardi ho capito come.

Alla pagina principale register SPSWC (se si utilizza Randy Drisgill's starter master sarà già lì).

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

Poi, prima che si desidera accedere a una proprietà (ad esempio: nome utente) tirare dentro i dati

<SPSWC:ProfilePropertyLoader runat="server"/> 

successivo, l'accesso una delle proprietà, mi consiglia di utilizzare TitleMode per incorporare in un <script> elemento.

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

Ora lo usano come mostrato in questo PasteBin demo per popolare un globale con un paio di immobili come il nome, il cognome, nome utente, immagine del profilo, lo status.

+0

ottima idea e una buona alternativa al ricorso alle chiamate asincrone ai servizi di SharePoint.Funziona anche abbastanza bene con angolare, dal momento che è possibile definire un valore angolare con i dati dell'utente al tempo di bootstrap dell'app invece di utilizzare un servizio angolare per "caricare pigro" le informazioni utente. – SPArchaeologist

1

È davvero necessario effettuare una chiamata al servizio Web per farlo in modo affidabile. Per fortuna, SPServices lo rende veloce e indolore.

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

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

Sfortunatamente "veloce e indolore" per me, non significa veloce e indolore per la mia applicazione. SPServices utilizza il secondo percorso che ho menzionato, introduce una copia completa di ../_layouts/userdisp.aspx che nel mio ambiente è di 22KB di dati che impiega più di un secondo a recuperare, quindi fa in modo che jQuery inizializzi l'intera risposta come un documento frammento e infine esegue drill down per ottenere le informazioni. È simile a me che costruisco una casa e aspetto che tu scriva il tuo nome sulla casella di posta. – Sinetheta

+2

Se la prestazione è il tuo obiettivo, ti suggerisco di scrivere un servizio REST personalizzato che accetta l'id utente e restituisce il nome utente. In questo modo, tutto il sollevamento pesante può essere fatto sul lato server. –

Problemi correlati