Ошибка при запросе пользователей в рабочей области через Rally Rest .net api - PullRequest
1 голос
/ 29 марта 2012

Я встретил исключение KeyNotFound, когда попытался запросить список пользователей в Rally Rest .Net API. Пример кода следующий:

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?

Большое спасибо за помощь.

1 Ответ

2 голосов
/ 30 марта 2012

ваш синтаксис выглядит хорошо.Где вы видите, что произошла ошибка «... ключа не было ...»?При доступе к коллекции результатов?

я включаю приведенный ниже пример кода, который иллюстрирует запросы пользователей в рамках подписки и обобщение их рабочей области и разрешений проекта.Надеюсь, это поможет.

        // 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");
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...