2012-06-20 92 views
6

¿SharePoint 2010 almacena el nombre de cuenta del usuario actual en algún lugar de un objeto JS accesible globalmente?SharePoint obtiene el nombre de usuario actual?

Cada solución que puedo encontrar implica una variación de una llamada de servicio web ajax y esto parece una solución extremadamente pesada para acceder a lo que debería ser una información trivial.

cosas que puedo acceder fácilmente:

  • póngase al identificador de usuario desde __spUserId
  • Obtener nombre de usuario actual raspando el html de la cinta (por ejemplo: $('#zz17_Menu').text())

Pero ninguno de estos es el nombre de cuenta.

cosas que preferiría no hacerlo:

  • Obtener información del usuario actual con una llamada SOAP para GetUserProfileByName
  • en Obtener información del usuario actual al hacer una llamada Ajax para ../_layouts/userdisp.aspx

Respuesta

5

Para cualquier otra persona que se topa con esto, un año más tarde me di cuenta de la forma.

a su página principal register SPSWC (si está usando de Randy Drisgill starter master ya estará allí).

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

Entonces, antes de que desee acceder a una propiedad (por ejemplo: nombre de usuario) tire de los datos

<SPSWC:ProfilePropertyLoader runat="server"/> 

A continuación, acceder a una de las propiedades, yo recomendaría usar TitleMode para incrustarlo en una <script> elemento.

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

ahora lo usamos como se muestra en este PasteBin demo para rellenar un mundial con algunas propiedades como nombre, apellido, nombre de usuario, foto de perfil, de estado.

+0

excelente idea y una buena alternativa para recurrir a llamadas asíncronas a servicios de SharePoint.También funciona bastante bien con angular, ya que a continuación, puede definir un valor angular con los datos del usuario en el momento de arranque de la aplicación en lugar de utilizar un servicio angular para "cargar de forma lenta" la información del usuario. – SPArchaeologist

1

Realmente necesita hacer una llamada de servicio web para hacerlo de manera confiable. Afortunadamente, SPServices lo hace de forma rápida e indolora.

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

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

Desafortunadamente "rápido y sin dolor" para mí, no significa que sea rápido e indolora para mi aplicación. SPServices usa esa segunda ruta que mencioné, trae una copia completa de ../_layouts/userdisp.aspx que en mi entorno tiene 22KB de datos que tardan más de un segundo en recuperarse, luego obtiene jQuery para inicializar toda la respuesta como un documento fragmento, y finalmente profundiza para obtener su información. Eso es como construir una casa y esperar a que escriba su nombre en el buzón. – Sinetheta

+2

Si el rendimiento es su objetivo, entonces le sugiero que escriba un servicio REST personalizado que tome la identificación del usuario y devuelva el nombre de usuario. De esta forma, todo el trabajo pesado se puede hacer en el lado del servidor. –

Cuestiones relacionadas