在Java中使用Rally Rest API修改集合属性

在Java中使用Rally Rest API修改集合属性,java,api,rest,collections,rally,Java,Api,Rest,Collections,Rally,我试图修改TestCase的TestSets属性 JsonArray newTestSets = new JsonArray(); 。。。在清除属性的最简单情况下,根据需要添加值 JsonObject updates = new JsonObject(); updates.add("TestSets", newTestSets); 我创建updateRequest就像创建所有其他更新一样 UpdateRequest updateRequest = new UpdateRequest(ref,

我试图修改TestCase的TestSets属性

JsonArray newTestSets = new JsonArray();
。。。在清除属性的最简单情况下,根据需要添加值

JsonObject updates = new JsonObject();
updates.add("TestSets", newTestSets);
我创建updateRequest就像创建所有其他更新一样

UpdateRequest updateRequest = new UpdateRequest(ref, updates)
我没有收到任何错误,但没有任何改变。TestCase仍然在几个测试集中


我缺少什么?

我验证了它可以在测试用例上更新测试集集合。看


我反转了更新,以使用TestSet对象的TestCases属性,它可以正常工作。那么,也许TestSets属性真的是只读的?很高兴您得到了它。测试集应该是可写的,所以我很好奇为什么这对您不起作用,但至少它起到了相反的作用……我成功地向测试集添加了一个测试,但没有删除测试,例如,将值设置为所有测试集中的空数组。我还尝试了上面的代码,它将测试添加到给定的测试集中,而不将其从之前的任何测试集中删除。我假设在您的测试中,测试用例还没有出现在任何测试集中。请尝试在TestSetA中进行测试,然后将TestSets属性设置为TestSetB。谢谢
public class UpdateTestSetsOnTestCase {

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


        String host = "https://rally1.rallydev.com";
        String apiKey = "_abc123";
        String workspaceRef = "/workspace/12352608129";
        String applicationName = "RestExample_updateTestSetsOnTC";


        RallyRestApi restApi = new RallyRestApi(new URI(host),apiKey);
        restApi.setApplicationName(applicationName);

        try {
            String setID = "TS24";
            String testid = "TC3";
            QueryRequest  tsRequest = new QueryRequest("TestSet");
            tsRequest.setWorkspace(workspaceRef);
            tsRequest.setQueryFilter(new QueryFilter("FormattedID", "=", setID));
            QueryResponse tsQueryResponse = restApi.query(tsRequest);
            if(tsQueryResponse.getTotalResultCount() == 0){
                System.out.println("Cannot find tag: " + setID);
                return;
            }
            JsonObject tsJsonObject = tsQueryResponse.getResults().get(0).getAsJsonObject();
            String tsRef = tsJsonObject.get("_ref").getAsString();
            System.out.println(tsRef);

            QueryRequest testCaseRequest = new QueryRequest("TestCase");
            testCaseRequest.setWorkspace(workspaceRef);
            testCaseRequest.setFetch(new Fetch("FormattedID", "Name", "TestSets"));
            testCaseRequest.setQueryFilter(new QueryFilter("FormattedID", "=",  testid));
            QueryResponse testCaseQueryResponse = restApi.query(testCaseRequest);;

            if (testCaseQueryResponse.getTotalResultCount() == 0) {
                System.out.println("Cannot find test case : " + testid);
                return;
            }
            JsonObject testCaseJsonObject = testCaseQueryResponse.getResults().get(0).getAsJsonObject();
            String testCaseRef = testCaseJsonObject.get("_ref").getAsString();
            System.out.println(testCaseRef);

            int numberOfTestSets = testCaseJsonObject.getAsJsonObject("TestSets").get("Count").getAsInt();
            System.out.println(numberOfTestSets + " testset(s) on " + testid);
            QueryRequest testsetCollectionRequest = new QueryRequest(testCaseJsonObject.getAsJsonObject("TestSets"));
            testsetCollectionRequest.setFetch(new Fetch("FormattedID"));
            JsonArray testsets = restApi.query(testsetCollectionRequest).getResults();

            for (int j=0;j<numberOfTestSets;j++){
                System.out.println("FormattedID: " + testsets.get(j).getAsJsonObject().get("FormattedID"));
            }
            testsets.add(tsJsonObject);
            JsonObject testCaseUpdate = new JsonObject();
            testCaseUpdate.add("TestSets", testsets);
            UpdateRequest updateTestCaseRequest = new UpdateRequest(testCaseRef,testCaseUpdate);
            UpdateResponse updateTestCaseResponse = restApi.update(updateTestCaseRequest);
            if (updateTestCaseResponse.wasSuccessful()) {
                QueryRequest testsetCollectionRequest2 = new QueryRequest(testCaseJsonObject.getAsJsonObject("TestSets"));
                testsetCollectionRequest2.setFetch(new Fetch("FormattedID"));
                JsonArray testsetsAfterUpdate = restApi.query(testsetCollectionRequest2).getResults();
                int numberOfTestSetsAfterUpdate = restApi.query(testsetCollectionRequest2).getResults().size();
                System.out.println("Successfully updated : " + testid + " TestSets after update: " + numberOfTestSetsAfterUpdate);
                for (int j=0;j<numberOfTestSetsAfterUpdate;j++){
                    System.out.println("FormattedID: " + testsetsAfterUpdate.get(j).getAsJsonObject().get("FormattedID"));
                }
            }
        } finally {
            restApi.close();
        }

    }
}