2012-03-29 7 views
1

ラリーレスト.net apiでユーザーリストを照会しようとしたときにKeyNotFound例外が発生しました。例えば、コードは以下の通りである:ラリーレスト経由でワークスペースに問い合わせると失敗しました.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でプロジェクトにアクセスする権限を持つユーザーのリストを取得する方法はありますか?

多くのありがとうございました。

答えて

2

あなたの構文はOKです。 「...キーが存在しませんでした...」というエラーがどこで発生していますか? Resultsコレクションにアクセスするときは?

サブスクリプション内のユーザーをクエリし、ワークスペースとプロジェクトのアクセス許可を要約するコードサンプルを以下に示します。私はこれが役立つことを願っています

 // 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のtry/catchブロックラリーWSAPIでは、デフォルトでは、サブスクリプション管理者が空UserPermissions –

+0

おかげで@マークを持って、それが機能するようになりましたので調べるUserPermissionsが必要な場合。 RequestにQueryオブジェクトを割り当てる必要があるようです。 –

+0

さらに、thisPermission ["_ type"]を使用して、処理する権限(作業領域またはプロジェクト)のタイプを判断できます。 –

関連する問題