2013-07-05 51 views
1

我正在使用以下一段代碼來查詢工作區。但顯然,如果工作區未設置爲默認值,則此查詢將失敗。 如何成功查詢不是我的默認工作區的工作區? 謝謝。Rally REST API找不到現有的工作區

try{ 
     QueryRequest proj1 = new QueryRequest("Workspace"); 
     proj1.setFetch(new Fetch("Name")); 
     proj1.setQueryFilter(new QueryFilter("Name", "=",args[2])); 
     QueryResponse proj2 = batman.query(proj1); 
     Wspace_ref = proj2.getResults().get(0).getAsJsonObject().get("_ref").getAsString(); 
     System.out.println("Workspace found."); 
    }catch (IndexOutOfBoundsException e){ 
     System.out.println("Workspace Not Found."); 
     System.exit(1); 
    } 

回答

1

由於默認情況下拉力REST查詢是工作區範圍的,以獲得工作區的枚舉,你需要查詢認購對象,然後拉它的工作區集合。

這裏有一個簡單的例子:

public class RestExample_QueryWorkspacesAndProjects { 

      public static void main(String[] args) throws URISyntaxException, IOException { 

        // Create and configure a new instance of RallyRestApi 
        // Connection parameters 
        String rallyURL = "https://rally1.rallydev.com"; 
        String wsapiVersion = "1.43"; 
        String applicationName = "RestExample_QueryWorkspacesAndProjects"; 

        // Credentials 
        String userName = "[email protected]"; 
        String userPassword = "topsecret"; 

        RallyRestApi restApi = new RallyRestApi(
          new URI(rallyURL), 
          userName, 
          userPassword); 
        restApi.setWsapiVersion(wsapiVersion); 
        restApi.setApplicationName(applicationName);  

        //Read Subscription 
        QueryRequest subscriptionRequest = new QueryRequest("Subscriptions"); 
        subscriptionRequest.setFetch(new Fetch("Name", "SubscriptionID", "Workspaces", "Name")); 

        QueryResponse subscriptionQueryResponse = restApi.query(subscriptionRequest); 
        JsonArray subscriptionQueryResults = subscriptionQueryResponse.getResults(); 
        JsonElement subscriptionQueryElement = subscriptionQueryResults.get(0); 
        JsonObject subscriptionQueryObject = subscriptionQueryElement.getAsJsonObject(); 
        String subID = subscriptionQueryObject.get("SubscriptionID").toString(); 

        System.out.println("Read Subscription: " + subID); 

        // Grab Workspaces Collection 
        JsonArray myWorkspaces = subscriptionQueryObject.get("Workspaces").getAsJsonArray(); 

        // Initialize Project counter 
        int numberProjects = 0; 

        for (int i=0; i<myWorkspaces.size(); i++) { 
          JsonObject workspaceObject = myWorkspaces.get(i).getAsJsonObject(); 
          String workspaceRef = workspaceObject.get("_ref").getAsString();     

         GetRequest workspaceRequest = new GetRequest(workspaceRef); 
         workspaceRequest.setFetch(new Fetch("Name", "Projects")); 
         GetResponse workspaceResponse = restApi.get(workspaceRequest); 
         JsonObject workspaceObj = workspaceResponse.getObject(); 

         String workspaceName = workspaceObj.get("Name").getAsString(); 
         System.out.printf("Workspace %d ==> %s\n", i, workspaceName); 

         JsonArray myProjects = workspaceObj.get("Projects").getAsJsonArray(); 

         for (int j=0; j<myProjects.size(); j++) 
         { 
          JsonObject projectObject = myProjects.get(j).getAsJsonObject(); 
          String projectRef = projectObject.get("_ref").getAsString(); 
          GetRequest projectRequest = new GetRequest(projectRef); 
          projectRequest.setFetch(new Fetch("Name")); 
          GetResponse projectResponse = restApi.get(projectRequest);    

          JsonObject projectObj = projectResponse.getObject(); 
          String projectName = projectObj.get("Name").getAsString(); 
          System.out.printf("==> Project %d ==> %s\n", j, projectName); 

          numberProjects++; 
         } 
        } 

        String numberWorkspacesStr = String.valueOf(myWorkspaces.size()); 
        String numberProjectsStr = String.valueOf(numberProjects); 

        System.out.println("Total Workspaces: " + numberWorkspacesStr); 
        System.out.println("Total Projects: " + numberProjectsStr); 

        restApi.close(); 
      }