如何使用Rally的Web Services API跟踪迭代进度

时间:2014-01-03 23:43:39

标签: node.js rally

我正在编写一个自定义应用来按日跟踪迭代进度。在Rally中是否有内置的方法来获取特定日期处于“已接受”状态的用户故事的数量,以及点数(或者我必须获取所有用户故事并解析其修订历史记录)? / p>

1 个答案:

答案 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);

它返回:

enter image description here