Получение текущего пользователя в клиентском ОМ / ECMAScript SharePoint2010 - PullRequest
1 голос
/ 24 ноября 2010

Привет,

Я хотел бы сделать что-то, что, на мой взгляд, было бы довольно просто:
получить логин текущего пользователя с помощью клиентского ОМ SharePoint2010 с 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», так почему же «свойство или поле» не инициализировано?

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

Вот более полный пример с 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
    });
}
5 голосов
/ 24 ноября 2010

Сначала вам нужно получить пользователя и загрузить сеть, а не пользователя.

Должно работать следующее:

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 - Как узнать, вошли ли пользовательские данные

...