【问题标题】:Rally Rest Api: QueryFilter: Get defects by timestampRally Rest Api:QueryFilter:按时间戳获取缺陷
【发布时间】:2012-08-24 20:19:31
【问题描述】:

有没有办法使用 QueryFilter 来获取自时间戳以来更新的缺陷?像这样的:

String timeStamp = "2012-08-24T19:10:09.154Z";
QueryRequest defectRequest = new QueryRequest("defect");
defectRequest.setFetch(new Fetch("LastUpdateDate"));
defectRequest.setQueryFilter(new QueryFilter("LastUpdateDate", ">", timeStamp);
QueryResponse projectDefects = rallyApi.query(defectRequest);

【问题讨论】:

  • 您的代码示例看起来很到位。您没有看到预期的结果吗?
  • 哇,你说得对,正如我提出的问题一样。我的更复杂的查询一定有问题。谢谢!

标签: java rally


【解决方案1】:

Rally Web Services API 介绍页面对编写复杂查询时遇到的问题进行了一些解释(请查看 查询语法对象集合属性和查询 部分) . Java 版本确实可以轻松处理链式表达式,但有点难以阅读。这是一个查询自 8 月 1 日以来具有高严重性或优先级的未解决缺陷:

String timeStamp = "2012-08-01T19:10:09.154Z";

Map<String, QueryFilter> filters = new HashMap<String, QueryFilter>();

filters.put("LastUpdateDate", new QueryFilter("LastUpdateDate", ">", timeStamp));
filters.put("State", new QueryFilter("State", "=", "Open"));
filters.put("Severity", new QueryFilter("Severity", "<=", "Major Problem"));
filters.put("Priority", new QueryFilter("Priority", "<=", "High Attention"));

// Evaluates to ((Severity <= Major Problem) OR (Priority <= High Attention)) AND ((LastUpdateDate > timeStamp) AND (State = Open))
QueryFilter complexFilter = filters.get("Severity").or(filters.get("Priority")).and(filters.get("LastUpdateDate").and(filters.get("State")));

一个大问题是查询集合的属性(如用户故事中的任务)。将查询链接在一起会得到错误的结果。例如,如果您要查找的用户故事的任务既在进行中又被阻止,则查询会将表达式计算为 OR 语句。发生这种情况是因为查询将其转换为“在集合中查找任何具有阻止状态的任务,然后查找任何正在进行的任务”。查询不会缩小第一个表达式之后的列表范围;每个表达式查询集合中的所有任务。

解决此问题的一种方法是执行其中一个查询(假设我们正在处理所有任务)。然后,我们过滤该列表以获取所有被阻止的任务。获得过滤后的列表后,您可以找出每个任务属于哪个用户故事。

参考资料:

上面链接的 Rally Web 服务 API。

http://developer.rallydev.com/help/java-toolkit-rally-rest-api(我使用页面末尾的最后一个示例作为创建上述查询过滤器的基础)。

【讨论】:

  • 如何过滤未提及严重性/优先级的缺陷?
猜你喜欢
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多