3

C# と Rally.RestAPI.dll を使用して、Rally サーバー ( https://rally1.rallydev.com)からデータを取得しています。サーバーは最近 Web サービス v2.0 にアップグレードされましたが、ユーザー ストーリーのタスクを取得する際に問題が発生しています。2.0 への移行に伴い、子コレクションの表示方法が API で変更されたことは知っていますが、私が試みていることは機能していません。

4

1 に答える 1

1

v2.0 では、パフォーマンス上の理由から、同じ応答で子コレクションを返す機能が削除されました。コレクションをフェッチすると、コレクション データを取得するためのカウントと URL を含むオブジェクトが返されます。コレクションの要素を取得するには、別のリクエストが必要です。ユーザー ストーリーの結果を反復処理し、ストーリーの「タスク」コレクションにアクセスし、個々のタスク属性にアクセスするための別の要求を発行するコードを次に示します。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Rally.RestApi;
using Rally.RestApi.Response;

namespace aRestApp_CollectionOfTasks
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initialize the REST API
            RallyRestApi restApi;
            restApi = new RallyRestApi("user@co.com", "secret", "https://rally1.rallydev.com", "v2.0");

            //Set our Workspace and Project scopings
            String workspaceRef = "/workspace/11111"; //please replace this OID with an OID of your workspace
            String projectRef = "/project/22222";     //please replace this OID with an OID of your project
            bool projectScopingUp = false;
            bool projectScopingDown = true;

            Request storyRequest = new Request("HierarchicalRequirement");


            storyRequest.Workspace = workspaceRef;
            storyRequest.Project = projectRef;
            storyRequest.ProjectScopeUp = projectScopingUp;
            storyRequest.ProjectScopeDown = projectScopingDown;

            storyRequest.Fetch = new List<string>()
                {
                    "Name",
                    "FormattedID",
                    "Tasks",
                    "Estimate"


                };
            storyRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThan, "2013-08-01");      
            QueryResult queryStoryResults = restApi.Query(storyRequest);

            foreach (var s in queryStoryResults.Results)
            {
                Console.WriteLine("----------");
                Console.WriteLine("FormattedID: " + s["FormattedID"] + " Name: " + s["Name"]);
                //Console.WriteLine("Tasks ref: " + s["Tasks"]._ref);
                Request taskRequest = new Request(s["Tasks"]);
                QueryResult queryTaskResult = restApi.Query(taskRequest);
                if (queryTaskResult.TotalResultCount > 0)
                {
                    foreach (var t in queryTaskResult.Results)
                    {
                        var taskEstimate = t["Estimate"];
                        var taskName = t["Name"];
                        Console.WriteLine("Task Name: " + taskName + " Estimate: " + taskEstimate);
                    }
                }
                else
                {
                    Console.WriteLine("no tasks found");
                }
            }
        }
    }
}
于 2013-08-23T20:56:11.967 に答える