为什么我在查询迭代或发布时获得所有历史修订?

时间:2013-11-22 15:09:26

标签: rally

我正在使用Rally REST API for Java 我想获得实际迭代和发布的列表 这是片段

JsonObject projects = new JsonObject();
    QueryRequest queryProjects = new QueryRequest("release");
    queryProjects.setPageSize(1);
    queryProjects.setLimit(1000);
    queryProjects.setFetch(new Fetch("_refObjectName","Name"));
    QueryResponse queryResponse;
    try {
        queryResponse = restApi.query(queryProjects);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        throw new ServiceException(e);
    }

结果我得到的列表中有很多重复项。经过仔细检查后,似乎我得到了所有版本的对象 - 对于相同的迭代/发布我有多个版本 - 我可以看到不同的“_objectVersion”属性用于此类重复项。

为什么会这样?

请您帮我查询一下将查找不同的迭代/发布列表的查询 - 我对最新版本感兴趣。

我可以用Java过滤掉它,但感觉有更多'正确'的方法。获取具有整个对象历史记录的列表也不是最佳的代码性能。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在顶层项目的Rally中创建版本和迭代时,可以选择在整个项目层次结构中传播它们。例如,如果您有具有子项目P2和孙子项目P21和P22的顶级项目P1,则可以创建具有相同名称和相同开始日期和发布日期的4个版本。它们不是完全相同的版本:它们具有ObjectID和_ref特有的。请验证这是否适用于您的方案。

将发布查询限制为特定项目集请求项目。下面是一个示例,它只返回我在顶级项目中的三个版本:R1,R2和R3。注意

String projectRef = "/project/12352608219";

稍后在代码中使用:

releaseRequest.setProject(projectRef);

另请注意注释

//String workspaceRef = "/workspace/12352608129";

// releaseRequest.setWorkspace(workspaceRef);

如果我切换注释:注释掉项目引用并取消注释工作区引用,我将得到你称之为duplicates:多个R1,R2和R3版本。

public class FindReleases {

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


        String host = "https://rally1.rallydev.com";
            String username = "user@co.com";
            String password = "secret";
            String projectRef = "/project/12352608219";
            //String workspaceRef = "/workspace/12352608129"; 
            String applicationName = "RESTExampleFindReleasesByProject";

            RallyRestApi restApi = null;

        try {
                restApi = new RallyRestApi(
                        new URI(host),
                        username,
                        password);
                restApi.setApplicationName(applicationName); 

                System.out.println(restApi.getWsapiVersion()); //v.2.0 by default when using 2.0.2 jar and up



                QueryRequest  releaseRequest = new QueryRequest("Release");
                releaseRequest.setFetch(new Fetch("Name"));
                releaseRequest.setLimit(1000);
                releaseRequest.setScopedDown(false);
                releaseRequest.setScopedUp(false);
               // releaseRequest.setWorkspace(workspaceRef);
                releaseRequest.setProject(projectRef);



                QueryResponse releaseQueryResponse = restApi.query(releaseRequest);
                int numberOfReleasesInProject = releaseQueryResponse.getTotalResultCount();
                System.out.println(numberOfReleasesInProject);

                if(numberOfReleasesInProject >0){
                    for (int i=0;i<numberOfReleasesInProject;i++){
                        JsonObject releaseJsonObject = releaseQueryResponse.getResults().get(i).getAsJsonObject();
                        System.out.println(releaseJsonObject.get("Name"));
                    }
                }
        }
        finally{
            if (restApi != null) {
                restApi.close();
            }
        }

    }
}