2012-08-24 50 views
2

有没有一种方法可以使用QueryFilter来获取自时间戳以来更新的缺陷?事情是这样的:Rally Rest Api: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

您的代码示例看起来很棒。你没有看到你期望的结果吗? – 2012-08-24 20:48:43

+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(我使用了页面末尾的最后一个例子作为创建上面查询过滤器的基础)。