1

使用 Rally 的 rest api,我如何查询以找到用户的电子邮件地址?

例如,我有这个查询来获取一个缺陷,其中包含打开它的用户的全名和拥有缺陷的用户:

 QueryRequest defectRequest = new QueryRequest("defect");
 defectRequest.setFetch(new Fetch("Project", "LastUpdateDate", "FormattedId"));
 defectRequest.setQueryFilter(new QueryFilter("Project.Name", "=", rallyProjectName).and(new QueryFilter("LastUpdateDate", ">", defectTimestamp.getTimestamp())));
 QueryResponse projectDefects = rallyApi.query(defectRequest);

现在我想从缺陷中获取 Submitted By 和 Owner 用户并获取他们的电子邮件地址。

4

1 回答 1

0

确保在 Fetch 中包含“Owner”和“SubmittedBy”字段以查找缺陷:

   defectRequest.setFetch(new Fetch("Project", "LastUpdateDate", "FormattedId", "Owner", "SubmittedBy"));

然后每个返回的缺陷上的 Owner 和 SubmittedBy 字段(如果填充在 Rally 中且不为空)将引用 Rally 中相应的 User 对象。然后,您对此进行第二次请求的倾向就很明显了。最简单的方法是使用该 ref 并直接针对 ref 执行 GetRequest。下面以 Owner 字段为例(请原谅笨拙的 try/catch 块 - 它正在捕获空的 Owner 字段):

        QueryResponse projectDefects = restApi.query(defectRequest);
        if (projectDefects.wasSuccessful()) {
            for (JsonElement result : projectDefects.getResults()) {
                JsonObject defect = result.getAsJsonObject();
                try {
                    JsonObject ownerJsonObject = defect.get("Owner").getAsJsonObject();
                    String ownerRef = ownerJsonObject.get("_ref").getAsString();
                    GetRequest ownerRequest = new GetRequest(ownerRef);
                    GetResponse ownerResponse = restApi.get(ownerRequest);
                    JsonObject ownerObj = ownerResponse.getObject();
                    System.out.println(String.format("Read owner. EmailAddress = %s",
                            ownerObj.get("EmailAddress").getAsString()));
                } catch (java.lang.IllegalStateException ise) {
                    // System.out.println("IllegalStateException caught: ");
                    // ise.printStackTrace();
                }
            }
        }
于 2012-09-05T01:10:26.380 回答