2010-11-24 4 views
1

Hallo,Obtenir l'utilisateur actuel SharePoint2010 client OM/ECMAScript

je voudrais faire quelque chose que je pensais être assez simple:
obtenir le LOGINNAME de l'utilisateur actuel à l'aide du client SharePoint2010 OM avec ECMAScript.
Voici mon code:

 var currentcontext = new SP.ClientContext.get_current(); 
    var currentweb = currentcontext.get_web(); 
    currentcontext.load(currentweb); 
    var currentuser = currentweb.get_currentUser(); 
    currentcontext.load(currentuser); 
    var loginName = currentuser.get_loginName(); 

la dernière ligne déclenche une exception:.. « La propriété ou sur le terrain n'a pas été initialisé Il n'a pas été demandé ou la demande n'a pas été exécutée Il faudra peut-être explicitement demandé. "
Mais pourquoi? J'ai chargé le 'currentuser', alors pourquoi la 'propriété ou le champ' n'est pas initialisé?

Répondre

5

Vous devez d'abord récupérer l'utilisateur et charger le Web, pas l'utilisateur.

Ce qui suit devrait fonctionner:

var currentcontext = new SP.ClientContext.get_current(); 
var currentweb = currentcontext.get_web(); 
currentcontext.load(currentweb); 
var currentuser = currentweb.get_currentUser(); 
currentuser.retrieve(); 
currentcontext.load(currentweb); 
var loginName = currentuser.get_loginName(); 

Pour un meilleur exemple en utilisant une requête asynchrone vérifier le tutoriel suivant: SharePoint 2010 ECMAScript - How to know logged in user information

+0

Merci! Mais votre code lance la même exception :-(est la méthode User.retrieve() documentée? Je ne l'ai pas trouvé dans le MSDN! – user4531

+1

Vous avez raison à propos de l'exception.L'utilisateur est seulement disponible après l'appel pour exécuterQueryAsync, essayez sur l'exemple du tutoriel –

5

Voici un exemple plus complet avec ExecuteQueryAsync:

SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js"); 
function runMyCode() { 
    var ctx = new SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    ctx.load(web); 
    var user = web.get_currentUser(); 
    user.retrieve(); 
    ctx.executeQueryAsync(
     function() { 
        //only in the success case you can work with user login 
      doSomethingWithUserLogin(user.get_loginName()); 
     }, 
     function (data) { 
      //notify the failure 
    }); 
}