Rally Rest API 通过缺陷 FormattedID 获取对话 post

Rally Rest API fetch conversation post by defect FormattedID

我正在尝试针对给定的缺陷进行讨论。我从之前的问题中了解到,我问的是不可能将讨论数据作为缺陷本身的 属性 提取,而我必须 运行 一个单独的提取请求。

问题是在提取对话 posts 时我无法识别要使用的任何查询过滤器。这让我相信我必须遍历每个对话 post 并尝试在实际数据 returned 中找到匹配的缺陷编号,这将是非常低效的。

我宁愿简单地 运行 对每个缺陷进行查询提取,该缺陷使用查询过滤器来格式化 ID,该 ID 只会 return 申请的对话 post那个缺陷。

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 post,但这就是我需要做的。

具体我指的代码在这里:

  QueryRequest defectRequest = new QueryRequest("ConversationPost");
                defectRequest.setPageSize(2000);
                defectRequest.setLimit(5000);
                QueryFilter filter = new QueryFilter("FormattedID","=","DE10101");
                defectRequest.setQueryFilter(filter);

使用标准的WSAPI,我可以这样查询:

(Artifact.FormattedID = "US123")

能够自己解决这个问题。问题是我试图使用 "QueryRequest" 而没有有效的 "type" 传递给构造函数。

正确的解决方案是使用 "GetRequest" 并将缺陷讨论页面的路径作为 url 传递(不需要我在构造函数中设置对象类型)。这返回了一个 GetRequest 对象,其中包含一个包含所有对话帖子的结果集。

 GetRequest getRequest = new GetRequest(discussionURL);
            GetResponse getResponse = restApi.get(getRequest);

"discussion url" 不包含在创建 rallyApi 时声明的“https://rally1.rallydev.com” - discussionURL 变量包含整个缺陷讨论页面 URL 但是没有上述反弹 api url 例如“/slm/webservice/v2.0/Defect/106032660792/Discussion