0
由于我拥有故事的格式化ID和对象ID,我需要为故事创建新的Changeset条目。 我正在使用给定的Java工具包Rally REST API(http://developer.rallydev.com/help/java-toolkit-rally-rest-api)Rally update使用Java工具包为Rally REST API更改来自Java的数据
这里的任何帮助将是非常有用的谢谢!
由于我拥有故事的格式化ID和对象ID,我需要为故事创建新的Changeset条目。 我正在使用给定的Java工具包Rally REST API(http://developer.rallydev.com/help/java-toolkit-rally-rest-api)Rally update使用Java工具包为Rally REST API更改来自Java的数据
这里的任何帮助将是非常有用的谢谢!
下面是如何完成这样的例子:
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();
}
}
}
嗨,马克,感谢您的答复,它帮助了很多,我面对的唯一问题是,我得到一个错误说: 无法为工件设置值:无法将对象连接到值,工件值位于不同的工作区中。 [对象工作空间OID = 5103,值工作空间OID = 127336 – 2012-07-18 13:30:59
您的用户故事(或任何此类事物)必须与包含SCM存储库和构建定义的工作空间位于同一工作空间中。作为一般规则,在Rally中操作数据时不能跨越工作区。 – 2012-07-18 14:08:57
好吧,我明白了,有没有什么方法可以检查在工件工作区中使用的SCM存储库。即这件神器的SCM Repo是什么?非常感谢您的帮助 – 2012-07-18 14:17:42