VSTS - Widget 仅适用于某些人,不适用于其他人。可能是什么问题?

VSTS - Widget only works for some people anod not others. What might be the issue?

原版POST:

我构建了一个适用于公司中某些人的小部件,但不适用于其他人,我想知道是否有人可以帮助我。

对于它所服务的人来说,无论他们使用什么计算机或浏览器,它都能正常工作。而对于那些它不起作用的人,无论他们使用什么计算机或浏览器,它都不起作用。

Widget 非常简单。在将结果绘制到图表上之前,它使用查询 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;
};

然后在main函数里面:

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

当控制台记录查询结果时。对于那些它不起作用的人,查询 returns 一个包含 0 个元素的数组。

更新: 对于小部件不起作用的帐户。在浏览器中打开控制台出现此错误:

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'>>.(....)

这个小部件的问题显然是,每个人都可以在他们的个人资料中设置不同的日期时间格式首选项。例如。 “25/08/2016”与“2016 年 8 月 25 日”。

但是,我的小部件假定格式始终为 'dd/MM/yyyy',这是它传递到查询的 'ASOF' 部分的 dateString 的格式。

对于具有不同日期时间格式设置的用户。结果将为零,因为 VSTS 无法理解“25/08/16”是什么

解决方法是将字符串转换成这种格式:2016-08-20T20:49:34.193Z

现在,无论用户的日期时间格式设置如何,查询都会 return 正确的结果。我用来做转换的代码是:

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;

};