RallyRestAPI使用ChangeSet创建构建

时间:2013-05-02 19:11:20

标签: rally

我正在创建Rally Build Records作为TeamCity to Rally集成的一部分,但却存在将Build与ChangeSet相关联的问题。

我找到一组与特定条件匹配的相关ChangeSet,并将它们放在String数组中。然后我创建一个JsonArray对象,将这些“_ref”字符串作为JsonPrimatives添加到Array中,将该数组添加到我的create Json对象并将其添加到Rally。

然而,发生的是构建已创建,但结果有一个空的Changeset数组。

我已尝试在createRequest中包含更改集并执行updateRequest但在两种情况下响应都是SUCCESS,没有报告错误或警告,并且Changeset数组返回为null并且重新查询将所有其他数据显示为预期但changeSet数组为空。

这是代码。

JsonObject obj = new JsonObject();
obj.addProperty("Workspace", def.getWorkspace().getRef());
obj.addProperty("Duration",1.05);
obj.addProperty("Message", "Master 4683 Success");
obj.addProperty("Start", isoFormat.format(new Date()));
obj.addProperty("Status","SUCCESS");
obj.addProperty("Number","4683");
obj.addProperty("Uri", "http://");
obj.addProperty("BuildDefinition",def.getRef());

// changeSets is a ArrayList<String> of "_ref" strings of VALID changesets references. 
if (changeSets != null && changeSets.size() > 0) {
    JsonArray changeSetList = new JsonArray();
    for (String id : changeSets) {
        changeSetList.add(new JsonPrimitive(id));
    }
    obj.add("Changesets", changeSetList);
}

String ref = connector.Create("Build",obj);
connector.Delete(ref, null);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我的想法是,不是用JsonPrimitive只填充ref的值来填充你的JsonArray,而是实际上需要一个JsonObject,其键/值对为{“_ ref”,“/ changeset/12345678910.js”}。 I.E.进行类似以下的更改:

// changeSets is a ArrayList<String> of "_ref" strings of VALID changesets references. 
if (changeSets != null && changeSets.size() > 0) {
    JsonArray changeSetList = new JsonArray();
    for (String id : changeSets) {
        JsonObject thisChangeset = new JsonObject();
        thisChangeset.addProperty("_ref", id);
        changeSetList.add(thisChangeset);
    }
    obj.add("Changesets", changeSetList);
}

我相信您的代码应该按预期工作。