0

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

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

但是,发生的情况是创建了构建,但结果有一个空的 Changeset 数组。

我尝试在 createRequest 中包含变更集并执行 updateRequest,但在这两种情况下,响应都是成功的,没有报告错误或警告,并且 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);

有任何想法吗?

4

1 回答 1

1

我的想法是,与其用 JsonPrimitive 仅具有 ref 的值来填充您的 JsonArray,您实际上需要一个具有键/值对 {"_ref"、"/changeset/12345678910.js"} 的 JsonObject。IE 进行类似于以下的更改:

// 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);
}

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

于 2013-05-03T17:29:33.090 回答