0

我得到:

未处理的异常:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。

当迭代用户故事查询结果并尝试访问故事[“任务”]

foreach (var story in queryStoryResults.Results)
       {
           Console.WriteLine("FormattedID: " + story["FormattedID"]);
           Console.WriteLine("Name: " + story["Name"]);
           Console.Write("Tasks: " + story["Tasks"]);

}

4

1 回答 1

1

首先,确保正在获取任务,以及要提取的任务特定字段,例如状态。接下来,需要在循环中迭代用户故事结果的嵌套循环。这是代码示例。它从当前迭代中查询用户故事,并打印出与查询结果相关的 FormattedID 和 State of tasks:

namespace RESTexample_storiesFromIteration
{
    class Program
    {
        static void Main(string[] args)
        {

            //Initialize the REST API
            RallyRestApi restApi;
            restApi = new RallyRestApi("user@domain.com", "1984", "https://rally1.rallydev.com", "1.43");

            //Set our Workspace and Project scopings
            String workspaceRef = "/workspace/1111";
            String projectRef = "/project/2222";
            bool projectScopingUp = false;
            bool projectScopingDown = true;

            DateTime now = DateTime.Today;
            String nowString = now.ToString("yyyy-MM-dd");

            Request iterationRequest = new Request("Iteration");
            iterationRequest.Workspace = workspaceRef;
            iterationRequest.Project = projectRef;

            iterationRequest.Fetch = new List<string>()
                {
                    "Name",
                    "StartDate",
                    "EndDate",
                    "Project",
                    "State"
                };

            String iterationQueryString = "((StartDate <= \"" + nowString + "\") AND (EndDate >= \"" + nowString + "\"))";
            iterationRequest.Query = new Query(iterationQueryString);

            QueryResult queryIterationResults = restApi.Query(iterationRequest);

            var myIteration = queryIterationResults.Results.First();
            var myIterationName = myIteration["Name"];
            var myIterationProject = myIteration["Project"];
            var myIterationProjectName = myIterationProject["Name"];

            Console.WriteLine("Name: " + myIterationName);
            Console.WriteLine("Project Ref: " + myIterationProjectName);
            Console.WriteLine("State: " + myIteration["State"]);

            // Query for Stories

            Request storyRequest = new Request("hierarchicalrequirement");
            storyRequest.Workspace = workspaceRef;
            storyRequest.Project = projectRef;
            storyRequest.ProjectScopeUp = projectScopingUp;
            storyRequest.ProjectScopeDown = projectScopingDown;
            storyRequest.Fetch = new List<string>()
                {
                    "Name",
                    "ObjectID",
                    "ScheduleState",
                    "State",
                    "FormattedID",
                    "PlanEstimate",
                    "Iteration",
                    "Tasks"
                };

            storyRequest.Query = new Query("Iteration.Name", Query.Operator.Equals, myIterationName);
            QueryResult queryStoryResults = restApi.Query(storyRequest);

            foreach (var s in queryStoryResults.Results)
            {
                Console.WriteLine("----------");
                Console.WriteLine("FormattedID: " + s["FormattedID"]);
                Console.WriteLine("Name: " + s["Name"]);
                Console.WriteLine("PlanEstimate: " + s["PlanEstimate"]);

                var tasks = s["Tasks"];

                foreach (var t in tasks)
                 {
                     Console.WriteLine("Task: " + t["FormattedID"] + " " + t["State"]);
                 }
            }

        }
    }
}
于 2013-07-08T20:10:12.540 回答