如何使用 RallyrestApi 从集会的详细信息页面获取用户故事的实际值、待办事项、估计字段

How to fetch a userstory's Actuals,Todo,Estimate fields from detail page of rally using RallyrestApi

当用户故事的任务不存在时,我能够从其 Task.But 中获取用户故事的实际值、估计值和值,我必须从 rally 的用户故事详细信息页面中获取值。

Ex:(我需要像下面那样从 rallyrestapi c# 工具包中获取) https://rally1.rallydev.com/#/262768386856d/detail/defect/161729744764

目前我尝试了以下方法,但没有成功

// 查询 UserStories

    [![Request storyRequest = new Rally.RestApi.Request("hierarchicalrequirement");
                storyRequest.Workspace = workspaceRef;
                // storyRequest.Project = projectRef;
                storyRequest.ProjectScopeUp = projectScopingUp;
                storyRequest.ProjectScopeDown = projectScopingDown;
                storyRequest.Fetch = new List<string>()
                {
                    "Name",
                    "ObjectID",
                    "ScheduleState",
                    "State",
                    "FormattedID",
                    "CreationDate",
                    "ReleaseDate",
                    "PlanEstimate",
                    "Iteration",
                    "StartDate",
                    "EndDate",
                    "Release",
                    "ScheduleState",
                    "Tasks",                    
                };
                string userstoryId = "";
                long userstoryObjId ;
                storyRequest.Query = new Query("Iteration.Name", Query.Operator.Equals, myIterationName);
                QueryResult queryStoryResults = rallyRestApi.Query(storyRequest);
                ConvertToJSon(queryStoryResults);
                // Fetch Actual and Estimated Time request for task
                foreach (var userstory in queryStoryResults.Results)
                {                                  
                    Rally.RestApi.Request tasksRequest = new Rally.RestApi.Request(userstory\["Tasks"\]);
                    QueryResult queryTaskResult = rallyRestApi.Query(tasksRequest);                 
                }

Request details = new Rally.RestApi.Request("details");
                details.Workspace = workspaceRef;
                // storyRequest.Project = projectRef;
                details.ProjectScopeUp = projectScopingUp;
                details.ProjectScopeDown = projectScopingDown;
                details.Fetch = new List<string>()
                {
                    "Estimate",
                    "Actuals",
                    "ToDo"
                };
                storyRequest.Query = new Query("Defect.ObjectID", Query.Operator.Equals, "298510499032");
                QueryResult detailsdata = rallyRestApi.Query(details);][1]][1]

它给出了未经授权的 401 错误。请指导我如何从集会详细信息页面中获取上述字段。

我在 Java 中有相同的示例,但它可能对您有所帮助:

import com.google.gson.JsonObject;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.response.QueryResponse;
import com.rallydev.rest.util.Fetch;
import com.rallydev.rest.util.QueryFilter;
import java.io.IOException;
import java.net.URI;

public class FindUserStoryByID {

  public static void main(String[] args) throws IOException {
    String host = "https://rally1.rallydev.com";
    String apiKey = "YOUR_API_KEY"; #or you may use login/password

    RallyRestApi rallyRestApi = null;

    try {
      rallyRestApi = new RallyRestApi(URI.create(host), apiKey);

      QueryRequest query = new QueryRequest("HierarchicalRequirement");
      query.setFetch(new Fetch("FormattedID", "Name", "TaskEstimateTotal", "TaskRemainingTotal",
          "TaskActualTotal"));
      query.setLimit(1000);
      query.setScopedDown(true);
      query.setQueryFilter(new QueryFilter("FormattedID", "=", "US11111"));

      QueryResponse response = rallyRestApi.query(query);

      if (response.wasSuccessful()) {
        for (int i = 0; i < response.getTotalResultCount(); i++) {
          JsonObject jsonObject = response.getResults().get(i).getAsJsonObject();
          System.out.println("FormattedID: " + jsonObject.get("FormattedID"));
          System.out.println("Name: " + jsonObject.get("Name"));
          System.out.println("TaskEstimateTotal: " + jsonObject.get("TaskEstimateTotal"));
          System.out.println("TaskRemainingTotal: " + jsonObject.get("TaskRemainingTotal"));
          System.out.println("TaskActualTotal: " + jsonObject.get("TaskActualTotal"));
        }
      }
    } finally {
      if (rallyRestApi != null) {
        rallyRestApi.close();
      }
    }
  }

}

输出将是这样的:

FormattedID: "US11111"
Name: "My cool user story"
TaskEstimateTotal: 29.0
TaskRemainingTotal: 29.0
TaskActualTotal: 0.0

签入 https://rally1.rallydev.com/account 并检查 api 密钥,无论密钥访问是否完全授权,这就是问题所在