Извлечение обсуждения раллийного дефекта с использованием Java Rally Rest API - PullRequest
7 голосов
/ 30 мая 2019

Я пытаюсь создать простой сценарий Java, который будет подключаться к Rally, извлекать все дефекты и возвращать сведения о дефектах, включая обсуждение, в виде объекта Java. Проблема здесь в том, что обсуждение возвращается как то, что я считаю коллекцией, потому что дается только URL. Я застрял в том, как вернуть обсуждение дефекта в качестве объекта в 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"}

Как видите, обсуждение возвращается в виде URL, а не извлекает фактическое обсуждение. Поскольку этот запрос будет использоваться во время выполнения, я бы предпочел весь объект.

1 Ответ

3 голосов
/ 04 июня 2019

К сожалению, невозможно получить все эти данные за один запрос - вам придется загружать коллекцию обсуждений для каждого прочитанного дефекта. Также обратите внимание, что максимальный размер страницы составляет 2000.

Это не совсем то, что вы пытаетесь сделать, но в этом примере показано, как загружать дочерние истории так же, как вы бы загружали обсуждения ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...