使用 Java Rally Rest API 提取 Rally 缺陷讨论

Extracting Rally Defect Discussion using the Java Rally Rest API

我正在尝试创建一个简单的 Java 脚本,它将连接到 Rally,获取所有缺陷和 return 缺陷详细信息,包括作为 Java 对象的讨论。这里的问题是讨论是 return 编辑的,我认为是一个集合,因为只给出了 URL。我坚持如何 return 将缺陷的讨论作为 JSON 中的一个对象,而不仅仅是另一个必须单独 运行 的查询(我想是数千次,因为我们有成千上万的缺陷)。

这是我的代码:

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.GetRequest;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.request.UpdateRequest;
import com.rallydev.rest.response.QueryResponse;
import com.rallydev.rest.util.Fetch;
import com.rallydev.rest.util.QueryFilter;
import com.rallydev.rest.util.Ref;
import org.json.simple.JSONArray;

public class ExtractData{

    public static void main(String[] args) throws URISyntaxException, IOException, NumberFormatException

    {

        RallyRestApi restApi = new RallyRestApi(new URI("https://rally1.rallydev.com"), "apiKeyHere");
        restApi.setProxy(URI.create("http://usernameHere:passwordHere0@proxyHere:8080"));
        restApi.setApplicationName("QueryExample");

        //Will store all of the parsed defect data
        JSONArray defectData = new JSONArray();

        try{

            QueryRequest defects = new QueryRequest("defect");

            defects.setFetch(new Fetch("FormattedID","Discussion","Resolution"));
            defects.setQueryFilter(new QueryFilter("Resolution","=","Configuration Change"));
            defects.setPageSize(5000);
            defects.setLimit(5000);

            QueryResponse queryResponse = restApi.query(defects);

            if(queryResponse.wasSuccessful()){

                System.out.println(String.format("\nTotal results: %d",queryResponse.getTotalResultCount()));

                for(JsonElement result: queryResponse.getResults()){
                    JsonObject defect = result.getAsJsonObject();
                    System.out.println(defect);




                }
            }else{
                System.err.print("The following errors occured: ");
                for(String err: queryResponse.getErrors()){
                    System.err.println("\t+err");
                }
            }

        }finally{

            restApi.close();



        }



    }
}

这是我尝试此操作时得到的示例:

{"_rallyAPIMajor":"2","_rallyAPIMinor":"0","_ref":"https://rally1.rallydev.com/slm/webservice/v2.0/defect/30023232168","_refObjectUUID":"cea42323c2f-d276-4078-92cc-6fc32323ae","_objectVersion":"6","_refObjectName":"Example defect name","Discussion":{"_rallyAPIMajor":"2","_rallyAPIMinor":"0","_ref":"https://rally1.rallydev.com/slm/webservice/v2.0/Defect/32323912168/Discussion","_type":"ConversationPost","Count":0},"FormattedID":"DE332322","Resolution":"Configuration Change","Summary":{"Discussion":{"Count":0}},"_type":"Defect"}

如您所见,讨论被 return 编辑为 URL 而不是获取实际讨论。由于此查询将在 运行 时间使用,因此我更喜欢整个对象。

遗憾的是,无法在一个请求中获取所有这些数据 - 您必须为您阅读的每个缺陷加载讨论集合。另请注意,最大页面大小为 2000。

这与您尝试执行的操作并不完全相同,但此示例显示加载子故事与加载讨论非常相似...

https://github.com/RallyCommunity/rally-java-rest-apps/blob/master/GetChildStories.java#L37