我正在尝试使用 JavaScript 中的 REST API 为表格和图表视图生成自定义(和高度精细的)周期/提前期数据。
我的故事和缺陷上有一个自定义(非必需)字段,c_KanbanStatus 具有以下可能的值 [null、“Kickoff”、“PO”、“Creative”、“Team Backlog”、“Coding”、“Acceptance Testing” ,“接受”]。
我最近才添加了这个自定义字段,所以我的很多故事都没有那个字段(或者不是“天生”的)。
我的想法如下:
- 对每个看板状态转换进行回溯查询
- 按 ObjectID 聚合
- 对于每个 ObjectID,对于每个状态,计算对象进入该状态与对象进入后续状态之间的时间增量。
这是我的代码的摘录:
var kanbanStates =
[
"Kickoff",
"PO",
"Creative",
"Team Backlog",
"Coding",
"Acceptance Testing"
];
var username = "**************";
var password = "**************";
var deferreds = [];
for(var i = 0; i < kanbanStates.length; i++)
{
var find =
{
_ProjectHierarchy: ***************,
"_PreviousValues.c_KanbanStatus": { $lt: kanbanStates[i] },
c_KanbanStatus: kanbanStates[i]
};
var config =
{
url:"https://rally1.rallydev.com/analytics/v2.0/service/rally/workspace/********/artifact/snapshot/query.js?find=" + JSON.stringify(find) + "&fields=true&pagesize=999999",
dataType: "jsonp",
jsonp: "jsonp",
contentType: "application/json",
beforeSend: function(xhr)
{
xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
}
};
deferreds.push($.ajax(config));
}
var aggregateResultsByObjectID = function(results)
{
var resultsByItemID = {};
for(var i = 0; i < results.length; i++)
{
if(!results[i][0].Results.c_KanbanStatus === kanbanStates[i])
throw "States don't match!";
for(var j = 0; j < results[i][0].Results.length; j++)
{
var itemID = results[i][0].Results[j].ObjectID;
if(!resultsByItemID.hasOwnProperty(itemID))
{
resultsByItemID[itemID] =
{
creationDate: results[i][0].Results[j].CreationDate,
name: results[i][0].Results[j].Name,
states: [],
results: []
};
}
resultsByItemID[itemID].results.push(results[i][0].Results[j]);
resultsByItemID[itemID].states.push(results[i][0].Results[j].c_KanbanStatus);
}
}
return resultsByItemID;
};
$.when.apply($, deferreds).done(function()
{
var resultsByItemID = aggregateResultsByObjectID(arguments);
console.log(resultsByItemID);
});
这个查询的问题是我为每个状态的每个 ObjectID 返回多个结果,即使我指定我只想要那些具有不同 c_KanbanStatus 字段的快照。当我检查结果时,对于相同的 ObjectID 和相同的组合(如果 c_KanbanStatus 和 _PreviousValues.c_KanbanStatus),我得到了很多快照,每个快照都有一些其他字段编辑。
例如,对于相同的 ObjectID,我得到以下两个结果:
_PreviousValues:
{
_User: 10301773174
c_KanbanStatus: null
},
c_KanbanStatus: "Coding"
和
_PreviousValues:
{
ScheduleState: 10148772688
_User: 10148977759
},
c_KanbanStatus: "Coding"
我期待第一个结果(从没有设置 c_KanbanStatus 字段到“编码”的快照)。第二个结果似乎暗示它从根本没有 c_KanbanStatus 字段变为“编码”,但为什么呢?
我有一种感觉,我在 Lookback API 中遗漏了一些东西。请帮我理解!