有没有办法使用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);
答案 0 :(得分:4)
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 Services API。
http://developer.rallydev.com/help/java-toolkit-rally-rest-api(我使用了页面末尾的最后一个示例作为上面创建查询过滤器的基础。)