通过使用Rally API迭代获取用户故事

我无法弄清楚如何获取拉力赛中一个用户故事的所有字段。 现在,我需要获取最后5次迭代,并为每次迭代计算完成点。

我设法通过指定type: iteration获取迭代,但不知道如何获取这些迭代的用户素材,以及如何仅指定完成。 我应该去TaskStatus与用户故事相关的任务吗?

我想这个用户故事有迭代的参考,但我不知道它是怎么样的。 我没有find这个手册非常简洁,有没有其他文件,我应该使用?

编辑:

我看到在HierarchicalRequirement中,我有以下字段的迭代对象:

 _rallyAPIMajor: 2 _rallyAPIMinor: 0 _ref: https://rally1.rallydev.com/slm/webservice/v2.0/iteration/18831411089 _refObjectUUID: 8053fbd0-867c-4126-805c-18ccbc958a93 _refObjectName: Iteration 1 _type: Iteration 

问题:我应该如何使用这个? 我想获取5个迭代(由EndDatesorting),然后为每个迭代获取所有任务。 但我不知道如何指定查询(该任务属于迭代)。 这个问题可能听起来很愚蠢,但我仍然在黑暗中与拉力赛进行射击。 关于完成要求,我应该只提取完成TaskStatus的人吗?

Web Services API文档中提供了Rally对象模型。

HierarchicalRequirement(用户故事)对象上有Iteration属性,它是对Iteration对象的引用,因此可以通过迭代来查询故事。

您引用的手册特定于LookbackAPI ,需要熟悉WS API文档中的对象模型。

这是一个LookbackAPI端点,用于查询为三个迭代中的一个计划的用户故事,其中222,333,444个是迭代的ObjectID:

 "Iteration" : {$in: [222,333,444]} 

并提取'FormattedID','ScheduleState','PlanEstimate'用户故事字段。

 https://rally1.rallydev.com/analytics/v2.0/service/rally/workspace/111/artifact/snapshot/query.js?find={"Iteration" : {$in: [222,333,444]},"_TypeHierarchy":"HierarchicalRequirement","__At" : "current"}&fields=['FormattedID','ScheduleState','PlanEstimate'],hydrate=['ScheduleState'] 

这里是一个类似的WS API端点:

 https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement?workspace=https://rally1.rallydev.com/slm/webservice/v2.0/workspace/1119&query=(((Iteration.ObjectID = 222) OR (Iteration.ObjectID = 333)) OR (Iteration.ObjectID = 444))&fetch=FormattedID,ScheduleState,PlanEstimate&pagesize=200 

两个查询返回相同的结果。

即使您想要获取当前的对象状态,也可以使用回顾API查询而不是WS API查询,如上例中使用"__At" : "current" ,但回看API旨在提供历史数据。 WS API只返回对象的当前状态,而Lookback API可以及时返回这些对象的快照。

rally-node没有对回看API的内置支持。

这里是一个拉力赛节点的例子,通过3次迭代来查询故事:

 var rally = require('rally'), queryUtils = rally.util.query; mySettings = { apiKey: '_XYZ...', server: 'https://rally1.rallydev.com', //this is the default requestOptions: { headers: { 'X-RallyIntegrationName': 'stories by iteration node.js program', 'X-RallyIntegrationVendor': 'My company' 'X-RallyIntegrationVersion': '1.0' }, } }, restApi = rally(mySettings); var q = queryUtils.where('Iteration.ObjectID', '=', 222).or('Iteration.ObjectID', '=', 333).or('Iteration.ObjectID', '=', 444); restApi.query({ type: 'hierarchicalrequirement' fetch: ['FormattedID', 'Name', 'ScheduleState', 'PlanEstimate', 'Iteration'], query: q, scope: { workspace: '/workspace/111', }, }, function(error, result) { if(error) { console.log(error); } else { console.log(result.Results); } });