A la hora de desarrollar cuando estamos trabajando con el modelo de objetos de Servidor, ya hemos visto cómo podemos utilizar el objeto SPContext de una forma eficiente para obtener ciertos parámetros relativos a la conexión que estamos haciendo, como por ejemplo, el usuario que está conectado, la url relativa y ciertos valores que ya tenemos cargados y, por lo tanto, no tenemos que consultar. Podéis visualizar todos los métodos y propiedades en este link de Technet
Ahora bien, cada vez JavaScript está más presente dentro de la forma en la que desarrollamos para SharePoint y, por lo tanto, hay aspectos que tenemos que conocer y utilizar. Una mala practica que solemos hacer, es, por ejemplo, cómo obtenemos el usuario del Contexto. Es más: por ejemplo, si creamos un Proyecto de una APP de tipo SharePoint Hosted ya nos deja indicado cómo podemos consultar el usuario del contexto. El ejemplo muestra el siguiente código:
var context = SP.ClientContext.get_current(); var user = context.get_web().get_currentUser(); // Este código se ejecuta cuando el DOM está preparado y crea un objeto de contexto necesario para poder usar el modelo de objetos de SharePoint $(document).ready(function () { getUserName(); }); // Esta función prepara, carga y ejecuta una consulta de SharePoint para obtener información del usuario actual function getUserName() { context.load(user); context.executeQueryAsync(onGetUserNameSuccess, onGetUserNameFail); } // Esta función se ejecuta si la llamada anterior se realiza correctamente // Reemplaza el contenido del elemento 'message' con el nombre de usuario function onGetUserNameSuccess() { $('#message').text('Hello ' + user.get_title()); } // Esta función se ejecuta si se produce un error en la llamada anterior function onGetUserNameFail(sender, args) { alert('Failed to get user name. Error:' + args.get_message()); }
Esto es una opción para obtener los datos del usuario, pero para ello, tenemos que realizar un petición al modelo de objetos de cliente. Yo no considero esta practica la mejor porque, por un lado, ésta información ya la tenemos disponible en una variable y, por lo tanto, la podemos utilizar sin ningún problema y sin realizar ninguna operación.
¿Donde está ésta variable?
Pues la respuesta es fácil: si abrimos la ventana de depuración del navegador haciendo uso de las herramientas de depuración de cualquier navegador moderno, podemos obtener esta información. Personalmente, me gustan mucho las herramientas de depuración que tiene Chrome: podemos poner cualquier punto de interrupción, depurar las llamadas realizadas, mirar tiempos de carga, analizar el rendimiento del JavaScript y muchas cosas más. IE en su versión 11 ha evolucionado mucho respecto a otras versiones, pero me falta algo más sencillo como hacemos con Visual Studio. Para obtener estos datos pulsamos F12 en el navegador vamos a la pestaña de Console e introducimos este objeto _spPageContextInfo y se visualiza esta información:
Este objeto tiene mucha información desde el Usuario como podemos observar viendo el userId, hasta la página que estamos visualizando, la URL del servidor, el pagelayout que está utilizando, el lenguaje de la web, el idioma, etc. Es decir, muchos de los valores que consultamos implícitamente haciendo uso del modelo de objetos en algunas ocasiones no hace falta que lo consultemos, ya que disponemos la información en el contexto y por lo tanto, hacer la consulta solamente penaliza el rendimiento.