Sharepoint clientContext currentUser в запросе CAML - PullRequest
0 голосов
/ 02 сентября 2018

В настоящее время я использую комбинацию для того, чтобы получить текущего пользователя в SharePoint 2013, чтобы я мог автоматически запрашивать мой набор данных для вошедшего в систему пользователя.

Я сталкиваюсь со странной ошибкой, когда, если я не использую окно оповещения в своей функции retrieveListItems, я получаю SCRIPT438: объект не поддерживает свойство или метод 'get_ $ y_0'. Если я поставлю простое предупреждение («Привет»); в начале этой функции я не получаю сообщение об ошибке, и мои диаграммы правильно отображаются для пользователя.

Ниже приведен мой (неаккуратный) код, но если кто-то может предложить какое-либо понимание относительно того, почему он может это делать, и как я могу убедиться, что ошибка устранена без использования каких-либо окон предупреждений, я был бы очень признателен.

ExecuteOrDelayUntilScriptLoaded(init,"sp.js");

var currentUser;


function init(){
    this.clientContext = new SP.ClientContext.get_current();
    this.oWeb = clientContext.get_web();
    currentUser = this.oWeb.get_currentUser();
    this.clientContext.load(currentUser);
    this.clientContext.executeQueryAsync(Function.createDelegate (this,this.retrieveUser), Function.createDelegate(this,this.onQueryFailed2));
}

function onQueryFailed2(){
    alert('2');
}

function retrieveUser(){
    currentUser = currentUser.get_title();
    //alert(currentUser);
    this.clientContext.load(currentUser);
    this.clientContext.executeQueryAsync(
        Function.createDelegate(this,this.retrieveListItems),
        Function.createDelegate(this,this.onQueryFailed2)
    )
}

    //retrieve list data from above sharepoint site based on List Name

function retrieveListItems() {

    clientContext.load(currentUser, 'Title');
    //alert('Rendering...');
    //var clientContext = new SP.ClientContext(siteUrl);  

    var oList = clientContext.get_web().get_lists().getByTitle('APS Portfolio');
    var camlQuery = new SP.CamlQuery(); 
    //currentUser = 'Fox, Natalie G';
    //clientContext.load(currentUser);                  
    camlQuery.set_viewXml("<View><Query><Where><Eq><FieldRef Name='AIT_x0020_App_x0020_Manager'/><Value Type='Text'>" +currentUser+ "</Value></Eq></Where></Query></View>");   
    this.collListItem = oList.getItems(camlQuery);
    clientContext.load(collListItem);
    clientContext.executeQueryAsync(
        Function.createDelegate(this, this.onQuerySucceeded), 
        Function.createDelegate(this, this.onQueryFailed)
    );
}

Я новичок в использовании функции clientContext, но мне очень интересно узнать о ней больше и что я могу сделать, чтобы устранить эту ошибку.

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

Не совсем уверен, почему первая строка функции retrieveListItems ():

clientContext.load(currentUser, 'Title');

В любом случае, эта библиотека значительно упрощает ваш код, поэтому я бы порекомендовал это: https://aymkdn.github.io/SharepointPlus/

Код будет выглядеть примерно так:

$SP().list("My List").get({
  fields:"Title",//whatever fields you want
  where:"Author = '[Me]'"//[Me] is the current user that is logged in
}).then(function(row) {
  console.log(row[0].getAttribute("Title"));
});

Что касается объяснения проблемы, я подозреваю, что это связано с асинхронностью, то есть переменная используется до того, как ей была присвоена соответствующая величина предыдущей функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...