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

时间:2019-07-03 16:07:25

标签: java rest rally

我正在尝试就特定缺陷展开讨论。我从先前的问题中了解到,我问过不可能将讨论数据作为缺陷本身的属性来提取,而是必须运行单独的提取请求。

问题在于,我无法识别出提取对话帖子时要使用的任何查询过滤器。这使我相信,我将不得不遍历每一个对话帖子,并尝试在返回的实际数据中查找匹配的缺陷编号,这将是非常低效的。

我宁愿只对每个缺陷运行查询获取,该缺陷使用查询过滤器作为格式化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);

2 个答案:

答案 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