2016-08-22 15 views
0

ОРИГИНАЛЬНАЯ ПОЧТА:VSTS - Виджет работает только для некоторых людей, а не для других. Что может быть проблемой?

Я построил виджет, который работает для некоторых людей в компании, но не других людей, и мне было интересно, может ли кто-нибудь помочь мне.

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

Виджет очень прост. Он создает запрос с использованием API запросов, прежде чем выводить результат на график.

Основная проблема заключается в том, что запрос возвращает нулевой результат для некоторых людей по неизвестной причине.

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

Любые предложения были бы очень признательны.

Код:

Во-первых, у меня есть метод, который строит запрос в зависимости от типа запроса я хочу.

var queryString = buildWiql(queryType, dateString, iterationPath); 

Реализация buildWiql() является:

var buildWiql = function (queryType, dateString, iterationPath) { 

    var queryString; 

    if (queryType=== "someType") { 
     queryString = { 
      "query": "Select [Microsoft.VSTS.Scheduling.RemainingWork] From WorkItems Where [System.WorkItemType] = 'Task' AND [System.State] <> 'Done' AND [System.State] <> 'Closed' AND [System.IterationPath] = '" + iterationPath + "' order by [System.CreatedDate] desc ASOF " + dateString 
     }; 
    } 
    else if (queryType === "someOtherType") { 
     .... 
    } 
    else { 
     ....        
    } 

    return queryString; 
}; 

Тогда внутри основной функции:

return TFS_Wit_WebApi.getClient().queryByWiql(queryString) 
    .then(function (query) { 
     console.log(query); 
     .... 
    } 

Когда консоль записывает результат запроса. Для тех, с кем он не работает, запрос возвращает массив с 0 элементами.

UPDATE: Для учетных записей, для которых виджет не работает. Открытие консоли в браузере дает эту ошибку:

Failed to load resource: the server responded with a status of 400 (Bad Request) 
*******ERROR*******: 
Error: Expecting date-time. The error is caused by <<'20/8/2016'>>.(....) 
+0

Являются ли результаты одинаковыми для всех итераций?Каков результат, если эти пользователи запрашивают рабочие элементы в итерации через запрос? –

+0

Каков результат, если эти пользователи напрямую получают данные через REST API? –

+0

Добавить функция ошибки обработчика (второй параметр затем функции) .then (функция (запрос) { // Сделайте что-нибудь с запросом возвращение WidgetHelpers.WidgetStatusHelper.Success(); }, функция (ошибка) { возвратных WidgetHelpers .WidgetStatusHelper.Failure (error.message); }); –

ответ

0

Проблема с виджетом было то, что, по-видимому, каждый может иметь различные даты и времени, предпочитаемый формат, установленный в их профиле. например. '25/08/2016 'против '25 августа 2016'.

Однако мой виджет предположил, что формат всегда был «dd/MM/yyyy», который является форматом dateString, который он передает в часть запроса ASOF.

Для пользователей, у которых установлен другой формат даты и времени. Результат будет равен нулю, так как VSTS не понял бы, что '25/08/16' является

решение преобразовать строку в следующем формате: 2016-08-20T20: 49: 34.193Z

И теперь, независимо от установки формата даты и времени пользователя, запрос вернет правильные результаты. Код, который я использовал для преобразования:

var dateToString = function (dateIn) { 

    var date = new Date(dateIn.getTime() + 86400000); 
    var day = date.getDate(); 
    var month = date.getMonth() + 1; 
    var year = date.getFullYear(); 

    //Format date as '2016-08-20T20:49:34.193Z'" 
    var dateString = year + '-' + month + '-' + day + 'T00:00:00.000Z'; 

    return dateString; 

};