1

当我尝试在 rally rest .net api 中查询用户列表时,我遇到了 KeyNotFound 异常。示例代码如下:

Request query = new Request("User");
query.Workspace = workspaceRef;

var response = api.Query(query);

异常的详细信息是:“字典中不存在给定的键。” 及其堆栈跟踪:

at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Rally.RestApi.DynamicJsonObject.GetMember(String name)
at Rally.RestApi.RallyRestApi.Query(Request request)

请告诉我查询工作区用户列表的正确方法。

顺便说一句,有没有办法获得有权访问 Rally Rest .NET api 中项目的用户列表?

非常感谢您的帮助。

4

1 回答 1

2

你的语法看起来不错。您在哪里看到“...密钥不存在...”错误发生?访问结果集合时?

我在下面包含了一个代码示例,该示例说明了在订阅中查询用户并总结了他们的工作区和项目权限。我希望这有帮助。

        // Query for User
        Request userRequest = new Request("user");
        userRequest.Fetch = new List<string>()
            {
                "UserName",
                "Subscription",
                "DisplayName",
                "UserPermissions"
            };

        userRequest.Query = new Query("");
        QueryResult queryUserResults = restApi.Query(userRequest);

        String userName;
        String displayName;            
        String mySubscriptionRef;
        String mySubscriptionName;

        // Fetch strings to pull in Subscription and UserPermission metadata
        string[] subscriptionFetch = { "Name", "SubscriptionID", "CreationDate" };
        string[] userPermissionFetch = { "Name", "Role", "Workspace", "Project" };
        string[] workspaceFetch = {"Name", "Description"};

        foreach (var result in queryUserResults.Results)
        {
            userName = result["UserName"];
            displayName = result["DisplayName"];
            var mySubscription = result["Subscription"];
            mySubscriptionRef = mySubscription["_ref"];

            // Query by Workspace Ref.
            var mySubscriptionFetched = restApi.GetByReference(mySubscriptionRef, subscriptionFetch);
            mySubscriptionName = mySubscriptionFetched["Name"];

            Console.WriteLine("Username: " + userName);
            Console.WriteLine("Display Name: " + displayName);
            Console.WriteLine("Subscription: " + mySubscriptionName);

            var myUserPermissions = result["UserPermissions"];

            // Loop through UserPermissions Collection
            foreach (var thisPermission in myUserPermissions)
            {
                // Grab UserPermission ref
                var myUserPermissionRef = thisPermission["_ref"];
                // Query from UserPermission ref
                var myUserPermissionFetched = restApi.GetByReference(myUserPermissionRef, userPermissionFetch);
                // Output project name
                Console.WriteLine("         Role: " + myUserPermissionFetched["Role"]);

                // Try Workspace ref
                try
                {

                    var myWorkspace = myUserPermissionFetched["Workspace"];
                    var myWorkspaceRef = myWorkspace["_ref"];

                    // Query from Workspace ref
                    var myWorkspaceFetched = restApi.GetByReference(myWorkspaceRef, workspaceFetch);

                    // Output Workspace data
                    Console.WriteLine("         Workspace Name:" + myWorkspaceFetched["Name"]);

                }
                catch (KeyNotFoundException knfe)
                {
                    Console.WriteLine("Key not found: " + "Workspace");
                }

                // Try Project ref
                try
                {

                    var myProject = myUserPermissionFetched["Project"];
                    var myProjectRef = myProject["_ref"];

                    // Query from Workspace ref
                    var myProjectFetched = restApi.GetByReference(myProjectRef, workspaceFetch);

                    // Output Project data
                    Console.WriteLine("         Project Name:" + myProjectFetched["Name"]);
                }
                catch (KeyNotFoundException knfe)
                {
                    Console.WriteLine("Key not found: " + "Workspace");
                }
于 2012-03-29T23:43:28.690 回答