2012-03-29 9 views
1

Ich habe die KeyNotFound-Ausnahme erfüllt, wenn ich versucht habe, die Benutzerliste im Rallyestopp .net API abzufragen. Der Beispielcode folgt:Fehler beim Abfragen von Benutzern im Arbeitsbereich über Rally Rest. NET api

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

var response = api.Query(query); 

Die Einzelheiten der Ausnahme ist: „Der angegebene Schlüssel nicht im Wörterbuch vorhanden war“ und seine Stapelspuren:

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

Bitte beraten Sie mich die richtige Möglichkeit, eine Liste der Benutzer des Arbeitsbereichs abzufragen.

BTW, gibt es eine Möglichkeit, eine Liste von Benutzern zu erhalten, die berechtigt sind, auf ein Projekt in Rally Rest .NET API zuzugreifen?

Vielen Dank für Ihre Hilfe.

Antwort

2

Ihre Syntax sieht gut aus. Wo tritt der Fehler "... Schlüssel war nicht vorhanden ..." auf? Beim Zugriff auf die Ergebnissammlung?

Ich schließe unten ein Codebeispiel ein, das die Abfrage von Benutzern innerhalb eines Abonnements darstellt und deren Arbeitsbereich und Projektberechtigungen zusammenfasst. Ich hoffe das hilft.

 // 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"); 
       } 
+0

FYI die try/catch-Blöcke bei der Prüfung UserPermissions sind notwendig, weil die standardmäßig in der Rallye WSAPI Abonnement Administratoren haben leere UserPermissions –

+0

Dank @ Mark, es funktioniert jetzt. Es scheint, dass ein Query-Objekt Request zugewiesen werden muss. –

+0

Außerdem könnten wir thisPermission ["_ type"] verwenden, um zu bestimmen, welche Art von Berechtigung (Arbeitsbereich oder Projekt) zu behandeln ist. –