代码之家  ›  专栏  ›  技术社区  ›  user4531

获取SharePoint2010客户端OM/ECMAScript中的当前用户

  •  1
  • user4531  · 技术社区  · 14 年前

    你好,

    我想做一些我认为很简单的事情:
    使用带有ECMAScript的SharePoint2010客户端OM获取当前用户的登录名。
    这是我的代码:

            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 or field'没有初始化?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Dennis G    14 年前

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

    以下方法应该有效:

    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

        2
  •  6
  •   Anatoly Mironov    13 年前

    下面是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
        });
    }