我正在尝试就特定缺陷展开讨论。我从先前的问题中了解到,我问过不可能将讨论数据作为缺陷本身的属性来提取,而是必须运行单独的提取请求。
问题在于,我无法识别出提取对话帖子时要使用的任何查询过滤器。这使我相信,我将不得不遍历每一个对话帖子,并尝试在返回的实际数据中查找匹配的缺陷编号,这将是非常低效的。
我宁愿只对每个缺陷运行查询获取,该缺陷使用查询过滤器作为格式化ID,该ID仅返回适用于该缺陷的对话帖子。
import com.google.gson.JsonElement;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.response.QueryResponse;
import com.rallydev.rest.util.Fetch;
import com.rallydev.rest.util.QueryFilter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class ExtractFull {
@SuppressWarnings("unchecked")
public static void main(String args[]) throws URISyntaxException, IOException {
RallyRestApi restApi = new RallyRestApi(new URI("https://rally1.rallydev.com"), "_myapikey");
restApi.setApplicationName("DANA Example");
restApi.setProxy(new URI("http://myproxy:8080"), "username", "pass");
System.out.println("Querying Rally for defects, this may take some time");
try {
QueryRequest defectRequest = new QueryRequest("ConversationPost");
defectRequest.setPageSize(2000);
defectRequest.setLimit(5000);
QueryFilter filter = new QueryFilter("FormattedID","=","DE10101");
defectRequest.setQueryFilter(filter);
defectRequest.setFetch(new Fetch());
QueryResponse queryResponse = restApi.query(defectRequest);
for(JsonElement result: queryResponse.getResults()){
System.out.println(result);
}
} finally {
restApi.close();
}
}
}
此代码无效。我认为是因为“ FormattedId”不是“ ConversationPost”类型的有效对象。我不知道在查询对话帖子时是否可以过滤父缺陷ID,但这是我需要做的。
具体来说,我所指的代码在这里:
QueryRequest defectRequest = new QueryRequest("ConversationPost");
defectRequest.setPageSize(2000);
defectRequest.setLimit(5000);
QueryFilter filter = new QueryFilter("FormattedID","=","DE10101");
defectRequest.setQueryFilter(filter);
答案 0 :(得分:0)
使用标准的WSAPI,我可以这样查询:
(Artifact.FormattedID =“ US123”)
答案 1 :(得分:0)
能够自行解决此问题。问题是我试图在没有有效的“类型”传递给构造函数的情况下使用“ QueryRequest”。
正确的解决方案是使用“ GetRequest”,并将缺陷讨论页面的路径作为url传递(不需要我在构造函数中设置对象类型)。这返回了一个GetRequest对象,其中包含一个包含所有对话帖子的结果集。
GetRequest getRequest = new GetRequest(discussionURL);
GetResponse getResponse = restApi.get(getRequest);
“讨论URL”不包含在创建rallyApi时声明的“ https://rally1.rallydev.com”-DiscussionURL变量包含整个缺陷讨论页面URL,但没有上述rally api URL,因此例如“ /slm/webservice/v2.0/Defect/106032660792/Discussion “