2010-11-24 62 views
1

喂,获取当前用户在SharePoint2010客户端OM/ECMAScript的

我想这样做的东西,我认为将是相当简单:
得到使用SharePoint2010客户端OM与ECMAScript的当前用户的登录名。
这里是我的代码:

 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(); 

最后一行抛出异常:。 “的属性或字段尚未初始化它没有被要求或请求尚未执行这可能需要明确要求“。
但是为什么?我已经加载了'currentuser',那为什么'property或field'没有被初始化?

回答

5

您需要先检索用户并加载网页,而不是用户。

下面应该工作:

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(); 

对于一个更好的例子使用异步查询检查下面的教程: SharePoint 2010 ECMAScript - How to know logged in user information

+0

谢谢!但是,你的代码会抛出相同的异常:-(User.retrieve()方法有记录吗?我没有在MSDN中找到它 – user4531 2010-11-24 10:22:08

5

这里是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 
    }); 
}