2012-07-17 95 views

回答

0

下面是如何完成这样的例子:

public class RestExample_AddChangesetToUserStory { 

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

     // Rally parameters 
     String rallyURL = new String("https://rally1.rallydev.com"); 
     String wsapiVersion = new String("1.36"); 
     String userName = new String("[email protected]"); 
     String userPassword = new String("password"); 
     String applicationName = new String("RestExample_AddChangeSetToStory"); 

     // Workspace and Project refs 
     String workspaceRef = new String("/workspace/12345678910"); 
     String projectRef = new String("/project/12345678911"); 

     // Create and configure a new instance of RallyRestApi 
     RallyRestApi restApi = new RallyRestApi(
                new URI(rallyURL), 
                userName, 
                userPassword 
               ); 
     restApi.setWsapiVersion(wsapiVersion); 
     restApi.setApplicationName(applicationName); 

     // Changeset Owner Username 
     String changesetOwner = new String("[email protected]"); 

     // SCM Repository Name 
     String scmRepositoryName = new String("SVNRepository"); 

     // FormattedID of Artifact to associate to 
     String storyFormattedID = "US14"; 

     //Read User 
     QueryRequest userRequest = new QueryRequest("User"); 
     userRequest.setFetch(new Fetch("UserName", "Subscription", "DisplayName")); 
     userRequest.setQueryFilter(new QueryFilter("UserName", "=", changesetOwner)); 
     QueryResponse userQueryResponse = restApi.query(userRequest); 
     JsonArray userQueryResults = userQueryResponse.getResults(); 
     JsonElement userQueryElement = userQueryResults.get(0); 
     JsonObject userQueryObject = userQueryElement.getAsJsonObject();   
     String userRef = userQueryObject.get("_ref").toString(); 
     System.out.println("userRef: " + userRef); 

     // Query for SCMRepository which pertains to this ChangeSet 
     QueryRequest scmRequest = new QueryRequest("SCMRepository"); 
     scmRequest.setFetch(new Fetch("ObjectID","Name","SCMType")); 
     scmRequest.setWorkspace(workspaceRef); 
     scmRequest.setProject(projectRef); 
     scmRequest.setQueryFilter(new QueryFilter("Name", "=", scmRepositoryName)); 
     QueryResponse scmQueryResponse = restApi.query(scmRequest); 
     JsonObject scmJsonObject = scmQueryResponse.getResults().get(0).getAsJsonObject(); 
     String scmRef = scmJsonObject.get("_ref").toString(); 
     System.out.println("scmRef: " + scmRef); 

     // Query for Story to which we want to add ChangeSet 
     QueryRequest storyRequest = new QueryRequest("HierarchicalRequirement"); 
     storyRequest.setFetch(new Fetch("FormattedID","Name","Changesets")); 
     storyRequest.setQueryFilter(new QueryFilter("FormattedID", "=", storyFormattedID)); 
     storyRequest.setWorkspace(workspaceRef); 
     storyRequest.setProject(projectRef); 
     QueryResponse storyQueryResponse = restApi.query(storyRequest); 
     JsonObject storyJsonObject = storyQueryResponse.getResults().get(0).getAsJsonObject(); 
     JsonArray changesetJsonArray = storyJsonObject.getAsJsonArray("Changesets"); 
     String storyRef = storyJsonObject.get("_ref").toString(); 

     System.out.println("storyRef: " + storyRef); 
     System.out.println("Number of existing Changesets: " + changesetJsonArray.size()); 

     // Setup JsonObject for new Changeset 
     JsonObject newChangeset = new JsonObject(); 
     newChangeset.addProperty("SCMRepository", scmRef); 
     newChangeset.addProperty("Author", userRef); 
     newChangeset.addProperty("Revision", "2451"); 
     newChangeset.addProperty("Uri", "https://svnrepo.company.com:8001"); 
     newChangeset.addProperty("CommitTimestamp", "2012-07-18T18:00Z"); 
     // Artifacts JsonArray for collection on Changeset 
     JsonArray artifactsJsonArray = new JsonArray(); 
     artifactsJsonArray.add(storyJsonObject); 

     // Associate newChangeset to Story artifact 
     newChangeset.add("Artifacts", artifactsJsonArray); 

     try { 

      //Create the Changeset 
      System.out.println("Creating Changeset..."); 

      CreateRequest createRequest = new CreateRequest("Changeset", newChangeset); 
      System.out.println(createRequest.getBody()); 
      CreateResponse createResponse = restApi.create(createRequest); 

      if (createResponse.wasSuccessful()) { 
       System.out.println(String.format("Created %s", createResponse.getObject().get("_ref").getAsString())); 
       String[] warningList; 
       warningList = createResponse.getWarnings(); 
       for (int i=0;i<warningList.length;i++) { 
        System.out.println(warningList[i]); 
       } 
      } else { 
       String[] errorList; 
       errorList = createResponse.getErrors(); 
       for (int i=0;i<errorList.length;i++) { 
        System.out.println(errorList[i]); 
       } 
      } 

     } finally { 
      //Release all resources 
      restApi.close(); 
     } 
    } 
} 
+0

嗨,马克,感谢您的答复,它帮助了很多,我面对的唯一问题是,我得到一个错误说: 无法为工件设置值:无法将对象连接到值,工件值位于不同的工作区中。 [对象工作空间OID = 5103,值工作空间OID = 127336 – 2012-07-18 13:30:59

+1

您的用户故事(或任何此类事物)必须与包含SCM存储库和构建定义的工作空间位于同一工作空间中。作为一般规则,在Rally中操作数据时不能跨越工作区。 – 2012-07-18 14:08:57

+0

好吧,我明白了,有没有什么方法可以检查在工件工作区中使用的SCM存储库。即这件神器的SCM Repo是什么?非常感谢您的帮助 – 2012-07-18 14:17:42

相关问题