我正在编写一个自定义应用来按日跟踪迭代进度。在Rally中是否有内置的方法来获取特定日期处于“已接受”状态的用户故事的数量,以及点数(或者我必须获取所有用户故事并解析其修订历史记录)? / p>
答案 0 :(得分:1)
WS API中有IterationCumulativeFlowData对象,当数据收集在工作区设置屏幕中指定的工作日运行时,该对象在工作区时区的午夜填充。
为迭代的每一天和相应的状态存储数据。对于处于已定义状态的所有内容,迭代的第1天都有CumulativeFlowData对象,对于处于正在进行状态的所有内容,Release 1的第1天等。
CumulativeFlowData对象还存储CardEstimateTotal,它是每个州中卡片估计值的总和。
以下是使用rally-node编写的应用程序示例,该应用程序返回截至迭代最后一天的特定状态(已接受)的迭代数据。
在本次考试中,最后一个结果的CreationDate是'2013-08-27T06:00:00.000Z,而有问题的迭代的EndDate是2013-08-27 11:59:59 PM America / Denver(其中是2013-08-28T05:59:59.000Z),所以我不得不操纵一个日期,以使这个查询条件返回迭代的最后一天的数据:
query = query.and('CreationDate', '>', endDateMinusOneDay);
以下是示例的完整js文件:
var rally = require('rally'),
queryUtils = rally.util.query,
restApi = rally({
user: 'user@co.com',
pass: 'secret',
apiVersion: 'v2.0',
server: 'https://rally1.rallydev.com',
requestOptions: {
headers: {
'X-RallyIntegrationName': 'My cool node.js program',
'X-RallyIntegrationVendor': 'My company',
'X-RallyIntegrationVersion': '1.0'
},
}
});
function findIteration() {
return restApi.query({
type: 'Iteration',
start: 1,
pageSize: 2,
limit: 10,
fetch: ['ObjectID', 'EndDate'],
scope: {
project: '/project/12352608219',
up: false,
down: false
},
query: queryUtils.where('Name', '=', 'i777')
});
}
function queryIterationData(result) {
var endDate = result.Results[0].EndDate,
oid = result.Results[0].ObjectID;
console.log('endDate',endDate);
var date1 = new Date(endDate);
var ms = date1.getTime() - 86400000; //86400000 is the number of milliseconds in a day
var date2 = new Date(ms);
var endDateMinusOneDay = date2.toISOString();
console.log('date2 ISO', date2.toISOString());
var query = queryUtils.where('IterationObjectID', '=',oid );
query = query.and('CardState', '=', 'Accepted');
query = query.and('CreationDate', '>', endDateMinusOneDay);
return restApi.query({
type: 'IterationCumulativeFlowData',
fetch: ['CardCount', 'CardEstimateTotal', 'CardState', 'CardState', 'CreationDate'],
query: query,
});
}
function onSuccess(result) {
console.log('Success!', result);
}
function onError(errors) {
console.log('Failure!', errors);
}
findIteration()
.then(queryIterationData)
.then(onSuccess)
.fail(onError);
它返回: