restapi:queryfilter:get-defects-by-timestamp

tktrz96b  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(277)

有没有一种方法可以使用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);
fv2wmkja

fv2wmkja1#

rallywebservicesapi简介页面提供了一些关于编写复杂查询的gotchas的解释(请查看查询语法和对象集合属性以及查询部分)。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语句的形式计算表达式。这是因为查询将其转换为“查找集合中具有阻止状态的任何任务,然后查找任何正在进行的任务”;每个表达式都查询集合中的所有任务。
解决这个问题的一种方法是执行其中一个查询(假设我们正在执行所有任务)。然后,我们过滤该列表以获得所有被阻止的任务。在得到过滤后的列表后,您可以找出每个任务属于哪个用户情景。
参考文献:
上面链接的rallywebservicesapi。
http://developer.rallydev.com/help/java-toolkit-rally-rest-api (我使用页面末尾的最后一个示例作为创建上述查询过滤器的基础)。

相关问题